diff --git a/FrEee.Assets/Data/EventTypes.txt b/FrEee.Assets/Data/EventTypes.txt index 920a13bb3..fc438edc2 100644 --- a/FrEee.Assets/Data/EventTypes.txt +++ b/FrEee.Assets/Data/EventTypes.txt @@ -8,10 +8,10 @@ EVENT TYPES DATA FILE Name := Ship - Damage Is Negative When := amount > 0 -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Vehicles import SpaceVehicle; -Import := from FrEee.Game.Interfaces import IUnit; -Import := from FrEee.Game.Interfaces import IVehicle; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Vehicles import SpaceVehicle; +Import := from FrEee.Interfaces import IUnit; +Import := from FrEee.Interfaces import IVehicle; Target Selector := Galaxy.Current.FindSpaceObjects[SpaceVehicle]().Except[IVehicle](Galaxy.Current.FindSpaceObjects[IUnit]()) Parameter := VehicleName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -20,8 +20,8 @@ Action := target.TakeDamage("Skips All Shields", amount); Name := Ship - Lose Movement Is Negative When := amount > 0 -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Vehicles import Ship; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Vehicles import Ship; Target Selector := Galaxy.Current.FindSpaceObjects[Ship]() Parameter := VehicleName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -30,8 +30,8 @@ Action := target.MovementRemaining -= amount; Name := Ship - Lose Supply Is Negative When := amount > 0 -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Vehicles import Ship; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Vehicles import Ship; Target Selector := Galaxy.Current.FindSpaceObjects[Ship]() Parameter := VehicleName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -40,8 +40,8 @@ Action := target.SupplyRemaining -= amount; Name := Ship - Cargo Damage Is Negative When := amount > 0 -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Interfaces import ICargoContainer; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Interfaces import ICargoContainer; Target Selector := Galaxy.Current.FindSpaceObjects[ICargoContainer]() Parameter := VehicleName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -50,10 +50,10 @@ Action := target.Cargo.TakeDamage("Skips All Shields", amount); Name := Ship - Moved Is Negative When := true -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Vehicles import SpaceVehicle; -Import := from FrEee.Game.Interfaces import IUnit; -Import := from FrEee.Game.Interfaces import IVehicle; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Vehicles import SpaceVehicle; +Import := from FrEee.Interfaces import IUnit; +Import := from FrEee.Interfaces import IVehicle; Target Selector := Galaxy.Current.FindSpaceObjects[SpaceVehicle]().Except[IVehicle](Galaxy.Current.FindSpaceObjects[IUnit]()) Parameter := VehicleName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -62,9 +62,9 @@ Action := target.Sector = Galaxy.Current.PickRandomSector(); Name := Planet - Conditions Change Is Negative When := amount < 0 -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Space import Planet; -Import := from FrEee.Game.Interfaces import IUnit; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Space import Planet; +Import := from FrEee.Interfaces import IUnit; Target Selector := Galaxy.Current.FindSpaceObjects[Planet]() Parameter := PlanetName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -73,9 +73,9 @@ Action := # planets don't have conditions yet so do nothing Name := Planet - Value Change Is Negative When := amount < 0 -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Space import Planet; -Import := from FrEee.Game.Interfaces import IUnit; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Space import Planet; +Import := from FrEee.Interfaces import IUnit; Import := from FrEee.Utility import Resource; Target Selector := Galaxy.Current.FindSpaceObjects[Planet]() Parameter := PlanetName = target.Name; @@ -87,8 +87,8 @@ Action := target.Value[Resource.Radioactives] += amount; Name := Planet - Population Change Is Negative When := amount < 0 -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Space import Planet; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Space import Planet; Target Selector := Galaxy.Current.FindSpaceObjects[Planet]().Where(lambda p: p.Colony != None) Parameter := PlanetName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -97,19 +97,19 @@ Action := target.Colony.ChangePopulation(amount); Name := Planet - Population Rebel Is Negative When := true -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Space import Planet; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Space import Planet; Target Selector := Galaxy.Current.FindSpaceObjects[Planet]().Where(lambda p: p.Colony != None) Parameter := PlanetName = target.Name; Parameter := SystemName = target.StarSystem.Name; Parameter := SectorName = target.Sector.Name; -Action := from FrEee.Game.Objects.Space import Galaxy; +Action := from FrEee.Objects.Space import Galaxy; Action := target.Colony = source if source != None else Galaxy.Current.CreateNewEmpire(); Name := Planet - Facility Damage Is Negative When := true -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Space import Planet; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Space import Planet; Target Selector := Galaxy.Current.FindSpaceObjects[Planet]().Where(lambda p: p.Colony != None) Parameter := PlanetName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -118,8 +118,8 @@ Action := target.Colony.Facilities.PickRandom().Dispose() for num in range(0, Name := Planet - Cargo Damage Is Negative When := amount > 0 -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Space import Planet; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Space import Planet; Target Selector := Galaxy.Current.FindSpaceObjects[Planet]().Where(lambda p: p.Colony != None) Parameter := PlanetName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -137,8 +137,8 @@ Action := target.NormalizeStoredResources(); Name := Planet - Plague Is Negative When := true -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Space import Planet; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Space import Planet; Target Selector := Galaxy.Current.FindSpaceObjects[Planet]().Where(lambda p: p.Colony != None) Parameter := PlanetName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -147,8 +147,8 @@ Action := # TODO - implement plagues Name := Planet - Destroyed Is Negative When := true -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Space import Planet; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Space import Planet; Target Selector := Galaxy.Current.FindSpaceObjects[Planet]() Parameter := PlanetName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -157,8 +157,8 @@ Action := target.ConvertToAsteroidField(); Name := Star - Destroyed Is Negative When := true -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Space import Star; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Space import Star; Target Selector := Galaxy.Current.FindSpaceObjects[Star]() Parameter := StarName = target.Name; Parameter := SystemName = target.StarSystem.Name; @@ -167,8 +167,8 @@ Action := target.Detonate(); Name := Warp Point - Closed Is Negative When := true -Import := from FrEee.Game.Objects.Space import Galaxy; -Import := from FrEee.Game.Objects.Space import WarpPoint; +Import := from FrEee.Objects.Space import Galaxy; +Import := from FrEee.Objects.Space import WarpPoint; Target Selector := Galaxy.Current.FindSpaceObjects[WarpPoint]() Parameter := WarpPointName = target.Name; Parameter := SystemName = target.StarSystem.Name; diff --git a/FrEee.Assets/GameSetups/Quickstart.gsu b/FrEee.Assets/GameSetups/Quickstart.gsu index 0d4acaf12..3f5ea454f 100644 --- a/FrEee.Assets/GameSetups/Quickstart.gsu +++ b/FrEee.Assets/GameSetups/Quickstart.gsu @@ -1,4 +1,4 @@ -FrEee.Game.Setup.GameSetup, FrEee.Core: +FrEee.Setup.GameSetup, FrEee.Core: p32: AllowedTrades: :All; @@ -7,7 +7,7 @@ p32: EmpirePoints: :2000; EmpireTemplates: - System.Collections.Generic.List`1[[FrEee.Game.Setup.EmpireTemplate, FrEee.Core]], System.Private.CoreLib: + System.Collections.Generic.List`1[[FrEee.Setup.EmpireTemplate, FrEee.Core]], System.Private.CoreLib: c1: :p10: AIName: @@ -175,14 +175,14 @@ p32: StartingResources: :20000; VictoryConditions: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IVictoryCondition, FrEee.Core]], System.Private.CoreLib: + System.Collections.Generic.List`1[[FrEee.Interfaces.IVictoryCondition, FrEee.Core]], System.Private.CoreLib: c1: - FrEee.Game.Objects.VictoryConditions.TotalEliminationVictoryCondition, FrEee.Core: + FrEee.Objects.VictoryConditions.TotalEliminationVictoryCondition, FrEee.Core: p0: ; ; WarpPointPlacementStrategy: - FrEee.Game.Setup.WarpPointPlacementStrategies.EdgeAlignedWarpPointPlacementStrategy, FrEee.Core: + FrEee.Setup.WarpPointPlacementStrategies.EdgeAlignedWarpPointPlacementStrategy, FrEee.Core: p2: Description: :"Places warp points along the edge of the system, aligned with the star systems they lead to."; diff --git a/FrEee.Assets/Scripts/AI/AI_Default/AI.py b/FrEee.Assets/Scripts/AI/AI_Default/AI.py index a7aafb4b0..c66527d9a 100644 --- a/FrEee.Assets/Scripts/AI/AI_Default/AI.py +++ b/FrEee.Assets/Scripts/AI/AI_Default/AI.py @@ -8,8 +8,8 @@ clr.ImportExtensions(System.Linq); import FrEee; import FrEee.Utility; -from FrEee.Game.Objects.Commands import *; -clr.ImportExtensions(FrEee.Utility.Extensions); +from FrEee.Objects.Commands import *; +clr.ImportExtensions(FrEee.Extensions); from System import Console; # alias the domain and context variables to avoid confusion diff --git a/FrEee.Assets/Scripts/AI/Vanguard/AI.csx b/FrEee.Assets/Scripts/AI/Vanguard/AI.csx index 8473e311e..6d56a82e0 100644 --- a/FrEee.Assets/Scripts/AI/Vanguard/AI.csx +++ b/FrEee.Assets/Scripts/AI/Vanguard/AI.csx @@ -9,11 +9,11 @@ #load "Plan.csx" #r "../../../bin/Debug/FrEee.Core.dll" -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; using System; using System.Linq; -using FrEee.Utility.Extensions; +using FrEee.Extensions; //Note, at present, classes within scripts cannot be stored in the AI Notes as classes. diff --git a/FrEee.Assets/Scripts/AI/Vanguard/BasicResearchModule.csx b/FrEee.Assets/Scripts/AI/Vanguard/BasicResearchModule.csx index ba308cfa8..0a5042cdf 100644 --- a/FrEee.Assets/Scripts/AI/Vanguard/BasicResearchModule.csx +++ b/FrEee.Assets/Scripts/AI/Vanguard/BasicResearchModule.csx @@ -1,7 +1,7 @@ #r "../../../bin/Debug/FrEee.Core.dll" -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Commands; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Commands; using System.Linq; /// /// Class that will issue basic research commands. diff --git a/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfColonization.csx b/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfColonization.csx index 48afb7895..1d3bd823c 100644 --- a/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfColonization.csx +++ b/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfColonization.csx @@ -1,14 +1,14 @@ #r "../../../bin/Debug/FrEee.Core.dll" #load "Plan.csx" -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Linq; using System.Collections.Generic; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Objects.Orders; -using FrEee.Utility.Extensions; +using FrEee.Objects.Vehicles; +using FrEee.Objects.Orders; +using FrEee.Extensions; /// /// Class devoted to the colonization of worlds. diff --git a/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfConstruction.csx b/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfConstruction.csx index aba35a1b2..6e1d13197 100644 --- a/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfConstruction.csx +++ b/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfConstruction.csx @@ -1,16 +1,16 @@ #r "../../../bin/Debug/FrEee.Core.dll" #load "Plan.csx" -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Linq; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Interfaces; -using FrEee.Utility.Extensions; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.LogMessages; +using FrEee.Objects.Orders; +using FrEee.Objects.Vehicles; +using FrEee.Interfaces; +using FrEee.Extensions; +using FrEee.Objects.Commands; +using FrEee.Objects.LogMessages; /// @@ -30,7 +30,7 @@ public class MinistryOfConstruction public void HandleNewlyConstructedShips(Empire empire, Galaxy galaxy) { - var completedShips = empire.Log.Where(x => x.LogMessageType == FrEee.Game.Objects.LogMessages.LogMessageType.ConstructionComplete + var completedShips = empire.Log.Where(x => x.LogMessageType == FrEee.Objects.LogMessages.LogMessageType.ConstructionComplete && x.TurnNumber == Galaxy.Current.TurnNumber); foreach(var shiplog in completedShips) { diff --git a/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfInfrastructure.csx b/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfInfrastructure.csx index b141bea49..85621f01c 100644 --- a/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfInfrastructure.csx +++ b/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfInfrastructure.csx @@ -1,17 +1,17 @@ #r "../../../bin/Debug/FrEee.Core.dll" #load "Plan.csx" -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Collections.Generic; using System.Linq; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Interfaces; -using FrEee.Utility.Extensions; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Technology; +using FrEee.Objects.Orders; +using FrEee.Objects.Vehicles; +using FrEee.Interfaces; +using FrEee.Extensions; +using FrEee.Objects.Commands; +using FrEee.Objects.Technology; /// diff --git a/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfShipDesign.csx b/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfShipDesign.csx index e6226ab02..ad4b82caf 100644 --- a/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfShipDesign.csx +++ b/FrEee.Assets/Scripts/AI/Vanguard/MinistryOfShipDesign.csx @@ -1,10 +1,10 @@ #r "../../../bin/Debug/FrEee.Core.dll" -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; using FrEee.Modding.Templates; -using FrEee.Game.Interfaces; -using FrEee.Utility.Extensions; -using FrEee.Game.Objects.Vehicles; +using FrEee.Interfaces; +using FrEee.Extensions; +using FrEee.Objects.Vehicles; using System.Linq; /// @@ -65,7 +65,7 @@ public class MinistryOfShipDesign var engine = GetLatestEngine(); - var hulls = Empire.UnlockedItems.OfType().Where(x => x.VehicleType == FrEee.Game.Enumerations.VehicleTypes.Ship && !x.IsObsolete); + var hulls = Empire.UnlockedItems.OfType().Where(x => x.VehicleType == FrEee.Enumerations.VehicleTypes.Ship && !x.IsObsolete); var chosenhull = (from hull in hulls where hull.Size > (lifeSupport.Size * hull.MinLifeSupport) diff --git a/FrEee.Assets/Scripts/AI/Vanguard/Plan.csx b/FrEee.Assets/Scripts/AI/Vanguard/Plan.csx index b6831e23d..69963cbb7 100644 --- a/FrEee.Assets/Scripts/AI/Vanguard/Plan.csx +++ b/FrEee.Assets/Scripts/AI/Vanguard/Plan.csx @@ -1,12 +1,12 @@ #r "../../../bin/Debug/FrEee.Core.dll" -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Collections.Generic; -using FrEee.Utility.Extensions; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Vehicles; +using FrEee.Extensions; +using FrEee.Objects.Orders; +using FrEee.Objects.Vehicles; using System.Linq; public static class PlanManager diff --git a/FrEee.Tests/Modding/FormulaTest.cs b/FrEee.Tests/Modding/FormulaTest.cs index 8ae25369d..c5d5d2371 100644 --- a/FrEee.Tests/Modding/FormulaTest.cs +++ b/FrEee.Tests/Modding/FormulaTest.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; using FrEee.Modding; using FrEee.Modding.Templates; using NUnit.Framework; diff --git a/FrEee.Tests/Modding/Loaders/ComponentLoaderTest.cs b/FrEee.Tests/Modding/Loaders/ComponentLoaderTest.cs index ed6f01e69..d01a0e597 100644 --- a/FrEee.Tests/Modding/Loaders/ComponentLoaderTest.cs +++ b/FrEee.Tests/Modding/Loaders/ComponentLoaderTest.cs @@ -1,5 +1,5 @@ using FrEee.Modding; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using NUnit.Framework; namespace FrEee.Tests.Modding.Loaders diff --git a/FrEee.Tests/Game/Objects/Abilities/AbilityTest.cs b/FrEee.Tests/Objects/Abilities/AbilityTest.cs similarity index 86% rename from FrEee.Tests/Game/Objects/Abilities/AbilityTest.cs rename to FrEee.Tests/Objects/Abilities/AbilityTest.cs index d6fe3bfa0..74054772c 100644 --- a/FrEee.Tests/Game/Objects/Abilities/AbilityTest.cs +++ b/FrEee.Tests/Objects/Abilities/AbilityTest.cs @@ -1,98 +1,98 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Modding.Templates; -using FrEee.Utility.Extensions; -using NUnit.Framework; -using System.Drawing; - -namespace FrEee.Tests.Game.Objects.Abilities -{ - /// - /// Tests abilities and ability rules. - /// - public class AbilityTest - { - StarSystem sys; - Empire emp; - IDesign design; - IHull hull; - Ship ship; - - [SetUp] - public void SetUp() - { - // create galaxy - TestUtilities.CreateGalaxyWithMod(); - - // create star system - sys = new(0); - Galaxy.Current.StarSystemLocations.Add(new(sys, new Point())); - - // create stuff - emp = TestUtilities.CreateEmpire(); - design = TestUtilities.CreateDesign(emp); - hull = TestUtilities.CreateHull(design); - ship = TestUtilities.CreateVehicle(design, emp); - } - - [Test] - public void AbilitiesFromMultipleSources() - { - // create a storm - Storm storm = new(); - - // place 'em - ship.Sector = sys.GetSector(0, 0); - storm.Sector = ship.Sector; - - // assign some abilities - design.Hull.AddAbility("Combat To Hit Offense Plus", 1); - storm.AddAbility("Combat Modifier - Sector", 2); - design.Hull.AddAbility("Combat Modifier - System", 4); - design.Hull.AddAbility("Combat Modifier - Empire", 8); - - // make the testing a bit faster - Galaxy.Current.EnableAbilityCache(); - - // make sure the ship picked them all up - // TODO - we need to define ability scopes since some abilities should apply only to a single empire and others to everyone (see issue #1015) - Assert.AreEqual(1 + 2 + 4 + 8, ship.Accuracy); - - // make sure the ship has all the abiliites inherited in - Assert.AreEqual(1, ship.GetAbilityValue("Combat To Hit Offense Plus").ToInt()); - Assert.AreEqual(2, ship.GetAbilityValue("Combat Modifier - Sector").ToInt()); - Assert.AreEqual(4, ship.GetAbilityValue("Combat Modifier - System").ToInt()); - Assert.AreEqual(8, ship.GetAbilityValue("Combat Modifier - Empire").ToInt()); - } - - [Test] - public void AbilitiesFromIdenticalComponents() - { - // create engine component template - ComponentTemplate engineTemplate = new() - { - Name = "Ion Engine" - }; - engineTemplate.Abilities.Add(new Ability( - engineTemplate, - AbilityRule.Find("Standard Ship Movement"), - null, - 1)); - - // add some engines - int numEngines = 6; - for (var i = 0; i < numEngines; i++) - { - design.AddComponent(engineTemplate); - } - - // test thrust - Assert.AreEqual(numEngines, design.StrategicSpeed); - } - } -} +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Modding.Templates; +using FrEee.Extensions; +using NUnit.Framework; +using System.Drawing; + +namespace FrEee.Tests.Objects.Abilities +{ + /// + /// Tests abilities and ability rules. + /// + public class AbilityTest + { + StarSystem sys; + Empire emp; + IDesign design; + IHull hull; + Ship ship; + + [SetUp] + public void SetUp() + { + // create galaxy + TestUtilities.CreateGalaxyWithMod(); + + // create star system + sys = new(0); + Galaxy.Current.StarSystemLocations.Add(new(sys, new Point())); + + // create stuff + emp = TestUtilities.CreateEmpire(); + design = TestUtilities.CreateDesign(emp); + hull = TestUtilities.CreateHull(design); + ship = TestUtilities.CreateVehicle(design, emp); + } + + [Test] + public void AbilitiesFromMultipleSources() + { + // create a storm + Storm storm = new(); + + // place 'em + ship.Sector = sys.GetSector(0, 0); + storm.Sector = ship.Sector; + + // assign some abilities + design.Hull.AddAbility("Combat To Hit Offense Plus", 1); + storm.AddAbility("Combat Modifier - Sector", 2); + design.Hull.AddAbility("Combat Modifier - System", 4); + design.Hull.AddAbility("Combat Modifier - Empire", 8); + + // make the testing a bit faster + Galaxy.Current.EnableAbilityCache(); + + // make sure the ship picked them all up + // TODO - we need to define ability scopes since some abilities should apply only to a single empire and others to everyone (see issue #1015) + Assert.AreEqual(1 + 2 + 4 + 8, ship.Accuracy); + + // make sure the ship has all the abiliites inherited in + Assert.AreEqual(1, ship.GetAbilityValue("Combat To Hit Offense Plus").ToInt()); + Assert.AreEqual(2, ship.GetAbilityValue("Combat Modifier - Sector").ToInt()); + Assert.AreEqual(4, ship.GetAbilityValue("Combat Modifier - System").ToInt()); + Assert.AreEqual(8, ship.GetAbilityValue("Combat Modifier - Empire").ToInt()); + } + + [Test] + public void AbilitiesFromIdenticalComponents() + { + // create engine component template + ComponentTemplate engineTemplate = new() + { + Name = "Ion Engine" + }; + engineTemplate.Abilities.Add(new Ability( + engineTemplate, + AbilityRule.Find("Standard Ship Movement"), + null, + 1)); + + // add some engines + int numEngines = 6; + for (var i = 0; i < numEngines; i++) + { + design.AddComponent(engineTemplate); + } + + // test thrust + Assert.AreEqual(numEngines, design.StrategicSpeed); + } + } +} diff --git a/FrEee.Tests/Game/Objects/Combat/DamageTypesTest.cs b/FrEee.Tests/Objects/Combat/DamageTypesTest.cs similarity index 94% rename from FrEee.Tests/Game/Objects/Combat/DamageTypesTest.cs rename to FrEee.Tests/Objects/Combat/DamageTypesTest.cs index 145e4af6a..d26522cb2 100644 --- a/FrEee.Tests/Game/Objects/Combat/DamageTypesTest.cs +++ b/FrEee.Tests/Objects/Combat/DamageTypesTest.cs @@ -1,180 +1,180 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility.Extensions; -using NUnit.Framework; -using System; -using System.Linq; - -namespace FrEee.Tests.Game.Objects.Combat -{ - public class DamageTypesTest - { - private static Mod mod; - - private Ship attacker; - private IDesign attackerDesign; - private Ship defender; - private IDesign defenderDesign; - - [OneTimeSetUp] - public static void ClassInit() - { - // load stock mod - mod = Mod.Load(null); - - // create a galaxy for referencing things - new Galaxy(); - foreach (var r in mod.Objects.OfType()) - Galaxy.Current.AssignID(r); - } - - [SetUp] - public void Init() - { - // create dummy designs - attackerDesign = new Design(); - attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Bridge")); - attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Life Support")); - attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Crew Quarters")); - attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Quantum Reactor")); - defenderDesign = new Design(); - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Bridge")); - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Life Support")); - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Crew Quarters")); - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Quantum Reactor")); - } - - /// - /// Makes sure that normal damage doesn't pierce shields or armor, and can destroy a ship. - /// - [Test] - public void NormalDamageVersusShips() - { - attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Depleted Uranium Cannon I")); - attacker = attackerDesign.Instantiate(); - - // armor should get hit before hull - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Armor I")); - SetupDefender(); - TestDamage(attacker, defender, 1, expectedArmorDmg: 1); - - // phased shields should get hit before normal shields - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Shield Generator I")); - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Phased - Shield Generator I")); - SetupDefender(); - TestDamage(attacker, defender, 1, expectedNormalShieldDmg: 1); - - // make sure our ship can be destroyed - SetupDefender(); - TestDamage(attacker, defender, 99999, defender.HullHitpoints, defender.ArmorHitpoints, defender.PhasedShields, defender.NormalShields); - } - - /// - /// Makes sure that "only engines" damage damages engines and shields only. - /// - [Test] - public void OnlyEnginesDamageVersusShips() - { - attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Ionic Disperser I")); - attacker = attackerDesign.Instantiate(); - - // small amounts of damage should hit the shields - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Armor I")); - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Shield Generator I")); - SetupDefender(); - TestDamage(attacker, defender, 1, expectedNormalShieldDmg: 1); - - // large amounts of damage should hit the engines - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Ion Engine I")); - SetupDefender(); - TestDamage(attacker, defender, 99999, expectedNormalShieldDmg: defender.NormalShields, expectedHullDmg: 20); - Assert.AreEqual(0, defender.Components.Where(c => !c.IsDestroyed && c.HasAbility("Standard Ship Movement")).Count()); - } - - /// - /// Makes sure that "shields only" damage only damages shields. - /// - [Test] - public void ShieldsOnlyDamageVersusShips() - { - attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Shield Depleter I")); - attacker = attackerDesign.Instantiate(); - - // shields should be depleted, ship should not take armor or hull damage - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Armor I")); - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Shield Generator I")); - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Phased - Shield Generator I")); - SetupDefender(); - TestDamage(attacker, defender, 99999, expectedNormalShieldDmg: defender.NormalShields, expectedPhasedShieldDmg: defender.PhasedShields); - } - - /// - /// Makes sure that "skips normal shields" damage skips normal shields, but not armor or phased shields, and can destroy a ship. - /// - [Test] - public void SkipsNormalShieldsDamageVersusShips() - { - attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Phased - Polaron Beam I")); - attacker = attackerDesign.Instantiate(); - - // small amounts of damage should hit the armor - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Armor I")); - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Shield Generator I")); - SetupDefender(); - TestDamage(attacker, defender, 1, expectedArmorDmg: 1); - - // phased shields shold block damage - defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Phased - Shield Generator I")); - SetupDefender(); - TestDamage(attacker, defender, 1, expectedPhasedShieldDmg: 1); - - // should be able to destroy ship - // normal shields will go down when generators destroyed - TestDamage(attacker, defender, 99999, expectedHullDmg: defender.HullHitpoints, expectedArmorDmg: defender.ArmorHitpoints, expectedNormalShieldDmg: defender.NormalShields, expectedPhasedShieldDmg: defender.PhasedShields); - } - - private void AddComponents(IDesign d, params string[] compNames) - { - foreach (var cn in compNames) - d.AddComponent(Mod.Current.ComponentTemplates.FindByName(cn)); - } - - private void Heal(Ship ship) - { - ship.Repair(); - ship.ReplenishShields(); - } - - private void SetupDefender() - { - defender = defenderDesign.Instantiate(); - Heal(defender); - } - - private void TestDamage(Ship attacker, IDamageable defender, int dmg, int expectedHullDmg = 0, int expectedArmorDmg = 0, int expectedPhasedShieldDmg = 0, int expectedNormalShieldDmg = 0) - { - var hhp = defender.HullHitpoints; - var ahp = defender.ArmorHitpoints; - var pshp = defender.PhasedShields; - var nshp = defender.NormalShields; - - foreach (var w in attacker.Weapons) - { - var hit = new Hit(new Shot(attacker, w, defender, 0), defender, dmg); - defender.TakeDamage(hit); - } - Assert.AreEqual(Math.Max(0, hhp - expectedHullDmg), defender.HullHitpoints, $"Expected hull HP of {Math.Max(0, hhp - expectedHullDmg)}, got {defender.HullHitpoints}."); - Assert.AreEqual(Math.Max(0, ahp - expectedArmorDmg), defender.ArmorHitpoints, $"Expected armor HP of {Math.Max(0, ahp - expectedArmorDmg)}, got {defender.ArmorHitpoints}."); - Assert.AreEqual(Math.Max(0, nshp - expectedNormalShieldDmg), defender.NormalShields, $"Expected normal shields of {Math.Max(0, nshp - expectedNormalShieldDmg)}, got {defender.NormalShields}."); - Assert.AreEqual(Math.Max(0, pshp - expectedPhasedShieldDmg), defender.PhasedShields, $"Expected phased Shields of {Math.Max(0, nshp - expectedPhasedShieldDmg)}, got {defender.PhasedShields}."); - - if (defender.HullHitpoints > 0) - Assert.IsFalse(defender.IsDestroyed); - else - Assert.IsTrue(defender.IsDestroyed); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Combat; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Extensions; +using NUnit.Framework; +using System; +using System.Linq; + +namespace FrEee.Tests.Objects.Combat +{ + public class DamageTypesTest + { + private static Mod mod; + + private Ship attacker; + private IDesign attackerDesign; + private Ship defender; + private IDesign defenderDesign; + + [OneTimeSetUp] + public static void ClassInit() + { + // load stock mod + mod = Mod.Load(null); + + // create a galaxy for referencing things + new Galaxy(); + foreach (var r in mod.Objects.OfType()) + Galaxy.Current.AssignID(r); + } + + [SetUp] + public void Init() + { + // create dummy designs + attackerDesign = new Design(); + attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Bridge")); + attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Life Support")); + attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Crew Quarters")); + attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Quantum Reactor")); + defenderDesign = new Design(); + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Bridge")); + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Life Support")); + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Crew Quarters")); + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Quantum Reactor")); + } + + /// + /// Makes sure that normal damage doesn't pierce shields or armor, and can destroy a ship. + /// + [Test] + public void NormalDamageVersusShips() + { + attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Depleted Uranium Cannon I")); + attacker = attackerDesign.Instantiate(); + + // armor should get hit before hull + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Armor I")); + SetupDefender(); + TestDamage(attacker, defender, 1, expectedArmorDmg: 1); + + // phased shields should get hit before normal shields + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Shield Generator I")); + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Phased - Shield Generator I")); + SetupDefender(); + TestDamage(attacker, defender, 1, expectedNormalShieldDmg: 1); + + // make sure our ship can be destroyed + SetupDefender(); + TestDamage(attacker, defender, 99999, defender.HullHitpoints, defender.ArmorHitpoints, defender.PhasedShields, defender.NormalShields); + } + + /// + /// Makes sure that "only engines" damage damages engines and shields only. + /// + [Test] + public void OnlyEnginesDamageVersusShips() + { + attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Ionic Disperser I")); + attacker = attackerDesign.Instantiate(); + + // small amounts of damage should hit the shields + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Armor I")); + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Shield Generator I")); + SetupDefender(); + TestDamage(attacker, defender, 1, expectedNormalShieldDmg: 1); + + // large amounts of damage should hit the engines + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Ion Engine I")); + SetupDefender(); + TestDamage(attacker, defender, 99999, expectedNormalShieldDmg: defender.NormalShields, expectedHullDmg: 20); + Assert.AreEqual(0, defender.Components.Where(c => !c.IsDestroyed && c.HasAbility("Standard Ship Movement")).Count()); + } + + /// + /// Makes sure that "shields only" damage only damages shields. + /// + [Test] + public void ShieldsOnlyDamageVersusShips() + { + attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Shield Depleter I")); + attacker = attackerDesign.Instantiate(); + + // shields should be depleted, ship should not take armor or hull damage + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Armor I")); + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Shield Generator I")); + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Phased - Shield Generator I")); + SetupDefender(); + TestDamage(attacker, defender, 99999, expectedNormalShieldDmg: defender.NormalShields, expectedPhasedShieldDmg: defender.PhasedShields); + } + + /// + /// Makes sure that "skips normal shields" damage skips normal shields, but not armor or phased shields, and can destroy a ship. + /// + [Test] + public void SkipsNormalShieldsDamageVersusShips() + { + attackerDesign.AddComponent(mod.ComponentTemplates.FindByName("Phased - Polaron Beam I")); + attacker = attackerDesign.Instantiate(); + + // small amounts of damage should hit the armor + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Armor I")); + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Shield Generator I")); + SetupDefender(); + TestDamage(attacker, defender, 1, expectedArmorDmg: 1); + + // phased shields shold block damage + defenderDesign.AddComponent(mod.ComponentTemplates.FindByName("Phased - Shield Generator I")); + SetupDefender(); + TestDamage(attacker, defender, 1, expectedPhasedShieldDmg: 1); + + // should be able to destroy ship + // normal shields will go down when generators destroyed + TestDamage(attacker, defender, 99999, expectedHullDmg: defender.HullHitpoints, expectedArmorDmg: defender.ArmorHitpoints, expectedNormalShieldDmg: defender.NormalShields, expectedPhasedShieldDmg: defender.PhasedShields); + } + + private void AddComponents(IDesign d, params string[] compNames) + { + foreach (var cn in compNames) + d.AddComponent(Mod.Current.ComponentTemplates.FindByName(cn)); + } + + private void Heal(Ship ship) + { + ship.Repair(); + ship.ReplenishShields(); + } + + private void SetupDefender() + { + defender = defenderDesign.Instantiate(); + Heal(defender); + } + + private void TestDamage(Ship attacker, IDamageable defender, int dmg, int expectedHullDmg = 0, int expectedArmorDmg = 0, int expectedPhasedShieldDmg = 0, int expectedNormalShieldDmg = 0) + { + var hhp = defender.HullHitpoints; + var ahp = defender.ArmorHitpoints; + var pshp = defender.PhasedShields; + var nshp = defender.NormalShields; + + foreach (var w in attacker.Weapons) + { + var hit = new Hit(new Shot(attacker, w, defender, 0), defender, dmg); + defender.TakeDamage(hit); + } + Assert.AreEqual(Math.Max(0, hhp - expectedHullDmg), defender.HullHitpoints, $"Expected hull HP of {Math.Max(0, hhp - expectedHullDmg)}, got {defender.HullHitpoints}."); + Assert.AreEqual(Math.Max(0, ahp - expectedArmorDmg), defender.ArmorHitpoints, $"Expected armor HP of {Math.Max(0, ahp - expectedArmorDmg)}, got {defender.ArmorHitpoints}."); + Assert.AreEqual(Math.Max(0, nshp - expectedNormalShieldDmg), defender.NormalShields, $"Expected normal shields of {Math.Max(0, nshp - expectedNormalShieldDmg)}, got {defender.NormalShields}."); + Assert.AreEqual(Math.Max(0, pshp - expectedPhasedShieldDmg), defender.PhasedShields, $"Expected phased Shields of {Math.Max(0, nshp - expectedPhasedShieldDmg)}, got {defender.PhasedShields}."); + + if (defender.HullHitpoints > 0) + Assert.IsFalse(defender.IsDestroyed); + else + Assert.IsTrue(defender.IsDestroyed); + } + } } \ No newline at end of file diff --git a/FrEee.Tests/Game/Objects/Orders/ConstructionTest.cs b/FrEee.Tests/Objects/Orders/ConstructionTest.cs similarity index 85% rename from FrEee.Tests/Game/Objects/Orders/ConstructionTest.cs rename to FrEee.Tests/Objects/Orders/ConstructionTest.cs index b55ef745a..01b48bc03 100644 --- a/FrEee.Tests/Game/Objects/Orders/ConstructionTest.cs +++ b/FrEee.Tests/Objects/Orders/ConstructionTest.cs @@ -1,66 +1,66 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; -using FrEee.Utility.Extensions; -using NUnit.Framework; - -namespace FrEee.Tests.Game.Objects.Orders -{ - /// - /// Tests construction queue capabilities. - /// - public class ConstructionTest - { - private static Colony colony; - private static Empire empire; - private static Planet planet; - private static Race race; - private static FacilityTemplate sy; - - [OneTimeSetUp] - public static void ClassInit() - { - // initialize galaxy - new Galaxy(); - Mod.Load(null); - - // initialize empires - empire = new Empire(); - empire.Name = "Engi"; - race = new Race(); - race.Name = "Engi"; - race.Aptitudes["Construction"] = 100; - - // initialize components - sy = Mod.Current.FacilityTemplates.FindByName("Space Yard Facility I"); - } - - [SetUp] - public void Init() - { - // initialize colony - planet = new Planet(); - colony = new Colony(); - colony.Facilities.Add(new Facility(sy)); - colony.Population.Add(race, (long)1e9); // 1 billion population; - colony.ConstructionQueue = new ConstructionQueue(planet); - planet.Colony = colony; - } - - /// - /// If there's no population on a colony, it shouldn't be able to build anything. - /// - [Test] - public void NoPopNoBuild() - { - colony.Population.Clear(); - Assert.IsTrue(planet.ConstructionQueue.Rate.IsEmpty); - - colony.Population[race] = 0; - Assert.IsTrue(planet.ConstructionQueue.Rate.IsEmpty); - } - - // TODO - test construction of facilities/units/ships - } +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Modding; +using FrEee.Extensions; +using NUnit.Framework; + +namespace FrEee.Tests.Objects.Orders +{ + /// + /// Tests construction queue capabilities. + /// + public class ConstructionTest + { + private static Colony colony; + private static Empire empire; + private static Planet planet; + private static Race race; + private static FacilityTemplate sy; + + [OneTimeSetUp] + public static void ClassInit() + { + // initialize galaxy + new Galaxy(); + Mod.Load(null); + + // initialize empires + empire = new Empire(); + empire.Name = "Engi"; + race = new Race(); + race.Name = "Engi"; + race.Aptitudes["Construction"] = 100; + + // initialize components + sy = Mod.Current.FacilityTemplates.FindByName("Space Yard Facility I"); + } + + [SetUp] + public void Init() + { + // initialize colony + planet = new Planet(); + colony = new Colony(); + colony.Facilities.Add(new Facility(sy)); + colony.Population.Add(race, (long)1e9); // 1 billion population; + colony.ConstructionQueue = new ConstructionQueue(planet); + planet.Colony = colony; + } + + /// + /// If there's no population on a colony, it shouldn't be able to build anything. + /// + [Test] + public void NoPopNoBuild() + { + colony.Population.Clear(); + Assert.IsTrue(planet.ConstructionQueue.Rate.IsEmpty); + + colony.Population[race] = 0; + Assert.IsTrue(planet.ConstructionQueue.Rate.IsEmpty); + } + + // TODO - test construction of facilities/units/ships + } } \ No newline at end of file diff --git a/FrEee.Tests/Game/Objects/Space/MemoryTest.cs b/FrEee.Tests/Objects/Space/MemoryTest.cs similarity index 92% rename from FrEee.Tests/Game/Objects/Space/MemoryTest.cs rename to FrEee.Tests/Objects/Space/MemoryTest.cs index c80fb6a61..afe998616 100644 --- a/FrEee.Tests/Game/Objects/Space/MemoryTest.cs +++ b/FrEee.Tests/Objects/Space/MemoryTest.cs @@ -1,147 +1,147 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility.Extensions; -using NUnit.Framework; -using System.Drawing; - -namespace FrEee.Tests.Game.Objects.Space -{ - /// - /// Tests memory sight / fog of war. - /// - public class MemoryTest - { - /// - /// The ship that is looking for an enemy ship. - /// - private Ship destroyer; - - /// - /// Where the ships are. - /// - private StarSystem here; - - /// - /// They're controlling the submarine. - /// - private Empire hiders; - - /// - /// They're controlling the destroyer. - /// - private Empire seekers; - - /// - /// The ship that is hiding. - /// - private Ship submarine; - - /// - /// Where the submarine is going. - /// - private StarSystem there; - - [Test] - public void CreatingMemory() - { - // make sure a memory is created when the vehicle is seen - submarine.UpdateEmpireMemories(); - var mem = (Ship)seekers.Memory[submarine.ID]; - Assert.AreEqual(Visibility.Visible, submarine.CheckVisibility(seekers), "Ship is not visible to empire in same star system."); - Assert.IsNotNull(mem, "Memory was not created for visible ship."); - Assert.IsNotNull(mem.StarSystem, "Memory was not placed in a star system for visible ship."); - Assert.IsTrue(mem.IsMemory, "Memory is not flagged as a memory."); - - // make sure the original vehicle is invisible when it moves - HideSubmarine(); - Assert.AreEqual(Visibility.Fogged, submarine.CheckVisibility(seekers), "Ship is not fogged after it's left the star system."); - - // make sure the memory was not updated when the sub was moved - Assert.AreEqual(here, mem.StarSystem, "Memory of ship was updated even though it is no longer visible."); - - // make sure the memory is visible to the correct empire - Assert.AreEqual(Visibility.Fogged, mem.CheckVisibility(seekers), "Memory is not fogged."); - Assert.AreEqual(Visibility.Unknown, mem.CheckVisibility(hiders), "Other empire's memory is not hidden from empire owning vehicle."); - } - - [Test] - public void NotDisappearingMemory() - { - // create memory of vehicle - submarine.UpdateEmpireMemories(); - - // move it away - HideSubmarine(); - - // redact things for the empire - Galaxy.Current.CurrentEmpire = seekers; - Galaxy.Current.Redact(); - - // make sure it's still visible as a memory - Assert.AreEqual(Visibility.Fogged, submarine.CheckVisibility(seekers), "Ship is not fogged after it's left the star system."); - Assert.AreEqual(here.GetSector(0, 0), submarine.Sector, $"Ship should be appearing in its last known location {here.GetSector(0, 0)} but it's actually appearing at {submarine.Sector}."); - } - - [SetUp] - public void Setup() - { - // initialize galaxy - new Galaxy(); - Mod.Current = new Mod(); - - // initialize star systems - here = new StarSystem(0) { Name = "Here" }; - there = new StarSystem(0) { Name = "There" }; - Galaxy.Current.StarSystemLocations.Add(new ObjectLocation(here, new Point())); - Galaxy.Current.StarSystemLocations.Add(new ObjectLocation(there, new Point(1, 1))); - - // initialize empires - seekers = new Empire(); - seekers.Name = "Seekers"; - hiders = new Empire(); - hiders.Name = "Hiders"; - Galaxy.Current.Empires.Add(seekers); - Galaxy.Current.Empires.Add(hiders); - - //. initialize exploration - here.ExploredByEmpires.Add(seekers); - - // initialize ships - Assert.IsNotNull(Mod.Current); - var dsDesign = new Design(); - dsDesign.BaseName = "Destroyer"; - dsDesign.CreateHull(); - dsDesign.Owner = seekers; - destroyer = dsDesign.Instantiate(); - destroyer.Owner = seekers; - var subDesign = new Design(); - subDesign.BaseName = "Submarine"; - subDesign.CreateHull(); - subDesign.Owner = hiders; - submarine = subDesign.Instantiate(); - submarine.Owner = hiders; - - // place ships - destroyer.Sector = here.GetSector(0, 0); - submarine.Sector = here.GetSector(0, 0); - - // register objects - Galaxy.Current.CleanGameState(); - } - - private void HideSubmarine() - { - submarine.Sector = there.GetSector(0, 0); - } - - private void ReturnSubmarine() - { - submarine.Sector = here.GetSector(0, 0); - } - - // TODO - create test for fogged ship reappearing - } +using FrEee.Enumerations; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Extensions; +using NUnit.Framework; +using System.Drawing; + +namespace FrEee.Tests.Objects.Space +{ + /// + /// Tests memory sight / fog of war. + /// + public class MemoryTest + { + /// + /// The ship that is looking for an enemy ship. + /// + private Ship destroyer; + + /// + /// Where the ships are. + /// + private StarSystem here; + + /// + /// They're controlling the submarine. + /// + private Empire hiders; + + /// + /// They're controlling the destroyer. + /// + private Empire seekers; + + /// + /// The ship that is hiding. + /// + private Ship submarine; + + /// + /// Where the submarine is going. + /// + private StarSystem there; + + [Test] + public void CreatingMemory() + { + // make sure a memory is created when the vehicle is seen + submarine.UpdateEmpireMemories(); + var mem = (Ship)seekers.Memory[submarine.ID]; + Assert.AreEqual(Visibility.Visible, submarine.CheckVisibility(seekers), "Ship is not visible to empire in same star system."); + Assert.IsNotNull(mem, "Memory was not created for visible ship."); + Assert.IsNotNull(mem.StarSystem, "Memory was not placed in a star system for visible ship."); + Assert.IsTrue(mem.IsMemory, "Memory is not flagged as a memory."); + + // make sure the original vehicle is invisible when it moves + HideSubmarine(); + Assert.AreEqual(Visibility.Fogged, submarine.CheckVisibility(seekers), "Ship is not fogged after it's left the star system."); + + // make sure the memory was not updated when the sub was moved + Assert.AreEqual(here, mem.StarSystem, "Memory of ship was updated even though it is no longer visible."); + + // make sure the memory is visible to the correct empire + Assert.AreEqual(Visibility.Fogged, mem.CheckVisibility(seekers), "Memory is not fogged."); + Assert.AreEqual(Visibility.Unknown, mem.CheckVisibility(hiders), "Other empire's memory is not hidden from empire owning vehicle."); + } + + [Test] + public void NotDisappearingMemory() + { + // create memory of vehicle + submarine.UpdateEmpireMemories(); + + // move it away + HideSubmarine(); + + // redact things for the empire + Galaxy.Current.CurrentEmpire = seekers; + Galaxy.Current.Redact(); + + // make sure it's still visible as a memory + Assert.AreEqual(Visibility.Fogged, submarine.CheckVisibility(seekers), "Ship is not fogged after it's left the star system."); + Assert.AreEqual(here.GetSector(0, 0), submarine.Sector, $"Ship should be appearing in its last known location {here.GetSector(0, 0)} but it's actually appearing at {submarine.Sector}."); + } + + [SetUp] + public void Setup() + { + // initialize galaxy + new Galaxy(); + Mod.Current = new Mod(); + + // initialize star systems + here = new StarSystem(0) { Name = "Here" }; + there = new StarSystem(0) { Name = "There" }; + Galaxy.Current.StarSystemLocations.Add(new ObjectLocation(here, new Point())); + Galaxy.Current.StarSystemLocations.Add(new ObjectLocation(there, new Point(1, 1))); + + // initialize empires + seekers = new Empire(); + seekers.Name = "Seekers"; + hiders = new Empire(); + hiders.Name = "Hiders"; + Galaxy.Current.Empires.Add(seekers); + Galaxy.Current.Empires.Add(hiders); + + //. initialize exploration + here.ExploredByEmpires.Add(seekers); + + // initialize ships + Assert.IsNotNull(Mod.Current); + var dsDesign = new Design(); + dsDesign.BaseName = "Destroyer"; + dsDesign.CreateHull(); + dsDesign.Owner = seekers; + destroyer = dsDesign.Instantiate(); + destroyer.Owner = seekers; + var subDesign = new Design(); + subDesign.BaseName = "Submarine"; + subDesign.CreateHull(); + subDesign.Owner = hiders; + submarine = subDesign.Instantiate(); + submarine.Owner = hiders; + + // place ships + destroyer.Sector = here.GetSector(0, 0); + submarine.Sector = here.GetSector(0, 0); + + // register objects + Galaxy.Current.CleanGameState(); + } + + private void HideSubmarine() + { + submarine.Sector = there.GetSector(0, 0); + } + + private void ReturnSubmarine() + { + submarine.Sector = here.GetSector(0, 0); + } + + // TODO - create test for fogged ship reappearing + } } \ No newline at end of file diff --git a/FrEee.Tests/Game/Objects/Technology/TechnologyTest.cs b/FrEee.Tests/Objects/Technology/TechnologyTest.cs similarity index 90% rename from FrEee.Tests/Game/Objects/Technology/TechnologyTest.cs rename to FrEee.Tests/Objects/Technology/TechnologyTest.cs index 6bc9779ee..9eb2ef609 100644 --- a/FrEee.Tests/Game/Objects/Technology/TechnologyTest.cs +++ b/FrEee.Tests/Objects/Technology/TechnologyTest.cs @@ -1,127 +1,127 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Game.Processes; -using FrEee.Modding; -using FrEee.Utility.Extensions; -using NUnit.Framework; - -namespace FrEee.Tests.Game.Objects.Technology -{ - public class TechnologyTest - { - private Empire emp; - private TurnProcessor processor = new(); - - /// - /// Loads the stock mod. Done once before running ALL the tests (not each individually; that would be pointless). - // TODO - hardcode some techs so we aren't reliant on stock files - /// - [OneTimeSetUp] - public static void ClassInit() - { - Mod.Load(null); - } - - /// - /// Tests the ability of an empire to research technologies using percentage allocation. - /// - [Test] - public void PercentageResearch() - { - var mod = Mod.Current; - var gal = Galaxy.Current; - - var tech = mod.Technologies.FindByName("Ice Planet Colonization"); - tech.LevelCost = 500000; // in case the mod changes - tech.MaximumLevel = 5; // so we can actually test getting past level 1 - - // TODO - allocate to multiple techs - - emp.ResearchedTechnologies[tech] = 0; - emp.BonusResearch = tech.GetBaseLevelCost(1) + tech.GetBaseLevelCost(2); - - var cmd = new ResearchCommand(); - cmd.Issuer = emp; - cmd.Executor = emp; - cmd.Spending[tech] = 100; - - // check command client safety - cmd.CheckForClientSafety(); - - // perform research - emp.ResearchCommand = cmd; - processor.ProcessTurn(gal, false); - - // verify research was done - // 500K for first level, 1M for second - Assert.AreEqual(2, emp.ResearchedTechnologies[tech]); - } - - [Test] - public void QueuedResearch() - { - // for convenience - var mod = Mod.Current; - var gal = Galaxy.Current; - - // set up techs - var t1 = mod.Technologies.FindByName("Planetary Weapons"); - t1.LevelCost = 5000; // in case the mod changes - var t2 = mod.Technologies.FindByName("Smaller Weapons"); - t2.LevelCost = 5000; // in case the mod changes - emp.AccumulatedResearch[t1] = 1000; // make sure to test spillover properly - - // reset tech levels - emp.ResearchedTechnologies[t1] = 0; - emp.ResearchedTechnologies[t2] = 0; - - // give them some RP - emp.BonusResearch = t1.GetBaseLevelCost(1) + 1; - - // create research command - var cmd = new ResearchCommand - { - Issuer = emp, - Executor = emp, - }; - cmd.Queue.Add(t1); - cmd.Queue.Add(t2); - - // perform research - emp.ResearchCommand = cmd; - processor.ProcessTurn(gal, false); - - // should have level 1 in t1 and level 0 in t2 - Assert.AreEqual(1, emp.ResearchedTechnologies[t1]); - Assert.AreEqual(0, emp.ResearchedTechnologies[t2]); - - // should have no spillover in t1 and 1001 points in t2 - Assert.AreEqual(0, emp.GetResearchProgress(t1, 2).Value); - Assert.AreEqual(1001, emp.GetResearchProgress(t2, 1).Value); - - // another turn! - emp.BonusResearch = 100000; - emp.ResearchCommand = cmd; - processor.ProcessTurn(gal, false); - - // should have level 2+ in t1 and level 1+ in t2 - // (levels could be higher if extra RP gets randomly assigned to those techs) - Assert.IsTrue(2 <= emp.ResearchedTechnologies[t1], $"{t1} level should be at least 2"); - Assert.IsTrue(1 <= emp.ResearchedTechnologies[t2], $"{t2} level should be at least 1"); - } - - /// - /// Sets up a game. Done once before EACH test. - /// - [SetUp] - public void TestInit() - { - new Galaxy(); - Galaxy.Current.TechnologyCost = TechnologyCost.Low; - emp = new Empire(); - Galaxy.Current.Empires.Add(emp); - } - } -} +using FrEee.Enumerations; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Processes; +using FrEee.Modding; +using FrEee.Extensions; +using NUnit.Framework; + +namespace FrEee.Tests.Objects.Technology +{ + public class TechnologyTest + { + private Empire emp; + private TurnProcessor processor = new(); + + /// + /// Loads the stock mod. Done once before running ALL the tests (not each individually; that would be pointless). + // TODO - hardcode some techs so we aren't reliant on stock files + /// + [OneTimeSetUp] + public static void ClassInit() + { + Mod.Load(null); + } + + /// + /// Tests the ability of an empire to research technologies using percentage allocation. + /// + [Test] + public void PercentageResearch() + { + var mod = Mod.Current; + var gal = Galaxy.Current; + + var tech = mod.Technologies.FindByName("Ice Planet Colonization"); + tech.LevelCost = 500000; // in case the mod changes + tech.MaximumLevel = 5; // so we can actually test getting past level 1 + + // TODO - allocate to multiple techs + + emp.ResearchedTechnologies[tech] = 0; + emp.BonusResearch = tech.GetBaseLevelCost(1) + tech.GetBaseLevelCost(2); + + var cmd = new ResearchCommand(); + cmd.Issuer = emp; + cmd.Executor = emp; + cmd.Spending[tech] = 100; + + // check command client safety + cmd.CheckForClientSafety(); + + // perform research + emp.ResearchCommand = cmd; + processor.ProcessTurn(gal, false); + + // verify research was done + // 500K for first level, 1M for second + Assert.AreEqual(2, emp.ResearchedTechnologies[tech]); + } + + [Test] + public void QueuedResearch() + { + // for convenience + var mod = Mod.Current; + var gal = Galaxy.Current; + + // set up techs + var t1 = mod.Technologies.FindByName("Planetary Weapons"); + t1.LevelCost = 5000; // in case the mod changes + var t2 = mod.Technologies.FindByName("Smaller Weapons"); + t2.LevelCost = 5000; // in case the mod changes + emp.AccumulatedResearch[t1] = 1000; // make sure to test spillover properly + + // reset tech levels + emp.ResearchedTechnologies[t1] = 0; + emp.ResearchedTechnologies[t2] = 0; + + // give them some RP + emp.BonusResearch = t1.GetBaseLevelCost(1) + 1; + + // create research command + var cmd = new ResearchCommand + { + Issuer = emp, + Executor = emp, + }; + cmd.Queue.Add(t1); + cmd.Queue.Add(t2); + + // perform research + emp.ResearchCommand = cmd; + processor.ProcessTurn(gal, false); + + // should have level 1 in t1 and level 0 in t2 + Assert.AreEqual(1, emp.ResearchedTechnologies[t1]); + Assert.AreEqual(0, emp.ResearchedTechnologies[t2]); + + // should have no spillover in t1 and 1001 points in t2 + Assert.AreEqual(0, emp.GetResearchProgress(t1, 2).Value); + Assert.AreEqual(1001, emp.GetResearchProgress(t2, 1).Value); + + // another turn! + emp.BonusResearch = 100000; + emp.ResearchCommand = cmd; + processor.ProcessTurn(gal, false); + + // should have level 2+ in t1 and level 1+ in t2 + // (levels could be higher if extra RP gets randomly assigned to those techs) + Assert.IsTrue(2 <= emp.ResearchedTechnologies[t1], $"{t1} level should be at least 2"); + Assert.IsTrue(1 <= emp.ResearchedTechnologies[t2], $"{t2} level should be at least 1"); + } + + /// + /// Sets up a game. Done once before EACH test. + /// + [SetUp] + public void TestInit() + { + new Galaxy(); + Galaxy.Current.TechnologyCost = TechnologyCost.Low; + emp = new Empire(); + Galaxy.Current.Empires.Add(emp); + } + } +} diff --git a/FrEee.Tests/Game/Objects/Technology/WeaponInfoTest.cs b/FrEee.Tests/Objects/Technology/WeaponInfoTest.cs similarity index 89% rename from FrEee.Tests/Game/Objects/Technology/WeaponInfoTest.cs rename to FrEee.Tests/Objects/Technology/WeaponInfoTest.cs index b3400458b..ffef11b8e 100644 --- a/FrEee.Tests/Game/Objects/Technology/WeaponInfoTest.cs +++ b/FrEee.Tests/Objects/Technology/WeaponInfoTest.cs @@ -1,54 +1,54 @@ -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using NUnit.Framework; -using System.Linq; - -namespace FrEee.Tests.Game.Objects.Technology -{ - /// - /// Tests weapon info. - /// - public class WeaponInfoTest - { - private static Galaxy gal = new Galaxy(); - - private static Mod mod; - - [OneTimeSetUp] - public static void ClassInit() - { - mod = Mod.Load("WeaponInfoTest"); - } - - /// - /// Tests formula damage values. - /// - [Test] - public void FormulaDamage() - { - var ct = mod.ComponentTemplates.Single(x => x.Name == "Formula Weapon"); - var comp = ct.Instantiate(); - Assert.AreEqual(3, ct.WeaponInfo.MinRange.Value); - Assert.AreEqual(5, ct.WeaponInfo.MaxRange.Value); - Assert.AreEqual(0, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 2))); - Assert.AreEqual(20, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 4))); - Assert.AreEqual(0, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 6))); - } - - /// - /// Tests non-formula damage values. - /// - [Test] - public void NonFormulaDamage() - { - var ct = mod.ComponentTemplates.Single(x => x.Name == "Non-Formula Weapon"); - var comp = ct.Instantiate(); - Assert.AreEqual(3, ct.WeaponInfo.MinRange.Value); - Assert.AreEqual(5, ct.WeaponInfo.MaxRange.Value); - Assert.AreEqual(0, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 2))); - Assert.AreEqual(20, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 4))); - Assert.AreEqual(0, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 6))); - } - } +using FrEee.Objects.Combat; +using FrEee.Objects.Space; +using FrEee.Modding; +using NUnit.Framework; +using System.Linq; + +namespace FrEee.Tests.Objects.Technology +{ + /// + /// Tests weapon info. + /// + public class WeaponInfoTest + { + private static Galaxy gal = new Galaxy(); + + private static Mod mod; + + [OneTimeSetUp] + public static void ClassInit() + { + mod = Mod.Load("WeaponInfoTest"); + } + + /// + /// Tests formula damage values. + /// + [Test] + public void FormulaDamage() + { + var ct = mod.ComponentTemplates.Single(x => x.Name == "Formula Weapon"); + var comp = ct.Instantiate(); + Assert.AreEqual(3, ct.WeaponInfo.MinRange.Value); + Assert.AreEqual(5, ct.WeaponInfo.MaxRange.Value); + Assert.AreEqual(0, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 2))); + Assert.AreEqual(20, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 4))); + Assert.AreEqual(0, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 6))); + } + + /// + /// Tests non-formula damage values. + /// + [Test] + public void NonFormulaDamage() + { + var ct = mod.ComponentTemplates.Single(x => x.Name == "Non-Formula Weapon"); + var comp = ct.Instantiate(); + Assert.AreEqual(3, ct.WeaponInfo.MinRange.Value); + Assert.AreEqual(5, ct.WeaponInfo.MaxRange.Value); + Assert.AreEqual(0, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 2))); + Assert.AreEqual(20, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 4))); + Assert.AreEqual(0, ct.WeaponInfo.GetDamage(new Shot(null, comp, null, 6))); + } + } } \ No newline at end of file diff --git a/FrEee.Tests/Game/Objects/Vehicles/CloakingTest.cs b/FrEee.Tests/Objects/Vehicles/CloakingTest.cs similarity index 93% rename from FrEee.Tests/Game/Objects/Vehicles/CloakingTest.cs rename to FrEee.Tests/Objects/Vehicles/CloakingTest.cs index 0da11eaee..8aed3fc7b 100644 --- a/FrEee.Tests/Game/Objects/Vehicles/CloakingTest.cs +++ b/FrEee.Tests/Objects/Vehicles/CloakingTest.cs @@ -1,223 +1,223 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility.Extensions; -using NUnit.Framework; -using System.Drawing; - -namespace FrEee.Tests.Game.Objects.Vehicles -{ - /// - /// Tests cloaking of vehicles. - /// - public class CloakingTest - { - /// - /// The ship that is looking for an enemy ship. - /// - private static Ship destroyer; - - /// - /// They're controlling the submarine. - /// - private static Empire hiders; - - /// - /// They're controlling the destroyer. - /// - private static Empire seekers; - - /// - /// The ship that is hiding. - /// - private static Ship submarine; - - /// - /// Where the ships are. - /// - private static StarSystem sys; - - [OneTimeSetUp] - public static void ClassInit() - { - // initialize galaxy - new Galaxy(); - Mod.Load(null); - - // initialize empires - seekers = new Empire(); - seekers.Name = "Seekers"; - hiders = new Empire(); - hiders.Name = "Hiders"; - - // initialize ships - Assert.IsNotNull(Mod.Current); - var dsDesign = new Design(); - dsDesign.BaseName = "TestDestroyer"; - dsDesign.CreateHull(); - dsDesign.Owner = seekers; - destroyer = dsDesign.Instantiate(); - destroyer.Owner = seekers; - var subDesign = new Design(); - subDesign.BaseName = "TestSubmarine"; - subDesign.CreateHull(); - subDesign.Owner = hiders; - submarine = subDesign.Instantiate(); - submarine.Owner = hiders; - } - - /// - /// If we have no cloaks, and they have a sensor, they should still be able to see us. - /// - [Test] - public void AnySensorNoCloakCanSee() - { - AddSensorAbility(destroyer.Hull, "Foobar", 1); - Assert.IsFalse(submarine.IsHiddenFrom(seekers), "Submarine should be visible."); - } - - /// - /// If we have high level sight obscuration from our star system, we should be hidden. - /// - [Test] - public void HighLevelSectorSightObscuration() - { - AddSensorAbility(destroyer.Hull, "Foobar", 1); - AddObscurationAbility(submarine.StarSystem, 2); - Assert.IsTrue(submarine.IsHiddenFrom(seekers), "Submarine should be hidden."); - } - - /// - /// If we have a cloak, and they have a higher level sensor of the same type, they should be able to see us. - /// - [Test] - public void HighLevelSensorCanSee() - { - AddSensorAbility(destroyer.Hull, "Foobar", 2); - AddCloakAbility(submarine.Hull, "Foobar", 1); - Assert.IsFalse(submarine.IsHiddenFrom(seekers), "Submarine should be visible."); - } - - [SetUp] - public void Init() - { - // create star system - sys = new StarSystem(0); - Galaxy.Current.StarSystemLocations.Add(new ObjectLocation(sys, new Point())); - - // place ships - sys.Place(destroyer, new Point()); - sys.Place(submarine, new Point()); - } - - /// - /// If we have a cloak, and they have a lower level sensor of the same type, we should be hidden. - /// - [Test] - public void LowLevelSensorCantSee() - { - AddSensorAbility(destroyer.Hull, "Foobar", 1); - AddCloakAbility(submarine.Hull, "Foobar", 2); - Assert.IsTrue(submarine.IsHiddenFrom(seekers), "Submarine should be hidden."); - } - - /// - /// If we have a cloak, and they have a different type of sensor that we don't have a cloak in, they should be able to see us. - /// - [Test] - public void MismatchedSensorTypeCanSee() - { - AddSensorAbility(destroyer.Hull, "Narf", 1); - AddCloakAbility(submarine.Hull, "Foobar", 999); - Assert.IsFalse(submarine.IsHiddenFrom(seekers), "Submarine should be visible."); - } - - /// - /// If everyone is in a nebula with a system cloaking ability, the enemy ship should be hidden. - /// - [Test] - public void NebulaCantSee() - { - AddSensorAbility(destroyer.Hull, "Foobar", 1); - sys.Abilities.Add(new Ability(sys, Mod.Current.AbilityRules.FindByName("System - Sight Obscuration"), null, 999)); - Assert.IsTrue(submarine.IsHiddenFrom(seekers), "Submarine should be hidden."); - } - - /// - /// If we have a cloak, and they have no sensors, they should not be able to see us. - /// - [Test] - public void NoSensorAnyCloakCantSee() - { - AddCloakAbility(submarine.Hull, "Foobar", 1); - Assert.IsTrue(submarine.IsHiddenFrom(seekers), "Submarine should be hidden."); - } - - /// - /// If we have no cloaks, and they have no sensors, they should still be able to see us. - /// - [Test] - public void NoSensorNoCloakCanSee() - { - // by default the ships will have no abilities, so let's just test - Assert.IsFalse(submarine.IsHiddenFrom(seekers), "Submarine should be visible."); - } - - /// - /// If we have a cloak, and they have the same level sensor of the same type, they should be able to see us. - /// - [Test] - public void SameLevelSensorCanSee() - { - AddSensorAbility(destroyer.Hull, "Foobar", 1); - AddCloakAbility(submarine.Hull, "Foobar", 1); - Assert.IsFalse(submarine.IsHiddenFrom(seekers), "Submarine should be visible."); - } - - /// - /// If the enemy is in a storm with a sector cloaking ability, the enemy ship should be hidden. - /// - [Test] - public void StormCantSee() - { - AddSensorAbility(destroyer.Hull, "Foobar", 1); - var storm = new Storm(); - storm.Abilities.Add(new Ability(sys, Mod.Current.AbilityRules.FindByName("Sector - Sight Obscuration"), null, 999)); - sys.Place(storm, new Point()); - Assert.IsTrue(submarine.IsHiddenFrom(seekers), "Submarine should be hidden."); - } - - // TODO - same/low level sight obscuration from star system - - // TODO - sight obscuration from sector - - private void AddCloakAbility(IHull hull, string sightType, int level) - { - var a = new Ability(hull); - hull.Abilities.Add(a); - a.Rule = Mod.Current.AbilityRules.FindByName("Cloak Level"); - a.Values.Add(sightType); - a.Values.Add(level.ToString()); - } - - private void AddObscurationAbility(IAbilityContainer obj, int level) - { - var a = new Ability(obj); - obj.Abilities.Add(a); - a.Rule = Mod.Current.AbilityRules.FindByName("Sector - Sight Obscuration"); - a.Values.Add(level.ToString()); - } - - private void AddSensorAbility(IHull hull, string sightType, int level) - { - var a = new Ability(hull); - hull.Abilities.Add(a); - a.Rule = Mod.Current.AbilityRules.FindByName("Sensor Level"); - a.Values.Add(sightType); - a.Values.Add(level.ToString()); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Extensions; +using NUnit.Framework; +using System.Drawing; + +namespace FrEee.Tests.Objects.Vehicles +{ + /// + /// Tests cloaking of vehicles. + /// + public class CloakingTest + { + /// + /// The ship that is looking for an enemy ship. + /// + private static Ship destroyer; + + /// + /// They're controlling the submarine. + /// + private static Empire hiders; + + /// + /// They're controlling the destroyer. + /// + private static Empire seekers; + + /// + /// The ship that is hiding. + /// + private static Ship submarine; + + /// + /// Where the ships are. + /// + private static StarSystem sys; + + [OneTimeSetUp] + public static void ClassInit() + { + // initialize galaxy + new Galaxy(); + Mod.Load(null); + + // initialize empires + seekers = new Empire(); + seekers.Name = "Seekers"; + hiders = new Empire(); + hiders.Name = "Hiders"; + + // initialize ships + Assert.IsNotNull(Mod.Current); + var dsDesign = new Design(); + dsDesign.BaseName = "TestDestroyer"; + dsDesign.CreateHull(); + dsDesign.Owner = seekers; + destroyer = dsDesign.Instantiate(); + destroyer.Owner = seekers; + var subDesign = new Design(); + subDesign.BaseName = "TestSubmarine"; + subDesign.CreateHull(); + subDesign.Owner = hiders; + submarine = subDesign.Instantiate(); + submarine.Owner = hiders; + } + + /// + /// If we have no cloaks, and they have a sensor, they should still be able to see us. + /// + [Test] + public void AnySensorNoCloakCanSee() + { + AddSensorAbility(destroyer.Hull, "Foobar", 1); + Assert.IsFalse(submarine.IsHiddenFrom(seekers), "Submarine should be visible."); + } + + /// + /// If we have high level sight obscuration from our star system, we should be hidden. + /// + [Test] + public void HighLevelSectorSightObscuration() + { + AddSensorAbility(destroyer.Hull, "Foobar", 1); + AddObscurationAbility(submarine.StarSystem, 2); + Assert.IsTrue(submarine.IsHiddenFrom(seekers), "Submarine should be hidden."); + } + + /// + /// If we have a cloak, and they have a higher level sensor of the same type, they should be able to see us. + /// + [Test] + public void HighLevelSensorCanSee() + { + AddSensorAbility(destroyer.Hull, "Foobar", 2); + AddCloakAbility(submarine.Hull, "Foobar", 1); + Assert.IsFalse(submarine.IsHiddenFrom(seekers), "Submarine should be visible."); + } + + [SetUp] + public void Init() + { + // create star system + sys = new StarSystem(0); + Galaxy.Current.StarSystemLocations.Add(new ObjectLocation(sys, new Point())); + + // place ships + sys.Place(destroyer, new Point()); + sys.Place(submarine, new Point()); + } + + /// + /// If we have a cloak, and they have a lower level sensor of the same type, we should be hidden. + /// + [Test] + public void LowLevelSensorCantSee() + { + AddSensorAbility(destroyer.Hull, "Foobar", 1); + AddCloakAbility(submarine.Hull, "Foobar", 2); + Assert.IsTrue(submarine.IsHiddenFrom(seekers), "Submarine should be hidden."); + } + + /// + /// If we have a cloak, and they have a different type of sensor that we don't have a cloak in, they should be able to see us. + /// + [Test] + public void MismatchedSensorTypeCanSee() + { + AddSensorAbility(destroyer.Hull, "Narf", 1); + AddCloakAbility(submarine.Hull, "Foobar", 999); + Assert.IsFalse(submarine.IsHiddenFrom(seekers), "Submarine should be visible."); + } + + /// + /// If everyone is in a nebula with a system cloaking ability, the enemy ship should be hidden. + /// + [Test] + public void NebulaCantSee() + { + AddSensorAbility(destroyer.Hull, "Foobar", 1); + sys.Abilities.Add(new Ability(sys, Mod.Current.AbilityRules.FindByName("System - Sight Obscuration"), null, 999)); + Assert.IsTrue(submarine.IsHiddenFrom(seekers), "Submarine should be hidden."); + } + + /// + /// If we have a cloak, and they have no sensors, they should not be able to see us. + /// + [Test] + public void NoSensorAnyCloakCantSee() + { + AddCloakAbility(submarine.Hull, "Foobar", 1); + Assert.IsTrue(submarine.IsHiddenFrom(seekers), "Submarine should be hidden."); + } + + /// + /// If we have no cloaks, and they have no sensors, they should still be able to see us. + /// + [Test] + public void NoSensorNoCloakCanSee() + { + // by default the ships will have no abilities, so let's just test + Assert.IsFalse(submarine.IsHiddenFrom(seekers), "Submarine should be visible."); + } + + /// + /// If we have a cloak, and they have the same level sensor of the same type, they should be able to see us. + /// + [Test] + public void SameLevelSensorCanSee() + { + AddSensorAbility(destroyer.Hull, "Foobar", 1); + AddCloakAbility(submarine.Hull, "Foobar", 1); + Assert.IsFalse(submarine.IsHiddenFrom(seekers), "Submarine should be visible."); + } + + /// + /// If the enemy is in a storm with a sector cloaking ability, the enemy ship should be hidden. + /// + [Test] + public void StormCantSee() + { + AddSensorAbility(destroyer.Hull, "Foobar", 1); + var storm = new Storm(); + storm.Abilities.Add(new Ability(sys, Mod.Current.AbilityRules.FindByName("Sector - Sight Obscuration"), null, 999)); + sys.Place(storm, new Point()); + Assert.IsTrue(submarine.IsHiddenFrom(seekers), "Submarine should be hidden."); + } + + // TODO - same/low level sight obscuration from star system + + // TODO - sight obscuration from sector + + private void AddCloakAbility(IHull hull, string sightType, int level) + { + var a = new Ability(hull); + hull.Abilities.Add(a); + a.Rule = Mod.Current.AbilityRules.FindByName("Cloak Level"); + a.Values.Add(sightType); + a.Values.Add(level.ToString()); + } + + private void AddObscurationAbility(IAbilityContainer obj, int level) + { + var a = new Ability(obj); + obj.Abilities.Add(a); + a.Rule = Mod.Current.AbilityRules.FindByName("Sector - Sight Obscuration"); + a.Values.Add(level.ToString()); + } + + private void AddSensorAbility(IHull hull, string sightType, int level) + { + var a = new Ability(hull); + hull.Abilities.Add(a); + a.Rule = Mod.Current.AbilityRules.FindByName("Sensor Level"); + a.Values.Add(sightType); + a.Values.Add(level.ToString()); + } + } } \ No newline at end of file diff --git a/FrEee.Tests/Game/Objects/Vehicles/DamageTest.cs b/FrEee.Tests/Objects/Vehicles/DamageTest.cs similarity index 91% rename from FrEee.Tests/Game/Objects/Vehicles/DamageTest.cs rename to FrEee.Tests/Objects/Vehicles/DamageTest.cs index d8cd8aff2..314ebc22d 100644 --- a/FrEee.Tests/Game/Objects/Vehicles/DamageTest.cs +++ b/FrEee.Tests/Objects/Vehicles/DamageTest.cs @@ -1,115 +1,115 @@ -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Modding.Templates; -using FrEee.Utility.Extensions; -using NUnit.Framework; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Tests.Game.Objects.Vehicles -{ - /// - /// Tests damage to vehicles. - /// - public class DamageTest - { - /// - /// Number of engines to give the ship. - /// - private const int numEngines = 3; - - /// - /// They're controlling the ship. - /// - private static Empire empire; - - /// - /// The template for the engine component. - /// - private static ComponentTemplate engineTemplate; - - /// - /// The ship that is taking damage. - /// - private static Ship ship; - - [OneTimeSetUp] - public static void ClassInit() - { - // initialize galaxy - Mod.Load(null); - new Galaxy(); - - // initialize empire - empire = new Empire(); - empire.Name = "Masochists"; - - // initialize engine template - engineTemplate = new ComponentTemplate(); - engineTemplate.Name = "Gotta-Go-Fast Engine"; - engineTemplate.Abilities.Add(new Ability(engineTemplate, Mod.Current.AbilityRules.FindByName("Standard Ship Movement"), "Lets the ship go fast.", "1")); - engineTemplate.Abilities.Add(new Ability(engineTemplate, Mod.Current.AbilityRules.FindByName("Movement Bonus"), "Lets the ship go REALLY fast.", "1")); - engineTemplate.Abilities.Add(new Ability(engineTemplate, Mod.Current.AbilityRules.FindByName("Extra Movement Generation"), "Lets the ship go REALLY REALLY fast.", "1")); - engineTemplate.Abilities.Add(new Ability(engineTemplate, Mod.Current.AbilityRules.FindByName("Vehicle Speed"), "Lets the ship go REALLY FREAKIN' UNGODLY LUDICROUSLY fast.", "1")); - engineTemplate.Abilities.Add(new Ability(engineTemplate, Mod.Current.AbilityRules.FindByName("Quantum Reactor"), "Infinite supplies! Wheeee!")); - engineTemplate.SupplyUsage = 0; - engineTemplate.Durability = 10; - - // initialize ship's design - var design = new Design(); - design.BaseName = "Punching Bag"; - var hull = new Hull(); - Mod.Current.AssignID(hull, new List()); - design.Hull = hull; - design.Hull.ThrustPerMove = 1; - design.Owner = empire; - for (var i = 0; i < numEngines; i++) - design.Components.Add(new MountedComponentTemplate(design, engineTemplate)); - - // TODO - account for C&C and supply requirements once those are a thing - - // initialize ship - ship = design.Instantiate(); - ship.Owner = empire; - } - - /// - /// Ship speed should degrade as engines take damage. - /// Also, ships should go the proper speed when undamaged. - /// - [Test] - public void EngineDamage() - { - // sanity check - Assert.AreNotEqual(0, GetExpectedSpeed(ship)); - - Assert.AreEqual(GetExpectedSpeed(ship), ship.StrategicSpeed); - - for (var i = 0; i < numEngines; i++) - { - // ouchies! - ship.Components.Where(c => c.Template.ComponentTemplate == engineTemplate && c.Hitpoints > 0).First().Hitpoints = 0; - - Assert.AreEqual(GetExpectedSpeed(ship), ship.StrategicSpeed); - } - } - - private int GetExpectedSpeed(Ship ship) - { - // add up thrust of all working engines, and divide by hull mass (engines per move, not tonnage) - // HACK - assumes standard ability rules! - // TODO - worry about supplies - var thrust = ship.Components.Where(c => c.Hitpoints > 0).Sum(c => c.GetAbilityValue("Standard Ship Movement").ToInt()); - if (thrust < ship.Hull.ThrustPerMove) - return 0; - return thrust / ship.Hull.ThrustPerMove - + ship.Components.Where(c => c.Hitpoints > 0).MaxOrDefault(c => c.GetAbilityValue("Movement Bonus").ToInt()) - + ship.Components.Where(c => c.Hitpoints > 0).MaxOrDefault(c => c.GetAbilityValue("Extra Movement Generation").ToInt()) - + ship.Components.Where(c => c.Hitpoints > 0).MaxOrDefault(c => c.GetAbilityValue("Vehicle Speed").ToInt()); - } - } +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Modding.Templates; +using FrEee.Extensions; +using NUnit.Framework; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Tests.Objects.Vehicles +{ + /// + /// Tests damage to vehicles. + /// + public class DamageTest + { + /// + /// Number of engines to give the ship. + /// + private const int numEngines = 3; + + /// + /// They're controlling the ship. + /// + private static Empire empire; + + /// + /// The template for the engine component. + /// + private static ComponentTemplate engineTemplate; + + /// + /// The ship that is taking damage. + /// + private static Ship ship; + + [OneTimeSetUp] + public static void ClassInit() + { + // initialize galaxy + Mod.Load(null); + new Galaxy(); + + // initialize empire + empire = new Empire(); + empire.Name = "Masochists"; + + // initialize engine template + engineTemplate = new ComponentTemplate(); + engineTemplate.Name = "Gotta-Go-Fast Engine"; + engineTemplate.Abilities.Add(new Ability(engineTemplate, Mod.Current.AbilityRules.FindByName("Standard Ship Movement"), "Lets the ship go fast.", "1")); + engineTemplate.Abilities.Add(new Ability(engineTemplate, Mod.Current.AbilityRules.FindByName("Movement Bonus"), "Lets the ship go REALLY fast.", "1")); + engineTemplate.Abilities.Add(new Ability(engineTemplate, Mod.Current.AbilityRules.FindByName("Extra Movement Generation"), "Lets the ship go REALLY REALLY fast.", "1")); + engineTemplate.Abilities.Add(new Ability(engineTemplate, Mod.Current.AbilityRules.FindByName("Vehicle Speed"), "Lets the ship go REALLY FREAKIN' UNGODLY LUDICROUSLY fast.", "1")); + engineTemplate.Abilities.Add(new Ability(engineTemplate, Mod.Current.AbilityRules.FindByName("Quantum Reactor"), "Infinite supplies! Wheeee!")); + engineTemplate.SupplyUsage = 0; + engineTemplate.Durability = 10; + + // initialize ship's design + var design = new Design(); + design.BaseName = "Punching Bag"; + var hull = new Hull(); + Mod.Current.AssignID(hull, new List()); + design.Hull = hull; + design.Hull.ThrustPerMove = 1; + design.Owner = empire; + for (var i = 0; i < numEngines; i++) + design.Components.Add(new MountedComponentTemplate(design, engineTemplate)); + + // TODO - account for C&C and supply requirements once those are a thing + + // initialize ship + ship = design.Instantiate(); + ship.Owner = empire; + } + + /// + /// Ship speed should degrade as engines take damage. + /// Also, ships should go the proper speed when undamaged. + /// + [Test] + public void EngineDamage() + { + // sanity check + Assert.AreNotEqual(0, GetExpectedSpeed(ship)); + + Assert.AreEqual(GetExpectedSpeed(ship), ship.StrategicSpeed); + + for (var i = 0; i < numEngines; i++) + { + // ouchies! + ship.Components.Where(c => c.Template.ComponentTemplate == engineTemplate && c.Hitpoints > 0).First().Hitpoints = 0; + + Assert.AreEqual(GetExpectedSpeed(ship), ship.StrategicSpeed); + } + } + + private int GetExpectedSpeed(Ship ship) + { + // add up thrust of all working engines, and divide by hull mass (engines per move, not tonnage) + // HACK - assumes standard ability rules! + // TODO - worry about supplies + var thrust = ship.Components.Where(c => c.Hitpoints > 0).Sum(c => c.GetAbilityValue("Standard Ship Movement").ToInt()); + if (thrust < ship.Hull.ThrustPerMove) + return 0; + return thrust / ship.Hull.ThrustPerMove + + ship.Components.Where(c => c.Hitpoints > 0).MaxOrDefault(c => c.GetAbilityValue("Movement Bonus").ToInt()) + + ship.Components.Where(c => c.Hitpoints > 0).MaxOrDefault(c => c.GetAbilityValue("Extra Movement Generation").ToInt()) + + ship.Components.Where(c => c.Hitpoints > 0).MaxOrDefault(c => c.GetAbilityValue("Vehicle Speed").ToInt()); + } + } } \ No newline at end of file diff --git a/FrEee.Tests/Game/Objects/Vehicles/ResupplyTest.cs b/FrEee.Tests/Objects/Vehicles/ResupplyTest.cs similarity index 88% rename from FrEee.Tests/Game/Objects/Vehicles/ResupplyTest.cs rename to FrEee.Tests/Objects/Vehicles/ResupplyTest.cs index 8fbae54f3..5b57c49a2 100644 --- a/FrEee.Tests/Game/Objects/Vehicles/ResupplyTest.cs +++ b/FrEee.Tests/Objects/Vehicles/ResupplyTest.cs @@ -1,90 +1,90 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Modding.Templates; -using FrEee.Utility.Extensions; -using NUnit.Framework; -using System.Drawing; - -namespace FrEee.Tests.Game.Objects.Vehicles -{ - /// - /// Tests resupply of vehicles. - /// - public class ResupplyTest - { - private static Empire empire; - private static Fleet fleet; - private static Ship ship1, ship2; - private static ComponentTemplate storageComp; - private static int supplyPerComp; - private static StarSystem sys; - - [OneTimeSetUp] - public static void ClassInit() - { - // initialize galaxy - new Galaxy(); - Mod.Load(null); - sys = new StarSystem(0); - Galaxy.Current.StarSystemLocations.Add(new ObjectLocation(sys, new Point())); - - // initialize empires - empire = new Empire(); - empire.Name = "Engi"; - - // initialize components - storageComp = Mod.Current.ComponentTemplates.FindByName("Supply Storage I"); - supplyPerComp = storageComp.GetAbilityValue("Supply Storage").ToInt(); - - // initialize ships - Assert.IsNotNull(Mod.Current); - var dsn1 = new Design(); - dsn1.BaseName = "Shippy McShipface"; - dsn1.CreateHull(); - dsn1.Components.Add(new MountedComponentTemplate(dsn1, storageComp)); - dsn1.Owner = empire; - ship1 = dsn1.Instantiate(); - ship1.Owner = empire; - var dsn2 = new Design(); - dsn2.BaseName = "Shippy McShipface Mk2"; - dsn2.CreateHull(); - dsn2.Components.Add(new MountedComponentTemplate(dsn1, storageComp)); - dsn2.Components.Add(new MountedComponentTemplate(dsn1, storageComp)); - dsn2.Components.Add(new MountedComponentTemplate(dsn1, storageComp)); - dsn2.Owner = empire; - ship2 = dsn2.Instantiate(); - ship2.Owner = empire; - - // initialize fleet - fleet = new Fleet(); - fleet.Owner = empire; - fleet.Vehicles.Add(ship1); - fleet.Vehicles.Add(ship2); - - // place ships - sys.Place(fleet, new Point()); - } - - /// - /// Can ships in fleets resupply each other? - /// - [Test] - public void FleetResupply() - { - ship1.SupplyRemaining = supplyPerComp; - ship2.SupplyRemaining = supplyPerComp; - fleet.ShareSupplies(); - Assert.AreEqual(supplyPerComp * 2 / 4, ship1.SupplyRemaining); - Assert.AreEqual(supplyPerComp * 6 / 4, ship2.SupplyRemaining); - } - - // TODO - test quantum reactors - - // TODO - test resupply depots - - // TODO - test system wide resupply - } +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Modding.Templates; +using FrEee.Extensions; +using NUnit.Framework; +using System.Drawing; + +namespace FrEee.Tests.Objects.Vehicles +{ + /// + /// Tests resupply of vehicles. + /// + public class ResupplyTest + { + private static Empire empire; + private static Fleet fleet; + private static Ship ship1, ship2; + private static ComponentTemplate storageComp; + private static int supplyPerComp; + private static StarSystem sys; + + [OneTimeSetUp] + public static void ClassInit() + { + // initialize galaxy + new Galaxy(); + Mod.Load(null); + sys = new StarSystem(0); + Galaxy.Current.StarSystemLocations.Add(new ObjectLocation(sys, new Point())); + + // initialize empires + empire = new Empire(); + empire.Name = "Engi"; + + // initialize components + storageComp = Mod.Current.ComponentTemplates.FindByName("Supply Storage I"); + supplyPerComp = storageComp.GetAbilityValue("Supply Storage").ToInt(); + + // initialize ships + Assert.IsNotNull(Mod.Current); + var dsn1 = new Design(); + dsn1.BaseName = "Shippy McShipface"; + dsn1.CreateHull(); + dsn1.Components.Add(new MountedComponentTemplate(dsn1, storageComp)); + dsn1.Owner = empire; + ship1 = dsn1.Instantiate(); + ship1.Owner = empire; + var dsn2 = new Design(); + dsn2.BaseName = "Shippy McShipface Mk2"; + dsn2.CreateHull(); + dsn2.Components.Add(new MountedComponentTemplate(dsn1, storageComp)); + dsn2.Components.Add(new MountedComponentTemplate(dsn1, storageComp)); + dsn2.Components.Add(new MountedComponentTemplate(dsn1, storageComp)); + dsn2.Owner = empire; + ship2 = dsn2.Instantiate(); + ship2.Owner = empire; + + // initialize fleet + fleet = new Fleet(); + fleet.Owner = empire; + fleet.Vehicles.Add(ship1); + fleet.Vehicles.Add(ship2); + + // place ships + sys.Place(fleet, new Point()); + } + + /// + /// Can ships in fleets resupply each other? + /// + [Test] + public void FleetResupply() + { + ship1.SupplyRemaining = supplyPerComp; + ship2.SupplyRemaining = supplyPerComp; + fleet.ShareSupplies(); + Assert.AreEqual(supplyPerComp * 2 / 4, ship1.SupplyRemaining); + Assert.AreEqual(supplyPerComp * 6 / 4, ship2.SupplyRemaining); + } + + // TODO - test quantum reactors + + // TODO - test resupply depots + + // TODO - test system wide resupply + } } \ No newline at end of file diff --git a/FrEee.Tests/Savegame/freeefurball_1.gam b/FrEee.Tests/Savegame/freeefurball_1.gam index d692aaa30..896eda3a1 100644 --- a/FrEee.Tests/Savegame/freeefurball_1.gam +++ b/FrEee.Tests/Savegame/freeefurball_1.gam @@ -1,10 +1,10 @@ -FrEee.Game.Objects.Space.Galaxy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: +FrEee.Objects.Space.Galaxy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p21: Mod: : p24: AbilityRules: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c209: : p7: @@ -20,7 +20,7 @@ p21: "Inflicts [%Amount1%] normal damage to vehicles traversing this warp point."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -37,7 +37,7 @@ p21: : WarpPoint; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -59,7 +59,7 @@ p21: "Star is unstable and emits a greater than normal quantity of solar flares. (No in-game effect)"; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -76,7 +76,7 @@ p21: : Star; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -98,7 +98,7 @@ p21: "Sensor sweeps below level [%Amount1%] (all sensor types) are prevented against vehicles in this sector."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -115,7 +115,7 @@ p21: : Part, Sector, SpaceObject; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -137,7 +137,7 @@ p21: "Weapon accuracy is reduced by [%Amount1%]% in this sector."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -154,7 +154,7 @@ p21: : Part, Sector, SpaceObject; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -176,7 +176,7 @@ p21: "Vehicles' maximum shield points are reduced by [%Amount1%] in this sector."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -193,7 +193,7 @@ p21: : Part, Sector, SpaceObject; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -215,7 +215,7 @@ p21: "Sector inflicts [%Amount1%] damage to vehicles entering it or remaining in it at the end of a turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -232,7 +232,7 @@ p21: : Part, Sector, SpaceObject; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -254,7 +254,7 @@ p21: "Sensor sweeps below level [%Amount1%] (all sensor types) are prevented against vehicles in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -271,7 +271,7 @@ p21: : Part, StarSystem, SpaceObject; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -293,7 +293,7 @@ p21: "Weapon accuracy is reduced by [%Amount1%]% in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -310,7 +310,7 @@ p21: : Part, StarSystem, SpaceObject; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -332,7 +332,7 @@ p21: "Vehicles' maximum shield points are reduced by [%Amount1%] in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -349,7 +349,7 @@ p21: : Part, StarSystem, SpaceObject; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -371,7 +371,7 @@ p21: "Star system inflicts [%Amount1%] damage to vehicles entering it or remaining in it at the end of a turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -388,7 +388,7 @@ p21: : Part, StarSystem, SpaceObject; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -410,7 +410,7 @@ p21: "Mines [%Amount1%] minerals each turn (modified by planet value)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -427,7 +427,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -449,7 +449,7 @@ p21: "Farms [%Amount1%] organics each turn (modified by planet value)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -466,7 +466,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -488,7 +488,7 @@ p21: "Refines [%Amount1%] radioactives each turn (modified by planet value)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -505,7 +505,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -527,7 +527,7 @@ p21: "Generates [%Amount1%] research points each turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -544,7 +544,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -566,7 +566,7 @@ p21: "Generates [%Amount1%] intelligence points each turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -583,7 +583,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -605,7 +605,7 @@ p21: "Allows resources and points generated in this system to be collected by the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -622,7 +622,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -644,7 +644,7 @@ p21: "Seat of government for an empire. (No in-game effect)"; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -661,7 +661,7 @@ p21: : Facility, Planet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -685,7 +685,7 @@ p21: "Completely replenishes the supplies of vehicles that pass through this sector."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -702,7 +702,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -724,7 +724,7 @@ p21: "Completely replenishes the supplies of vehicles that pass through this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -741,7 +741,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -763,7 +763,7 @@ p21: "Planet minerals value is changed by [%Amount1%] per year."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -780,7 +780,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -802,7 +802,7 @@ p21: "Planet organics value is changed by [%Amount1%] per year."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -819,7 +819,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -841,7 +841,7 @@ p21: "Planet radioactives value is changed by [%Amount1%] per year."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -858,7 +858,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -876,7 +876,7 @@ p21: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -893,7 +893,7 @@ p21: : Part, Sector, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -911,7 +911,7 @@ p21: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -928,7 +928,7 @@ p21: : Part, Sector, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -946,7 +946,7 @@ p21: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -963,7 +963,7 @@ p21: : Part, Sector, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -985,7 +985,7 @@ p21: "Minerals value of all colonized planets in this system is changed by [%Amount1%] per year."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1002,7 +1002,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1024,7 +1024,7 @@ p21: "Organics value of all colonized planets in this system is changed by [%Amount1%] per year."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1041,7 +1041,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1063,7 +1063,7 @@ p21: "Radioactives value of all colonized planets in this system is changed by [%Amount1%] per year."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1080,7 +1080,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1102,7 +1102,7 @@ p21: "Minerals value of all colonized planets is changed by [%Amount1%] per year."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1119,7 +1119,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1141,7 +1141,7 @@ p21: "Organics value of all colonized planets is changed by [%Amount1%] per year."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1158,7 +1158,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1180,7 +1180,7 @@ p21: "Radioactives value of all colonized planets is changed by [%Amount1%] per year."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1197,7 +1197,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1219,7 +1219,7 @@ p21: "Planet conditions are changed by [%Amount1%] per year."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1236,7 +1236,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1258,7 +1258,7 @@ p21: "Population happiness is changed by [%Amount1%] per turn on this planet."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1275,7 +1275,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1297,7 +1297,7 @@ p21: "Weapon damage inflicted by troops defending this colony is changed by [%Amount1%]%."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1314,7 +1314,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -1336,7 +1336,7 @@ p21: "Weapon damage inflicted by troops defending colonies in this system in ground combat is changed by [%Amount1%]%."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1353,7 +1353,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -1375,7 +1375,7 @@ p21: "Weapon damage inflicted by troops defending this empire's colonies is changed by [%Amount1%]%."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1392,7 +1392,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -1414,7 +1414,7 @@ p21: "Generates [%Amount1%] planetary shield points."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1431,7 +1431,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1453,7 +1453,7 @@ p21: "Generates [%Amount1%] normal shield points."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1470,7 +1470,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1492,7 +1492,7 @@ p21: "Generates [%Amount1%] phased shield points."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1509,7 +1509,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1531,7 +1531,7 @@ p21: "[%Amount1%] components per turn can be repaired in this sector."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1548,7 +1548,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1570,7 +1570,7 @@ p21: "[%Amount1%] components per turn can be repaired in this star system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1587,7 +1587,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1609,7 +1609,7 @@ p21: "Can store [%Amount1%]kT of cargo."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1626,7 +1626,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1648,7 +1648,7 @@ p21: "This ability is not used. All transports can drop troops."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1665,7 +1665,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1687,7 +1687,7 @@ p21: "Can launch [%Amount1%] fighters per combat round, and an unlimited number of fighters per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1704,7 +1704,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1728,7 +1728,7 @@ p21: "Can lay [%Amount1%] mines per combat round, and an unlimited number of mines per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1745,7 +1745,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1767,7 +1767,7 @@ p21: "Vehicle can set up to [%Amount1%] weapon groups in its combat strategy."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1784,7 +1784,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -1806,7 +1806,7 @@ p21: "Accuracy modifier of [%Amount1%]%."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1823,7 +1823,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -1845,7 +1845,7 @@ p21: "Evasion modifier of [%Amount1%]%."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1862,7 +1862,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -1884,7 +1884,7 @@ p21: "Can sweep [%Amount1%] mines per sector traversed."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -1901,7 +1901,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1923,7 +1923,7 @@ p21: "Can cure plagues up to level [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1940,7 +1940,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -1962,7 +1962,7 @@ p21: "Speed bonus of [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -1979,7 +1979,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeLowest; @@ -2001,7 +2001,7 @@ p21: "Negates [%Amount1%] damage from each hit, except from armor piercing weapons."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2018,7 +2018,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -2040,7 +2040,7 @@ p21: "Regenerates [%Amount1%] shield points per combat round."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2057,7 +2057,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2079,7 +2079,7 @@ p21: "Vehicle does not need standard command components or crew."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2096,7 +2096,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2118,7 +2118,7 @@ p21: "Prevents [%Amount1%] sensor sweeps below level [%Amount2%] against this vehicle."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2135,7 +2135,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Group; @@ -2157,7 +2157,7 @@ p21: "Performs a level [%Amount2%] [%Amount1%] sensor sweep to detect cloaked ships."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2174,7 +2174,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Group; @@ -2196,7 +2196,7 @@ p21: "Generates [%Amount1%] supplies when used."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2213,7 +2213,7 @@ p21: : Component; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2239,7 +2239,7 @@ p21: "Generates [%Amount1%] movement points when used."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2256,7 +2256,7 @@ p21: : Component; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2278,7 +2278,7 @@ p21: "Allows detailed scanning of alien ships at range [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2295,7 +2295,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -2319,7 +2319,7 @@ p21: "Can open a warp point to a star system up to [%Amount1%] light-years away."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2336,7 +2336,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -2358,7 +2358,7 @@ p21: "Can create a planet (up to size [%Amount1%]) out of an asteroid field."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2375,7 +2375,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -2397,7 +2397,7 @@ p21: "Can destroy a planet up to size [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2414,7 +2414,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -2436,7 +2436,7 @@ p21: "Provides [%Amount1%] soldiers to capture enemy ships or defend this ship from capture."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2453,7 +2453,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2475,7 +2475,7 @@ p21: "Automated turrets can defend this ship from [%Amount1%] enemy boarders."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2492,7 +2492,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2514,7 +2514,7 @@ p21: "Provides [%Amount1%] points of thrust for movement."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2531,7 +2531,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2553,7 +2553,7 @@ p21: "Provides primary command capability. If command is lost, the ship will move slower and be unable to fire weapons."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2570,7 +2570,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2592,7 +2592,7 @@ p21: "Provides auxiliary command capability in case of primary command failure. If command is lost, the ship will move slower and be unable to fire weapons."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2609,7 +2609,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2631,7 +2631,7 @@ p21: "Provides life support for a ship's crew. If all life support is lost, the ship will be unable take any actions."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2648,7 +2648,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2670,7 +2670,7 @@ p21: "Provides quarters for a ship's crew. If all crew quarters are lost, the ship will move slower. Can also defend against 4 boarders per crew quarters."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2687,7 +2687,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2709,7 +2709,7 @@ p21: "Alien ships cannot use long range scanners against this vehicle."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2726,7 +2726,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2748,7 +2748,7 @@ p21: "This vehicle does not require supplies."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2765,7 +2765,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2787,7 +2787,7 @@ p21: "Stores [%Amount1%] supplies."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2804,7 +2804,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2826,7 +2826,7 @@ p21: "Can construct with [%Amount2%] [%Amount1%] per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2843,7 +2843,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Group; @@ -2867,7 +2867,7 @@ p21: "Can store [%Amount1%] minerals for an empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2884,7 +2884,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2906,7 +2906,7 @@ p21: "Can store [%Amount1%] organics for an empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2923,7 +2923,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2945,7 +2945,7 @@ p21: "Can store [%Amount1%] radioactives for an empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -2962,7 +2962,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -2984,7 +2984,7 @@ p21: "Mineral mining rate is changed by [%Amount1%]% on this planet or vehicle."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3001,7 +3001,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3023,7 +3023,7 @@ p21: "Organics farming rate is changed by [%Amount1%]% on this planet or vehicle."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3040,7 +3040,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3062,7 +3062,7 @@ p21: "Radioactives refining rate is changed by [%Amount1%]% on this planet or vehicle."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3079,7 +3079,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3101,7 +3101,7 @@ p21: "Mineral mining rate is changed by [%Amount1%]% in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3118,7 +3118,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3140,7 +3140,7 @@ p21: "Organics farming rate is changed by [%Amount1%]% in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3157,7 +3157,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3179,7 +3179,7 @@ p21: "Radioactives refining rate is changed by [%Amount1%]% in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3196,7 +3196,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3218,7 +3218,7 @@ p21: "Mineral mining rate is changed by [%Amount1%]% throughout the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3235,7 +3235,7 @@ p21: : Empire, Race, Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3257,7 +3257,7 @@ p21: "Organics farming rate is changed by [%Amount1%]% throughout the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3274,7 +3274,7 @@ p21: : Empire, Race, Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3296,7 +3296,7 @@ p21: "Radioactives refining rate is changed by [%Amount1%]% throughout the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3313,7 +3313,7 @@ p21: : Empire, Race, Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3335,7 +3335,7 @@ p21: "Research rate is changed by [%Amount1%]% on this planet or vehicle."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3352,7 +3352,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3374,7 +3374,7 @@ p21: "Intelligence rate is changed by [%Amount1%]% on this planet or vehicle."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3391,7 +3391,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3413,7 +3413,7 @@ p21: "Research rate is changed by [%Amount1%]% in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3430,7 +3430,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3452,7 +3452,7 @@ p21: "Intelligence rate is changed by [%Amount1%]% in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3469,7 +3469,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3491,7 +3491,7 @@ p21: "Research rate is changed by [%Amount1%]% throughout the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3508,7 +3508,7 @@ p21: : Empire, Race, Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3530,7 +3530,7 @@ p21: "Intelligence rate is changed by [%Amount1%]% throughout the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3547,7 +3547,7 @@ p21: : Empire, Race, Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3569,7 +3569,7 @@ p21: "Weapon accuracy and evasion is changed by [%Amount1%]% in this sector."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3586,7 +3586,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3608,7 +3608,7 @@ p21: "Weapon accuracy and evasion is changed by [%Amount1%]% in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3625,7 +3625,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3647,7 +3647,7 @@ p21: "Weapon accuracy and evasion is changed by [%Amount1%]% throughout the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3664,7 +3664,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3686,7 +3686,7 @@ p21: "Weapon damage is changed by [%Amount1%]% in this sector."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3703,7 +3703,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3725,7 +3725,7 @@ p21: "Weapon damage is changed by [%Amount1%]% in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3742,7 +3742,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3764,7 +3764,7 @@ p21: "Weapon damage is changed by [%Amount1%]% throughout the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3781,7 +3781,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3803,7 +3803,7 @@ p21: "The value of each colonized planet in this sector is changed by [%Amount1%] every 10 turns (all resources)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3820,7 +3820,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3842,7 +3842,7 @@ p21: "The value of each colonized planet in this system is changed by [%Amount1%] every 10 turns (all resources)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3859,7 +3859,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3881,7 +3881,7 @@ p21: "The value of each colonized planet throughout the empire is changed by [%Amount1%] every 10 turns (all resources)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3898,7 +3898,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3920,7 +3920,7 @@ p21: "The conditions of each colonized planet in this sector are changed by [%Amount1%] every 10 turns."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3937,7 +3937,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3959,7 +3959,7 @@ p21: "The conditions of each colonized planet in this system are changed by [%Amount1%] every 10 turns."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -3976,7 +3976,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -3998,7 +3998,7 @@ p21: "The conditions of each colonized planet throughout the empire are changed by [%Amount1%] every 10 turns."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -4015,7 +4015,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4037,7 +4037,7 @@ p21: "The chance of a bad random event occurring in this sector is changed by [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -4054,7 +4054,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4076,7 +4076,7 @@ p21: "The chance of a bad random event occurring in this system is changed by [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -4093,7 +4093,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4115,7 +4115,7 @@ p21: "The chance of a bad random event occurring is changed by [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -4132,7 +4132,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4154,7 +4154,7 @@ p21: "The chance of foreign intelligence operations occurring in this sector is changed by [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -4171,7 +4171,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4193,7 +4193,7 @@ p21: "The chance of foreign intelligence operations occurring in this system is changed by [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -4210,7 +4210,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4232,7 +4232,7 @@ p21: "The chance of foreign intelligence operations occurring is changed by [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -4249,7 +4249,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4271,7 +4271,7 @@ p21: "Population happiness is changed by [%Amount1%] per turn in this sector."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -4288,7 +4288,7 @@ p21: : Part, Sector, Planet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4310,7 +4310,7 @@ p21: "Population happiness is changed by [%Amount1%] per turn in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -4327,7 +4327,7 @@ p21: : Part, StarSystem, Planet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4349,7 +4349,7 @@ p21: "Population happiness is changed by [%Amount1%] per turn throughout the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -4366,7 +4366,7 @@ p21: : Empire, Part, Planet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4390,7 +4390,7 @@ p21: "Ships in this sector can be trained, giving them a [%Amount1%]% accuracy/evasion bonus per turn (max [%Amount2%]%)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4407,7 +4407,7 @@ p21: : Part, Sector, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4431,7 +4431,7 @@ p21: "Fleets in this sector can be trained, giving them a [%Amount1%]% accuracy/evasion bonus per turn (max [%Amount2%]%)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4448,7 +4448,7 @@ p21: : Part, Sector, Planet, Fleet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4470,7 +4470,7 @@ p21: "Ships in this system can be trained, giving them a [%Amount1%]% accuracy/evasion bonus per turn (max [%Amount2%]%)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4487,7 +4487,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4509,7 +4509,7 @@ p21: "Fleets in this system can be trained, giving them a [%Amount1%]% accuracy/evasion bonus per turn (max [%Amount2%]%)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4526,7 +4526,7 @@ p21: : Part, StarSystem, Planet, Fleet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4548,7 +4548,7 @@ p21: "All ships in the empire can be trained, giving them a [%Amount1%]% accuracy/evasion bonus per turn (max [%Amount2%]%)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4565,7 +4565,7 @@ p21: : Empire, Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4587,7 +4587,7 @@ p21: "All fleets in the empire can be trained, giving them a [%Amount1%]% accuracy/evasion bonus per turn (max [%Amount2%]%)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4604,7 +4604,7 @@ p21: : Empire, Part, Planet, Fleet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4626,7 +4626,7 @@ p21: "Population reproduction is changed by [%Amount1%] per turn on this planet."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4643,7 +4643,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4665,7 +4665,7 @@ p21: "Population reproduction is changed by [%Amount1%] per turn in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4682,7 +4682,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4704,7 +4704,7 @@ p21: "Population reproduction is changed by [%Amount1%] per turn throughout the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4721,7 +4721,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4743,7 +4743,7 @@ p21: "The population of this colony is increased by [%Amount1%]M per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4760,7 +4760,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4782,7 +4782,7 @@ p21: "The population of each colony in this system is increased by [%Amount1%]M per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4799,7 +4799,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4821,7 +4821,7 @@ p21: "The population of each colony in the empire is increased by [%Amount1%]M per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4838,7 +4838,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4860,7 +4860,7 @@ p21: "The population of this colony is immune to plagues up to level [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4877,7 +4877,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4899,7 +4899,7 @@ p21: "The population of this system is immune to plagues up to level [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4916,7 +4916,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4938,7 +4938,7 @@ p21: "The population of the entire empire is immune to plagues up to level [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4955,7 +4955,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -4977,7 +4977,7 @@ p21: "Can convert between resource types with a [%Amount1%] loss of material."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -4994,7 +4994,7 @@ p21: : Empire, Part; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -5018,7 +5018,7 @@ p21: "Vehicles scrapped in this sector will reclaim [%Amount1%]% of their resource cost."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5035,7 +5035,7 @@ p21: : Part, Sector; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -5057,7 +5057,7 @@ p21: "Vehicles scrapped in this system will reclaim [%Amount1%]% of their resource cost."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5074,7 +5074,7 @@ p21: : Part, StarSystem; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -5096,7 +5096,7 @@ p21: "Vehicles scrapped anywhere in the empire will reclaim [%Amount1%]% of their resource cost."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5113,7 +5113,7 @@ p21: : Empire, Part; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -5135,7 +5135,7 @@ p21: "Can close a warp point."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5152,7 +5152,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5174,7 +5174,7 @@ p21: "Can destroy a star. This will destroy all ships in the system and turn planets into asteroids."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5191,7 +5191,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5213,7 +5213,7 @@ p21: "Can create a star in a system that does not already have any stars, nebulae, or black holes."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5230,7 +5230,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5252,7 +5252,7 @@ p21: "Can destroy a storm."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5269,7 +5269,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5291,7 +5291,7 @@ p21: "Can create a storm."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5308,7 +5308,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5330,7 +5330,7 @@ p21: "Vehicle can self-destruct at will, and will do so if it is taken over by boarders."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5347,7 +5347,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5369,7 +5369,7 @@ p21: "Can colonize a rock planet. The colony ship will be destroyed upon doing so."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5386,7 +5386,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5408,7 +5408,7 @@ p21: "Can colonize an ice planet. The colony ship will be destroyed upon doing so."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5425,7 +5425,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5449,7 +5449,7 @@ p21: "Can colonize a gas giant. The colony ship will be destroyed upon doing so."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5466,7 +5466,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5488,7 +5488,7 @@ p21: "Weapon automatically fires at the first target to come into range."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5505,7 +5505,7 @@ p21: : Component; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5527,7 +5527,7 @@ p21: "Component is damaged before other components on a vehicle."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5544,7 +5544,7 @@ p21: : Component; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5566,7 +5566,7 @@ p21: "Can launch [%Amount1%] satellites per combat round, and an unlimited number of satellites per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5583,7 +5583,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -5605,7 +5605,7 @@ p21: "Can launch [%Amount1%] drones per combat round, and an unlimited number of drones per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5622,7 +5622,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -5644,7 +5644,7 @@ p21: "Remotely mines [%Amount1%] minerals each turn from uninhabited planets and asteroids in the sector (modified by planet/asteroid value)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5661,7 +5661,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -5683,7 +5683,7 @@ p21: "Remotely farms [%Amount1%] organics each turn from uninhabited planets and asteroids in the sector (modified by planet/asteroid value)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5700,7 +5700,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -5722,7 +5722,7 @@ p21: "Remotely refines [%Amount1%] radioactives each turn from uninhabited planets and asteroids in the sector (modified by planet/asteroid value)."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5739,7 +5739,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -5761,7 +5761,7 @@ p21: "Components and facilities with this ability will repair themselves for a total of [%Amount1%] HP per combat round, and completely after combat."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5778,7 +5778,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -5800,7 +5800,7 @@ p21: "When the vehicle takes hull or armor damage, except from armor piercing weapons, the shields are regenerated by [%Amount1%] points or the amount of damage inflicted, whichever is less."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5817,7 +5817,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -5839,7 +5839,7 @@ p21: "This system draws all vehicles toward its center at a rate of [%Amount1%] sectors per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5856,7 +5856,7 @@ p21: : StarSystem; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -5878,7 +5878,7 @@ p21: "Vehicles in this system will move randomly up to [%Amount1%] sectors per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5895,7 +5895,7 @@ p21: : StarSystem; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -5917,7 +5917,7 @@ p21: "Entering the sector of this system will inflict [%Amount1%] points of normal damage."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5934,7 +5934,7 @@ p21: : StarSystem; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -5958,7 +5958,7 @@ p21: "Can dissipate a nebula."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5975,7 +5975,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -5999,7 +5999,7 @@ p21: "Can destroy a star, creating a nebula in its place. This will destroy all ships in the system and turn planets into asteroids."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6016,7 +6016,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6038,7 +6038,7 @@ p21: "Can dissipate a black hole."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6055,7 +6055,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6077,7 +6077,7 @@ p21: "Can destroy a star, creating a black hole in its place. This will destroy all ships and planets in the system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6094,7 +6094,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6116,7 +6116,7 @@ p21: "This planet cannot be destroyed by planet destroying weapons."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6133,7 +6133,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6155,7 +6155,7 @@ p21: "Stars in this system cannot be destroyed by standard star destroying weapons."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6172,7 +6172,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6194,7 +6194,7 @@ p21: "Stars in this system cannot be converted into nebulae."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6211,7 +6211,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6233,7 +6233,7 @@ p21: "Stars in this system cannot be converted into black holes."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6250,7 +6250,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6272,7 +6272,7 @@ p21: "Warp points cannot be opened to or from this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6289,7 +6289,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6311,7 +6311,7 @@ p21: "Warp points to and from this system cannot be closed."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6328,7 +6328,7 @@ p21: : Part, StarSystem, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6354,7 +6354,7 @@ p21: "This component or facility is disabled when activated, and must be repaired to be used again."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6371,7 +6371,7 @@ p21: : Part; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6393,7 +6393,7 @@ p21: "This component or facility destroys the entire vehicle or planet it is contained within when activated."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6410,7 +6410,7 @@ p21: : Part, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6432,7 +6432,7 @@ p21: "This planet contains ancient ruins. [%Amount1%] random technologies will be learned when it is colonized."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6449,7 +6449,7 @@ p21: : Planet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -6471,7 +6471,7 @@ p21: "This planet contains ancient ruins. Unique technology [%Amount1%] will be learned when it is colonized."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6488,7 +6488,7 @@ p21: : Planet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6510,7 +6510,7 @@ p21: "Contains a network connection that gives this vehicle the same effective experience level as the most experienced ship in the sector that is also connected to the network."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6527,7 +6527,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6549,7 +6549,7 @@ p21: "Vehicle gains [%Amount1%] additional speed in combat."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -6566,7 +6566,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -6588,7 +6588,7 @@ p21: "Generates [%Amount1%] supplies per turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6605,7 +6605,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -6627,7 +6627,7 @@ p21: "Generates [%Amount1%] supplies per turn from each star in the system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6644,7 +6644,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -6666,7 +6666,7 @@ p21: "Vehicle speed is increased by [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -6683,7 +6683,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -6705,7 +6705,7 @@ p21: "After [%Amount1%] turns, the atmosphere of this planet will be converted to one breathable by the majority of the planet's population."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6722,7 +6722,7 @@ p21: : Part, Planet, GroundVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeLowest; @@ -6744,7 +6744,7 @@ p21: "This vehicle's weapons will always hit their target."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6761,7 +6761,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6785,7 +6785,7 @@ p21: "Can create a constructed planet of type [%Amount1%] from a star."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6802,7 +6802,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6824,7 +6824,7 @@ p21: "Can create a constructed planet of type [%Amount1%] from a planet."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6841,7 +6841,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6863,7 +6863,7 @@ p21: "Can create a constructed planet of type [%Amount1%] from a storm."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6880,7 +6880,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6902,7 +6902,7 @@ p21: "Can create a constructed planet of type [%Amount1%] from a warp point."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6919,7 +6919,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6941,7 +6941,7 @@ p21: "Can create a constructed planet of type [%Amount1%] from an asteroid field."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6958,7 +6958,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6980,7 +6980,7 @@ p21: "Can create a constructed planet of type [%Amount1%] in deep space."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -6997,7 +6997,7 @@ p21: : Component, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7019,7 +7019,7 @@ p21: "Requrires [%Amount1%]kT of [%Amount2%] components to create a constructed planet."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7036,7 +7036,7 @@ p21: : Component; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Group; @@ -7058,7 +7058,7 @@ p21: "Maintenance rate is modified by [%Amount1%]%."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7075,7 +7075,7 @@ p21: : Component, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7097,7 +7097,7 @@ p21: "Allows detailed scanning of alien ships within this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7114,7 +7114,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7136,7 +7136,7 @@ p21: "Generates [%Amount1%] minerals per star in the system each turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7153,7 +7153,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7175,7 +7175,7 @@ p21: "Generates [%Amount1%] organigs per star in the system each turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7192,7 +7192,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7214,7 +7214,7 @@ p21: "Generates [%Amount1%] radioactives per star in the system each turn."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7231,7 +7231,7 @@ p21: : Part, Planet, SpaceVehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7253,7 +7253,7 @@ p21: "Maintenance rate is reduced by [%Amount1%]% for the entire sector."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7270,7 +7270,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7292,7 +7292,7 @@ p21: "Maintenance rate is reduced by [%Amount1%]% for the entire system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7309,7 +7309,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7331,7 +7331,7 @@ p21: "Maintenance rate is reduced by [%Amount1%]% for the entire empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7348,7 +7348,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7370,7 +7370,7 @@ p21: "Modifies vehicles' maximum shield points by [%Amount1%] in this sector."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7387,7 +7387,7 @@ p21: : Part, Sector, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7409,7 +7409,7 @@ p21: "Modifies vehicles' maximum shield points by [%Amount1%] in this system."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7426,7 +7426,7 @@ p21: : Part, StarSystem, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7448,7 +7448,7 @@ p21: "Modifies vehicles' maximum shield points by [%Amount1%] throughout the empire."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7465,7 +7465,7 @@ p21: : Empire, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7487,7 +7487,7 @@ p21: "Accuracy penalty of [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7504,7 +7504,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7526,7 +7526,7 @@ p21: "Evasion penalty of [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7543,7 +7543,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7558,7 +7558,7 @@ p21: c0: ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7575,7 +7575,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7590,7 +7590,7 @@ p21: c0: ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7607,7 +7607,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7622,7 +7622,7 @@ p21: c0: ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7639,7 +7639,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7654,7 +7654,7 @@ p21: c0: ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7671,7 +7671,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7686,7 +7686,7 @@ p21: c0: ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7703,7 +7703,7 @@ p21: : Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7725,7 +7725,7 @@ p21: "Vehicle supply usage is modified by [%Amount1%]%."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7742,7 +7742,7 @@ p21: : Empire, Race, Trait; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeLowest; @@ -7764,7 +7764,7 @@ p21: "The race's population is immune to plagues."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7781,7 +7781,7 @@ p21: : Race, Trait; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7803,7 +7803,7 @@ p21: "The chance of a bad random event occurring in this empire is changed by [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7820,7 +7820,7 @@ p21: : Empire, Race, Trait, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7842,7 +7842,7 @@ p21: "Colonies containing this race's population do not require spaceports to gather resources and points."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7859,7 +7859,7 @@ p21: : Race, Trait, Planet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7881,7 +7881,7 @@ p21: "The speed of this empire's vehicles is modified by [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7898,7 +7898,7 @@ p21: : Empire, Race, Trait, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -7920,7 +7920,7 @@ p21: "The empire has prior knowledge of the entire galaxy at the start of the game."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7937,7 +7937,7 @@ p21: : Empire, Race, Trait; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -7959,7 +7959,7 @@ p21: "Colonies' facility, cargo, and population storage space is modified by [%Amount1%]%."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -7976,7 +7976,7 @@ p21: : Empire, Race, Trait, Facility, Planet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -7998,7 +7998,7 @@ p21: "Planetary space yards' construction rate is modified by [%Amount1%]%."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -8015,7 +8015,7 @@ p21: : Empire, Race, Trait, Planet; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -8037,7 +8037,7 @@ p21: "Empire gains access to the [%Amount1%] racial tech."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -8054,7 +8054,7 @@ p21: : Empire, Race, Trait; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -8076,7 +8076,7 @@ p21: "Population does not grow angry or happy."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -8093,7 +8093,7 @@ p21: : Race, Trait, Facility, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : None; @@ -8115,7 +8115,7 @@ p21: "The chance of a research breakthrough in this empire is modified by [%Amount1%]."; ; GroupRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : Add; @@ -8132,7 +8132,7 @@ p21: : Empire, Race, Trait, Part, Planet, Vehicle; ValueRules: - System.Collections.Generic.List`1[[FrEee.Game.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Enumerations.AbilityValueRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : TakeHighest; @@ -8147,7 +8147,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -8467,9 +8467,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -8519,7 +8519,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -8532,7 +8532,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -8668,9 +8668,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -8716,7 +8716,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -8729,7 +8729,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -8865,9 +8865,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -8913,7 +8913,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -8926,7 +8926,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -9046,9 +9046,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -9097,7 +9097,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -9110,7 +9110,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -9222,9 +9222,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -9247,7 +9247,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -9355,9 +9355,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -9380,7 +9380,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -9488,9 +9488,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -9513,7 +9513,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -9737,9 +9737,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -9788,7 +9788,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -9801,7 +9801,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -10001,9 +10001,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -10030,7 +10030,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -10234,9 +10234,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -10263,7 +10263,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -10379,9 +10379,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -10430,7 +10430,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -10443,7 +10443,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -10539,9 +10539,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -10568,7 +10568,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -10664,9 +10664,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -10693,7 +10693,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -10801,9 +10801,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -10852,12 +10852,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -10906,7 +10906,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -10922,7 +10922,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -11014,9 +11014,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -11043,7 +11043,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -11131,9 +11131,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -11160,7 +11160,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -11348,9 +11348,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -11399,7 +11399,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -11412,7 +11412,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -11560,9 +11560,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -11589,7 +11589,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -11737,9 +11737,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -11766,7 +11766,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -11930,9 +11930,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -11963,7 +11963,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -12111,9 +12111,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -12144,7 +12144,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -12292,9 +12292,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -12325,7 +12325,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -12485,9 +12485,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -12518,7 +12518,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -12666,9 +12666,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -12699,7 +12699,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -12847,9 +12847,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -12880,7 +12880,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -13040,9 +13040,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -13069,7 +13069,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -13217,9 +13217,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -13250,7 +13250,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -13398,9 +13398,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -13431,7 +13431,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -13543,9 +13543,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -13594,12 +13594,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -13648,7 +13648,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -13664,7 +13664,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -13756,9 +13756,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -13785,7 +13785,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -13873,9 +13873,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -13902,7 +13902,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -14038,9 +14038,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -14067,7 +14067,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -14187,9 +14187,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -14216,7 +14216,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -14340,9 +14340,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -14369,7 +14369,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -14485,9 +14485,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -14536,12 +14536,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -14590,7 +14590,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -14606,7 +14606,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -14698,9 +14698,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -14727,7 +14727,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -14815,9 +14815,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -14844,7 +14844,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -14936,9 +14936,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -14965,7 +14965,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -15057,9 +15057,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -15086,7 +15086,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -15194,9 +15194,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -15223,7 +15223,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -15311,9 +15311,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -15340,7 +15340,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -15432,9 +15432,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -15461,7 +15461,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -15553,9 +15553,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -15582,7 +15582,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -15678,9 +15678,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -15707,7 +15707,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -15815,9 +15815,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -15840,7 +15840,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -15940,9 +15940,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -15965,7 +15965,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -16065,9 +16065,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -16090,7 +16090,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -16186,9 +16186,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -16211,7 +16211,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -16311,9 +16311,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -16336,7 +16336,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -16483,9 +16483,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -16508,7 +16508,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -16631,9 +16631,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -16656,7 +16656,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -16779,9 +16779,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -16804,7 +16804,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -16927,9 +16927,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -16952,7 +16952,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -17075,9 +17075,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -17100,7 +17100,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -17204,9 +17204,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -17229,7 +17229,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -17325,9 +17325,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -17350,7 +17350,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -17442,9 +17442,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -17467,7 +17467,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -17607,9 +17607,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -17658,12 +17658,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -17712,7 +17712,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -17728,7 +17728,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -17856,9 +17856,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -17885,7 +17885,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -18009,9 +18009,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -18038,7 +18038,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -18178,9 +18178,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -18229,12 +18229,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -18257,7 +18257,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -18381,9 +18381,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -18410,7 +18410,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -18526,9 +18526,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -18555,7 +18555,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -18667,9 +18667,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -18718,12 +18718,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -18772,7 +18772,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -18788,7 +18788,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -18884,9 +18884,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -18913,7 +18913,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -19005,9 +19005,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -19034,7 +19034,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -19130,9 +19130,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -19159,7 +19159,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -19267,9 +19267,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -19318,12 +19318,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -19346,7 +19346,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -19438,9 +19438,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -19467,7 +19467,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -19563,9 +19563,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -19592,7 +19592,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -19700,9 +19700,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -19725,7 +19725,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -19817,9 +19817,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -19842,7 +19842,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -19934,9 +19934,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -19959,7 +19959,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -20063,9 +20063,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -20114,12 +20114,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -20146,7 +20146,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -20238,9 +20238,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -20267,7 +20267,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -20359,9 +20359,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -20388,7 +20388,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -20496,9 +20496,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -20521,7 +20521,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -20629,9 +20629,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -20654,7 +20654,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -20746,9 +20746,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -20771,7 +20771,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -20863,9 +20863,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -20888,7 +20888,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -20984,9 +20984,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -21013,7 +21013,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -21105,9 +21105,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -21134,7 +21134,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -21246,9 +21246,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -21297,12 +21297,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -21351,7 +21351,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -21367,7 +21367,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -21463,9 +21463,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -21492,7 +21492,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -21588,9 +21588,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -21617,7 +21617,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -21713,9 +21713,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -21742,7 +21742,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -21838,9 +21838,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -21867,7 +21867,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -22010,9 +22010,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -22061,7 +22061,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -22074,7 +22074,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -22201,9 +22201,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -22230,7 +22230,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -22357,9 +22357,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -22386,7 +22386,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -22490,9 +22490,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -22519,7 +22519,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c5: : p7: @@ -22775,9 +22775,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -22826,12 +22826,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -22858,7 +22858,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c5: : p7: @@ -23082,9 +23082,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -23111,7 +23111,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c5: : p7: @@ -23331,9 +23331,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -23360,7 +23360,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -23468,9 +23468,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -23497,7 +23497,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -23589,9 +23589,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -23618,7 +23618,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -23718,9 +23718,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -23747,7 +23747,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -23855,9 +23855,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -23880,7 +23880,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -24024,9 +24024,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -24075,7 +24075,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -24088,7 +24088,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -24208,9 +24208,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -24237,7 +24237,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -24361,9 +24361,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -24390,7 +24390,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -24502,9 +24502,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -24553,7 +24553,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -24566,7 +24566,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -24666,9 +24666,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -24695,7 +24695,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -24791,9 +24791,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -24820,7 +24820,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -24928,9 +24928,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -24979,7 +24979,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -24992,7 +24992,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -25084,9 +25084,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -25113,7 +25113,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -25205,9 +25205,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -25234,7 +25234,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -25342,9 +25342,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -25393,7 +25393,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -25406,7 +25406,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -25498,9 +25498,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -25527,7 +25527,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -25619,9 +25619,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -25648,7 +25648,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -25784,9 +25784,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -25835,12 +25835,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -25883,7 +25883,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -25899,7 +25899,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -26023,9 +26023,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -26052,7 +26052,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -26176,9 +26176,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -26205,7 +26205,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -26341,9 +26341,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -26392,12 +26392,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -26440,7 +26440,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -26456,7 +26456,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -26576,9 +26576,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -26605,7 +26605,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -26725,9 +26725,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -26754,7 +26754,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -26854,9 +26854,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -26905,7 +26905,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -26918,7 +26918,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -27006,9 +27006,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -27035,7 +27035,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -27123,9 +27123,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -27152,7 +27152,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -27252,9 +27252,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -27277,7 +27277,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -27381,9 +27381,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -27406,7 +27406,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -27510,9 +27510,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -27561,12 +27561,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -27589,7 +27589,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -27689,9 +27689,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -27714,7 +27714,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -27814,9 +27814,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -27865,7 +27865,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -27878,7 +27878,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -28010,9 +28010,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -28027,7 +28027,7 @@ p21: : i8; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -28050,7 +28050,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -28202,9 +28202,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -28219,7 +28219,7 @@ p21: : i8; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -28242,7 +28242,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -28394,9 +28394,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -28411,7 +28411,7 @@ p21: : i8; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -28434,7 +28434,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -28586,9 +28586,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -28603,7 +28603,7 @@ p21: : i8; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -28630,7 +28630,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -28730,9 +28730,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -28755,7 +28755,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -28879,9 +28879,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -28904,7 +28904,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -29000,9 +29000,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -29025,7 +29025,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -29113,9 +29113,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -29138,7 +29138,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -29226,9 +29226,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -29251,7 +29251,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -29395,9 +29395,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -29446,12 +29446,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -29500,7 +29500,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -29516,7 +29516,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -29660,9 +29660,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -29685,7 +29685,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -29809,9 +29809,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -29838,7 +29838,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -29962,9 +29962,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -29991,7 +29991,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -30115,9 +30115,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -30144,7 +30144,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -30268,9 +30268,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -30297,7 +30297,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -30437,9 +30437,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -30466,7 +30466,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -30590,9 +30590,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -30615,7 +30615,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -30735,9 +30735,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -30760,7 +30760,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -30900,9 +30900,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -30925,7 +30925,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -31045,9 +31045,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -31070,7 +31070,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -31190,9 +31190,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -31215,7 +31215,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -31327,9 +31327,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -31352,7 +31352,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -31488,9 +31488,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -31513,7 +31513,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -31653,9 +31653,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -31682,7 +31682,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -31818,9 +31818,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -31843,7 +31843,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -31915,9 +31915,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -31969,12 +31969,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -31994,7 +31994,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32084,7 +32084,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -32125,7 +32125,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -32189,9 +32189,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32215,7 +32215,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32234,7 +32234,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -32263,7 +32263,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -32323,9 +32323,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32349,7 +32349,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32368,7 +32368,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -32397,7 +32397,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -32457,9 +32457,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32483,7 +32483,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32502,7 +32502,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -32531,7 +32531,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -32591,9 +32591,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32617,7 +32617,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32636,7 +32636,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -32665,7 +32665,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -32729,9 +32729,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32755,7 +32755,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32774,7 +32774,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -32803,7 +32803,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -32863,9 +32863,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32889,7 +32889,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -32908,7 +32908,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -32937,7 +32937,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -33001,9 +33001,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33027,7 +33027,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33046,7 +33046,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -33075,7 +33075,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -33139,9 +33139,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33165,7 +33165,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33184,7 +33184,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -33213,7 +33213,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -33273,9 +33273,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33299,7 +33299,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33318,7 +33318,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -33347,7 +33347,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -33411,9 +33411,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33437,7 +33437,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33456,7 +33456,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -33485,7 +33485,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -33549,9 +33549,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33575,7 +33575,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33594,7 +33594,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -33623,7 +33623,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -33695,9 +33695,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33746,7 +33746,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -33756,7 +33756,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33772,7 +33772,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -33815,7 +33815,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -33879,9 +33879,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33905,7 +33905,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -33921,7 +33921,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -33956,7 +33956,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -34020,9 +34020,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34046,7 +34046,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34062,7 +34062,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -34097,7 +34097,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -34161,9 +34161,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34187,7 +34187,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34203,7 +34203,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -34242,7 +34242,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -34302,9 +34302,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34328,7 +34328,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34344,7 +34344,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -34379,7 +34379,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -34451,9 +34451,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34505,12 +34505,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34530,7 +34530,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34549,7 +34549,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -34582,7 +34582,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -34642,9 +34642,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34668,7 +34668,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34687,7 +34687,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -34716,7 +34716,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -34776,9 +34776,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34802,7 +34802,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34821,7 +34821,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -34850,7 +34850,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -34910,9 +34910,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34936,7 +34936,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -34955,7 +34955,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -34984,7 +34984,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -35044,9 +35044,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35070,7 +35070,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35089,7 +35089,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -35118,7 +35118,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -35178,9 +35178,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35204,7 +35204,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35223,7 +35223,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -35252,7 +35252,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -35324,9 +35324,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35375,12 +35375,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35400,7 +35400,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35419,7 +35419,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -35456,7 +35456,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -35516,9 +35516,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35542,7 +35542,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35561,7 +35561,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -35590,7 +35590,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -35650,9 +35650,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35676,7 +35676,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35695,7 +35695,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -35724,7 +35724,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -35784,9 +35784,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35810,7 +35810,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35829,7 +35829,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -35858,7 +35858,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -35918,9 +35918,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35944,7 +35944,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -35963,7 +35963,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -35992,7 +35992,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -36060,9 +36060,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36086,7 +36086,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36105,7 +36105,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -36138,7 +36138,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -36198,9 +36198,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36224,7 +36224,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36243,7 +36243,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -36272,7 +36272,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -36332,9 +36332,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36358,7 +36358,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36377,7 +36377,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -36406,7 +36406,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -36466,9 +36466,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36492,7 +36492,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36511,7 +36511,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -36540,7 +36540,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -36600,9 +36600,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36626,7 +36626,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36645,7 +36645,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -36674,7 +36674,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -36746,9 +36746,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36768,7 +36768,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36784,7 +36784,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -36823,7 +36823,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -36883,9 +36883,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36905,7 +36905,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -36921,7 +36921,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -36956,7 +36956,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -37016,9 +37016,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37038,7 +37038,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37054,7 +37054,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -37089,7 +37089,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -37149,9 +37149,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37175,7 +37175,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37191,7 +37191,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -37226,7 +37226,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -37286,9 +37286,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37312,7 +37312,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37328,7 +37328,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -37363,7 +37363,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -37467,9 +37467,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37518,12 +37518,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37543,7 +37543,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37562,7 +37562,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -37602,7 +37602,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -37690,9 +37690,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37716,7 +37716,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37735,7 +37735,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -37767,7 +37767,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -37855,9 +37855,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37881,7 +37881,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -37900,7 +37900,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -37932,7 +37932,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -38020,9 +38020,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38046,7 +38046,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38065,7 +38065,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -38097,7 +38097,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -38185,9 +38185,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38211,7 +38211,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38230,7 +38230,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -38262,7 +38262,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -38334,9 +38334,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38385,12 +38385,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38410,7 +38410,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38514,7 +38514,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -38547,7 +38547,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -38611,9 +38611,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38637,7 +38637,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38741,7 +38741,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -38770,7 +38770,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -38834,9 +38834,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38860,7 +38860,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -38964,7 +38964,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -38993,7 +38993,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -39057,9 +39057,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39083,7 +39083,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39187,7 +39187,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -39216,7 +39216,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -39280,9 +39280,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39306,7 +39306,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39410,7 +39410,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -39439,7 +39439,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -39511,9 +39511,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39562,12 +39562,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39587,7 +39587,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39677,7 +39677,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -39710,7 +39710,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -39770,9 +39770,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39796,7 +39796,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39815,7 +39815,7 @@ p21: : i6; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -39844,7 +39844,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -39904,9 +39904,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39930,7 +39930,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -39949,7 +39949,7 @@ p21: : i6; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -39978,7 +39978,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -40038,9 +40038,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40064,7 +40064,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40083,7 +40083,7 @@ p21: : i6; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -40112,7 +40112,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -40172,9 +40172,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40198,7 +40198,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40217,7 +40217,7 @@ p21: : i6; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -40246,7 +40246,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -40318,9 +40318,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40369,12 +40369,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40394,7 +40394,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40413,7 +40413,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -40446,7 +40446,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -40506,9 +40506,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40532,7 +40532,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40551,7 +40551,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -40580,7 +40580,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -40640,9 +40640,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40666,7 +40666,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40685,7 +40685,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -40714,7 +40714,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -40774,9 +40774,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40800,7 +40800,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40819,7 +40819,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -40848,7 +40848,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -40920,9 +40920,9 @@ p21: "15"; ; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40946,7 +40946,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -40965,7 +40965,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -40998,7 +40998,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -41058,9 +41058,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41084,7 +41084,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41103,7 +41103,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -41132,7 +41132,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -41192,9 +41192,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41218,7 +41218,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41237,7 +41237,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -41266,7 +41266,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -41338,9 +41338,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41364,7 +41364,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41383,7 +41383,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -41416,7 +41416,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -41476,9 +41476,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41502,7 +41502,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41521,7 +41521,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -41550,7 +41550,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -41610,9 +41610,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41636,7 +41636,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41655,7 +41655,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -41684,7 +41684,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -41756,9 +41756,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41807,12 +41807,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41836,7 +41836,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -41940,7 +41940,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -41977,7 +41977,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -42037,9 +42037,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42063,7 +42063,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42082,7 +42082,7 @@ p21: : i7; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -42111,7 +42111,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -42171,9 +42171,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42197,7 +42197,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42216,7 +42216,7 @@ p21: : i7; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -42245,7 +42245,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -42305,9 +42305,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42331,7 +42331,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42350,7 +42350,7 @@ p21: : i7; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -42379,7 +42379,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -42443,9 +42443,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42469,7 +42469,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42488,7 +42488,7 @@ p21: : i7; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -42517,7 +42517,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -42589,9 +42589,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42640,12 +42640,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42665,7 +42665,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42769,7 +42769,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -42802,7 +42802,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -42862,9 +42862,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42888,7 +42888,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -42907,7 +42907,7 @@ p21: : i8; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -42936,7 +42936,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -42996,9 +42996,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43022,7 +43022,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43041,7 +43041,7 @@ p21: : i8; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -43070,7 +43070,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -43130,9 +43130,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43156,7 +43156,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43175,7 +43175,7 @@ p21: : i8; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -43204,7 +43204,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -43264,9 +43264,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43290,7 +43290,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43309,7 +43309,7 @@ p21: : i8; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -43338,7 +43338,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -43410,9 +43410,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43436,7 +43436,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43452,7 +43452,7 @@ p21: : i8; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -43491,7 +43491,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -43551,9 +43551,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43577,7 +43577,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43593,7 +43593,7 @@ p21: : i8; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -43632,7 +43632,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -43692,9 +43692,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43718,7 +43718,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43734,7 +43734,7 @@ p21: : i8; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -43769,7 +43769,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -43829,9 +43829,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43855,7 +43855,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43871,7 +43871,7 @@ p21: : i8; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -43906,7 +43906,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -43966,9 +43966,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -43992,7 +43992,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44008,7 +44008,7 @@ p21: : i8; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -44043,7 +44043,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -44115,9 +44115,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44166,7 +44166,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -44176,7 +44176,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44195,7 +44195,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -44228,7 +44228,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -44288,9 +44288,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44314,7 +44314,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44333,7 +44333,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -44362,7 +44362,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -44422,9 +44422,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44448,7 +44448,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44467,7 +44467,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -44496,7 +44496,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -44556,9 +44556,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44582,7 +44582,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44601,7 +44601,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -44630,7 +44630,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -44690,9 +44690,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44716,7 +44716,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44735,7 +44735,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -44764,7 +44764,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -44836,9 +44836,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44862,7 +44862,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -44966,7 +44966,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -44999,7 +44999,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -45059,9 +45059,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45085,7 +45085,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45104,7 +45104,7 @@ p21: : i9; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -45133,7 +45133,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -45193,9 +45193,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45219,7 +45219,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45238,7 +45238,7 @@ p21: : i9; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -45267,7 +45267,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -45327,9 +45327,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45353,7 +45353,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45372,7 +45372,7 @@ p21: : i9; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -45401,7 +45401,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -45461,9 +45461,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45487,7 +45487,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45506,7 +45506,7 @@ p21: : i9; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -45535,7 +45535,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -45607,9 +45607,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45629,7 +45629,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45733,7 +45733,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -45766,7 +45766,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -45826,9 +45826,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45848,7 +45848,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45867,7 +45867,7 @@ p21: : i10; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -45896,7 +45896,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -45956,9 +45956,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45978,7 +45978,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -45997,7 +45997,7 @@ p21: : i10; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -46026,7 +46026,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -46086,9 +46086,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46108,7 +46108,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46127,7 +46127,7 @@ p21: : i10; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -46156,7 +46156,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -46216,9 +46216,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46238,7 +46238,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46257,7 +46257,7 @@ p21: : i10; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -46286,7 +46286,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -46358,9 +46358,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46380,7 +46380,7 @@ p21: : Ship, Base, Satellite, Drone; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46484,7 +46484,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -46517,7 +46517,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -46577,9 +46577,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46599,7 +46599,7 @@ p21: : Ship, Base, Satellite, Drone; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46618,7 +46618,7 @@ p21: : i11; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -46647,7 +46647,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -46707,9 +46707,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46729,7 +46729,7 @@ p21: : Ship, Base, Satellite, Drone; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46748,7 +46748,7 @@ p21: : i11; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -46777,7 +46777,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -46849,9 +46849,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46871,7 +46871,7 @@ p21: : Ship, Base, Satellite, Drone; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -46975,7 +46975,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -47008,7 +47008,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -47068,9 +47068,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47090,7 +47090,7 @@ p21: : Ship, Base, Satellite, Drone; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47109,7 +47109,7 @@ p21: : i12; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -47138,7 +47138,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -47198,9 +47198,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47220,7 +47220,7 @@ p21: : Ship, Base, Satellite, Drone; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47239,7 +47239,7 @@ p21: : i12; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -47268,7 +47268,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -47340,9 +47340,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47391,12 +47391,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47416,7 +47416,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47506,7 +47506,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -47539,7 +47539,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -47599,9 +47599,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47625,7 +47625,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47644,7 +47644,7 @@ p21: : i13; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -47673,7 +47673,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -47733,9 +47733,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47759,7 +47759,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47778,7 +47778,7 @@ p21: : i13; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -47807,7 +47807,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -47879,9 +47879,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47905,7 +47905,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -47999,7 +47999,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -48032,7 +48032,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -48092,9 +48092,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48118,7 +48118,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48137,7 +48137,7 @@ p21: : i14; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -48166,7 +48166,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -48226,9 +48226,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48252,7 +48252,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48271,7 +48271,7 @@ p21: : i14; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -48300,7 +48300,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -48372,9 +48372,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48423,12 +48423,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48452,7 +48452,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48471,7 +48471,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -48504,7 +48504,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -48564,9 +48564,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48590,7 +48590,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48609,7 +48609,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -48638,7 +48638,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -48698,9 +48698,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48724,7 +48724,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48743,7 +48743,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -48772,7 +48772,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -48832,9 +48832,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48858,7 +48858,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48877,7 +48877,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -48906,7 +48906,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -48966,9 +48966,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -48992,7 +48992,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49011,7 +49011,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -49040,7 +49040,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -49112,9 +49112,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49163,12 +49163,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49192,7 +49192,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49282,7 +49282,7 @@ p21: i7; ; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -49315,7 +49315,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -49375,9 +49375,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49401,7 +49401,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49420,7 +49420,7 @@ p21: : i15; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -49449,7 +49449,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -49509,9 +49509,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49535,7 +49535,7 @@ p21: : Ship, Base; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49554,7 +49554,7 @@ p21: : i15; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -49583,7 +49583,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -49655,9 +49655,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49706,12 +49706,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49731,7 +49731,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49821,7 +49821,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -49854,7 +49854,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -49914,9 +49914,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49940,7 +49940,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -49959,7 +49959,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -49988,7 +49988,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -50048,9 +50048,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50074,7 +50074,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50093,7 +50093,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -50122,7 +50122,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -50182,9 +50182,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50208,7 +50208,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50227,7 +50227,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -50256,7 +50256,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -50320,9 +50320,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50346,7 +50346,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50365,7 +50365,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -50394,7 +50394,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -50466,9 +50466,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50492,7 +50492,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50596,7 +50596,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -50629,7 +50629,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -50689,9 +50689,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50715,7 +50715,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50734,7 +50734,7 @@ p21: : i17; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -50763,7 +50763,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -50823,9 +50823,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50849,7 +50849,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50868,7 +50868,7 @@ p21: : i17; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -50897,7 +50897,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -50961,9 +50961,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -50987,7 +50987,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -51006,7 +51006,7 @@ p21: : i17; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -51035,7 +51035,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -51095,9 +51095,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -51121,7 +51121,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -51140,7 +51140,7 @@ p21: : i17; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -51169,7 +51169,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -51277,9 +51277,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -51328,12 +51328,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -51356,7 +51356,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -51448,9 +51448,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -51477,7 +51477,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -51569,9 +51569,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -51598,7 +51598,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -51690,9 +51690,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -51719,7 +51719,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -51811,9 +51811,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -51840,7 +51840,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -51948,9 +51948,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -51973,7 +51973,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -52065,9 +52065,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -52090,7 +52090,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -52182,9 +52182,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -52207,7 +52207,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -52299,9 +52299,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -52324,7 +52324,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -52420,9 +52420,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -52445,7 +52445,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -52517,9 +52517,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -52568,7 +52568,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -52578,7 +52578,7 @@ p21: : Mine; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -52594,7 +52594,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -52631,7 +52631,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -52691,9 +52691,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -52717,7 +52717,7 @@ p21: : Mine; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -52733,7 +52733,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -52762,7 +52762,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -52822,9 +52822,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -52848,7 +52848,7 @@ p21: : Mine; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -52864,7 +52864,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -52893,7 +52893,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -52965,9 +52965,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53016,7 +53016,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -53026,7 +53026,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53045,7 +53045,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -53078,7 +53078,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -53138,9 +53138,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53164,7 +53164,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53183,7 +53183,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -53212,7 +53212,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -53272,9 +53272,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53298,7 +53298,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53317,7 +53317,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -53346,7 +53346,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -53406,9 +53406,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53432,7 +53432,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53451,7 +53451,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -53480,7 +53480,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -53540,9 +53540,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53566,7 +53566,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53585,7 +53585,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -53614,7 +53614,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -53686,9 +53686,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53737,12 +53737,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53762,7 +53762,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53781,7 +53781,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -53814,7 +53814,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -53874,9 +53874,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53900,7 +53900,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -53919,7 +53919,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -53948,7 +53948,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -54008,9 +54008,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54034,7 +54034,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54053,7 +54053,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -54082,7 +54082,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -54142,9 +54142,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54168,7 +54168,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54187,7 +54187,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -54216,7 +54216,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -54276,9 +54276,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54302,7 +54302,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54321,7 +54321,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -54350,7 +54350,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -54418,9 +54418,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54444,7 +54444,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54463,7 +54463,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -54496,7 +54496,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -54556,9 +54556,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54582,7 +54582,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54601,7 +54601,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -54630,7 +54630,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -54690,9 +54690,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54716,7 +54716,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54735,7 +54735,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -54764,7 +54764,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -54824,9 +54824,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54850,7 +54850,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54869,7 +54869,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -54898,7 +54898,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -54958,9 +54958,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -54984,7 +54984,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55003,7 +55003,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -55032,7 +55032,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -55104,9 +55104,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55126,7 +55126,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55145,7 +55145,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -55178,7 +55178,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -55238,9 +55238,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55260,7 +55260,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55279,7 +55279,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -55308,7 +55308,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -55368,9 +55368,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55390,7 +55390,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55409,7 +55409,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -55438,7 +55438,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -55498,9 +55498,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55520,7 +55520,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55539,7 +55539,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -55572,7 +55572,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -55632,9 +55632,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55654,7 +55654,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55673,7 +55673,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -55702,7 +55702,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -55762,9 +55762,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55784,7 +55784,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55803,7 +55803,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -55832,7 +55832,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -55904,9 +55904,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55926,7 +55926,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -55942,7 +55942,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -55981,7 +55981,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -56041,9 +56041,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56063,7 +56063,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56079,7 +56079,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -56114,7 +56114,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -56174,9 +56174,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56196,7 +56196,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56212,7 +56212,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -56247,7 +56247,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -56307,9 +56307,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56329,7 +56329,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56345,7 +56345,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -56380,7 +56380,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -56440,9 +56440,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56462,7 +56462,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56478,7 +56478,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -56513,7 +56513,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -56585,9 +56585,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56607,7 +56607,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56626,7 +56626,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -56659,7 +56659,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -56723,9 +56723,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56745,7 +56745,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56764,7 +56764,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -56793,7 +56793,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -56853,9 +56853,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56875,7 +56875,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -56894,7 +56894,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -56923,7 +56923,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -56987,9 +56987,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57009,7 +57009,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57028,7 +57028,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -57057,7 +57057,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -57117,9 +57117,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57139,7 +57139,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57158,7 +57158,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -57187,7 +57187,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -57255,9 +57255,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57277,7 +57277,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57296,7 +57296,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -57329,7 +57329,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -57389,9 +57389,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57411,7 +57411,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57430,7 +57430,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -57459,7 +57459,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -57523,9 +57523,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57545,7 +57545,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57564,7 +57564,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -57593,7 +57593,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -57657,9 +57657,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57679,7 +57679,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57698,7 +57698,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -57727,7 +57727,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -57791,9 +57791,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57813,7 +57813,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57832,7 +57832,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -57861,7 +57861,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -57933,9 +57933,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -57984,12 +57984,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58009,7 +58009,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58113,7 +58113,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -58146,7 +58146,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -58210,9 +58210,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58236,7 +58236,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58255,7 +58255,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -58284,7 +58284,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -58344,9 +58344,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58370,7 +58370,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58389,7 +58389,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -58418,7 +58418,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -58482,9 +58482,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58508,7 +58508,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58527,7 +58527,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -58556,7 +58556,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -58616,9 +58616,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58642,7 +58642,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58661,7 +58661,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -58690,7 +58690,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -58750,9 +58750,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58776,7 +58776,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58795,7 +58795,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -58824,7 +58824,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -58888,9 +58888,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58914,7 +58914,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -58933,7 +58933,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -58962,7 +58962,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -59026,9 +59026,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59052,7 +59052,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59071,7 +59071,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -59100,7 +59100,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -59164,9 +59164,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59190,7 +59190,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59209,7 +59209,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -59238,7 +59238,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -59302,9 +59302,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59328,7 +59328,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59347,7 +59347,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -59376,7 +59376,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -59448,9 +59448,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59470,7 +59470,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59489,7 +59489,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -59522,7 +59522,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -59582,9 +59582,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59604,7 +59604,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59623,7 +59623,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -59652,7 +59652,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -59712,9 +59712,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59734,7 +59734,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59753,7 +59753,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -59782,7 +59782,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -59854,9 +59854,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59905,12 +59905,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -59953,7 +59953,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -59966,7 +59966,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60056,7 +60056,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -60089,7 +60089,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -60149,9 +60149,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60175,7 +60175,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60194,7 +60194,7 @@ p21: : i19; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -60223,7 +60223,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -60283,9 +60283,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60309,7 +60309,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60328,7 +60328,7 @@ p21: : i19; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -60357,7 +60357,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -60417,9 +60417,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60443,7 +60443,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60462,7 +60462,7 @@ p21: : i19; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -60491,7 +60491,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -60551,9 +60551,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60577,7 +60577,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60596,7 +60596,7 @@ p21: : i19; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -60625,7 +60625,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -60697,9 +60697,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60719,7 +60719,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60823,7 +60823,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -60856,7 +60856,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -60916,9 +60916,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60938,7 +60938,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -60957,7 +60957,7 @@ p21: : i20; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -60986,7 +60986,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -61046,9 +61046,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61068,7 +61068,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61087,7 +61087,7 @@ p21: : i20; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -61116,7 +61116,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -61188,9 +61188,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61239,12 +61239,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61287,7 +61287,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -61300,7 +61300,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61319,7 +61319,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -61352,7 +61352,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -61412,9 +61412,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61438,7 +61438,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61457,7 +61457,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -61486,7 +61486,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -61546,9 +61546,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61572,7 +61572,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61591,7 +61591,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -61620,7 +61620,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -61680,9 +61680,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61706,7 +61706,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61725,7 +61725,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -61754,7 +61754,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -61814,9 +61814,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61840,7 +61840,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61859,7 +61859,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -61888,7 +61888,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -61960,9 +61960,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -61982,7 +61982,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62072,7 +62072,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -62109,7 +62109,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -62169,9 +62169,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62191,7 +62191,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62210,7 +62210,7 @@ p21: : i21; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -62239,7 +62239,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -62299,9 +62299,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62321,7 +62321,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62340,7 +62340,7 @@ p21: : i21; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -62369,7 +62369,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -62441,9 +62441,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62463,7 +62463,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62553,7 +62553,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -62590,7 +62590,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -62650,9 +62650,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62672,7 +62672,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62691,7 +62691,7 @@ p21: : i22; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -62720,7 +62720,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -62780,9 +62780,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62806,7 +62806,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62825,7 +62825,7 @@ p21: : i22; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -62854,7 +62854,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -62922,9 +62922,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62944,7 +62944,7 @@ p21: : Ship; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -62960,7 +62960,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -62997,7 +62997,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -63057,9 +63057,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63079,7 +63079,7 @@ p21: : Ship; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63095,7 +63095,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -63124,7 +63124,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -63184,9 +63184,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63206,7 +63206,7 @@ p21: : Ship; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63222,7 +63222,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -63251,7 +63251,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -63319,9 +63319,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63336,7 +63336,7 @@ p21: : i37; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63385,7 +63385,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -63395,7 +63395,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63414,7 +63414,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -63447,7 +63447,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -63507,9 +63507,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63524,7 +63524,7 @@ p21: : i37; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63548,7 +63548,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63567,7 +63567,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -63596,7 +63596,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -63656,9 +63656,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63673,7 +63673,7 @@ p21: : i37; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63697,7 +63697,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63716,7 +63716,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -63745,7 +63745,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -63817,9 +63817,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63834,7 +63834,7 @@ p21: : i54; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63854,7 +63854,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63873,7 +63873,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -63910,7 +63910,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -63970,9 +63970,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -63987,7 +63987,7 @@ p21: : i54; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64007,7 +64007,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64026,7 +64026,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -64055,7 +64055,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -64115,9 +64115,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64132,7 +64132,7 @@ p21: : i54; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64152,7 +64152,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64171,7 +64171,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -64200,7 +64200,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -64336,9 +64336,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64361,7 +64361,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -64469,9 +64469,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64494,7 +64494,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -64630,9 +64630,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64655,7 +64655,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -64763,9 +64763,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64788,7 +64788,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -64860,9 +64860,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64908,7 +64908,7 @@ p21: : "1"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -64918,7 +64918,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -64937,7 +64937,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -64974,7 +64974,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -65046,9 +65046,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65094,7 +65094,7 @@ p21: : "2"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -65104,7 +65104,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65123,7 +65123,7 @@ p21: : i8; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -65160,7 +65160,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -65264,9 +65264,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65312,7 +65312,7 @@ p21: : "3"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -65325,7 +65325,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -65397,9 +65397,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65414,7 +65414,7 @@ p21: : i39; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65434,7 +65434,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65453,7 +65453,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -65490,7 +65490,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -65550,9 +65550,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65567,7 +65567,7 @@ p21: : i39; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65587,7 +65587,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65606,7 +65606,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -65635,7 +65635,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -65695,9 +65695,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65712,7 +65712,7 @@ p21: : i39; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65732,7 +65732,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65751,7 +65751,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -65780,7 +65780,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -65848,9 +65848,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65865,7 +65865,7 @@ p21: : i43; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65885,7 +65885,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -65904,7 +65904,7 @@ p21: : i6; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -65941,7 +65941,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -66001,9 +66001,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66018,7 +66018,7 @@ p21: : i43; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66038,7 +66038,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66057,7 +66057,7 @@ p21: : i6; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -66086,7 +66086,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -66146,9 +66146,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66163,7 +66163,7 @@ p21: : i43; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66183,7 +66183,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66202,7 +66202,7 @@ p21: : i6; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -66231,7 +66231,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -66299,9 +66299,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66316,7 +66316,7 @@ p21: : i44; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66336,7 +66336,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66355,7 +66355,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -66392,7 +66392,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -66452,9 +66452,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66469,7 +66469,7 @@ p21: : i44; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66489,7 +66489,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66508,7 +66508,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -66537,7 +66537,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -66597,9 +66597,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66614,7 +66614,7 @@ p21: : i44; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66634,7 +66634,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66653,7 +66653,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -66682,7 +66682,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -66750,9 +66750,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66767,7 +66767,7 @@ p21: : i40; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66787,7 +66787,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66806,7 +66806,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -66843,7 +66843,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -66903,9 +66903,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66920,7 +66920,7 @@ p21: : i40; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66940,7 +66940,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -66959,7 +66959,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -66988,7 +66988,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -67048,9 +67048,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67065,7 +67065,7 @@ p21: : i40; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67085,7 +67085,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67104,7 +67104,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -67133,7 +67133,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -67205,9 +67205,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67222,7 +67222,7 @@ p21: : i53; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67242,7 +67242,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67258,7 +67258,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -67295,7 +67295,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -67355,9 +67355,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67372,7 +67372,7 @@ p21: : i53; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67392,7 +67392,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67408,7 +67408,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -67437,7 +67437,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -67497,9 +67497,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67514,7 +67514,7 @@ p21: : i53; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67534,7 +67534,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67550,7 +67550,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -67579,7 +67579,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -67651,9 +67651,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67668,7 +67668,7 @@ p21: : i47; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67688,7 +67688,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67707,7 +67707,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -67744,7 +67744,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -67804,9 +67804,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67821,7 +67821,7 @@ p21: : i47; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67841,7 +67841,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67860,7 +67860,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -67889,7 +67889,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -67949,9 +67949,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67966,7 +67966,7 @@ p21: : i47; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -67986,7 +67986,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68005,7 +68005,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -68034,7 +68034,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -68106,9 +68106,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68123,7 +68123,7 @@ p21: : i38; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68143,7 +68143,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68162,7 +68162,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -68199,7 +68199,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -68259,9 +68259,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68276,7 +68276,7 @@ p21: : i38; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68296,7 +68296,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68315,7 +68315,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -68344,7 +68344,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -68404,9 +68404,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68421,7 +68421,7 @@ p21: : i38; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68441,7 +68441,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68460,7 +68460,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -68489,7 +68489,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -68553,9 +68553,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68570,7 +68570,7 @@ p21: : i56; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68590,7 +68590,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68609,7 +68609,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -68646,7 +68646,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -68706,9 +68706,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68723,7 +68723,7 @@ p21: : i56; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68743,7 +68743,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68762,7 +68762,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -68791,7 +68791,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -68851,9 +68851,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68868,7 +68868,7 @@ p21: : i56; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68888,7 +68888,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -68907,7 +68907,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -68936,7 +68936,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -69000,9 +69000,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69017,7 +69017,7 @@ p21: : i55; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69037,7 +69037,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69056,7 +69056,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -69093,7 +69093,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -69153,9 +69153,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69170,7 +69170,7 @@ p21: : i55; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69190,7 +69190,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69209,7 +69209,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -69238,7 +69238,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -69298,9 +69298,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69315,7 +69315,7 @@ p21: : i55; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69335,7 +69335,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69354,7 +69354,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -69383,7 +69383,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -69447,9 +69447,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69464,7 +69464,7 @@ p21: : i55; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69484,7 +69484,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69503,7 +69503,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -69540,7 +69540,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -69600,9 +69600,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69617,7 +69617,7 @@ p21: : i55; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69637,7 +69637,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69656,7 +69656,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -69685,7 +69685,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -69745,9 +69745,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69762,7 +69762,7 @@ p21: : i55; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69782,7 +69782,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69801,7 +69801,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -69830,7 +69830,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -69894,9 +69894,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69911,7 +69911,7 @@ p21: : i57; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69931,7 +69931,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -69950,7 +69950,7 @@ p21: : i19; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -69987,7 +69987,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -70047,9 +70047,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70064,7 +70064,7 @@ p21: : i57; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70084,7 +70084,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70103,7 +70103,7 @@ p21: : i19; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -70132,7 +70132,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -70192,9 +70192,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70209,7 +70209,7 @@ p21: : i57; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70229,7 +70229,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70248,7 +70248,7 @@ p21: : i19; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -70277,7 +70277,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -70341,9 +70341,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70358,7 +70358,7 @@ p21: : i59; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70378,7 +70378,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70397,7 +70397,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -70434,7 +70434,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -70494,9 +70494,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70511,7 +70511,7 @@ p21: : i59; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70531,7 +70531,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70550,7 +70550,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -70579,7 +70579,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -70639,9 +70639,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70656,7 +70656,7 @@ p21: : i59; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70676,7 +70676,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70695,7 +70695,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -70724,7 +70724,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -70796,9 +70796,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70813,7 +70813,7 @@ p21: : i49; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70833,7 +70833,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70852,7 +70852,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -70889,7 +70889,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -70949,9 +70949,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70966,7 +70966,7 @@ p21: : i49; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -70986,7 +70986,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71005,7 +71005,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -71034,7 +71034,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -71094,9 +71094,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71111,7 +71111,7 @@ p21: : i49; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71131,7 +71131,7 @@ p21: : Fighter; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71150,7 +71150,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -71179,7 +71179,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -71247,9 +71247,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71264,7 +71264,7 @@ p21: : i51; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71284,7 +71284,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71303,7 +71303,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -71340,7 +71340,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -71400,9 +71400,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71417,7 +71417,7 @@ p21: : i51; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71437,7 +71437,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71456,7 +71456,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -71485,7 +71485,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -71545,9 +71545,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71562,7 +71562,7 @@ p21: : i51; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71582,7 +71582,7 @@ p21: : Fighter, Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71601,7 +71601,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -71630,7 +71630,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -71730,9 +71730,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71747,7 +71747,7 @@ p21: : i18; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71770,7 +71770,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -71862,9 +71862,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71879,7 +71879,7 @@ p21: : i18; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -71902,7 +71902,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -71994,9 +71994,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72011,7 +72011,7 @@ p21: : i18; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72034,7 +72034,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -72134,9 +72134,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72151,7 +72151,7 @@ p21: : i16; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72174,7 +72174,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -72262,9 +72262,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72279,7 +72279,7 @@ p21: : i16; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72302,7 +72302,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -72394,9 +72394,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72411,7 +72411,7 @@ p21: : i16; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72434,7 +72434,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -72542,9 +72542,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72559,7 +72559,7 @@ p21: : i8; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72582,7 +72582,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -72674,9 +72674,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72691,7 +72691,7 @@ p21: : i8; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72714,7 +72714,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -72806,9 +72806,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72823,7 +72823,7 @@ p21: : i8; ; - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72846,7 +72846,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -72918,9 +72918,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72969,12 +72969,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -72998,7 +72998,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -73102,7 +73102,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -73139,7 +73139,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -73199,9 +73199,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -73225,7 +73225,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -73244,7 +73244,7 @@ p21: : i23; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -73273,7 +73273,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -73333,9 +73333,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -73359,7 +73359,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -73378,7 +73378,7 @@ p21: : i23; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -73407,7 +73407,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -73507,9 +73507,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -73558,12 +73558,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -73586,7 +73586,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -73678,9 +73678,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -73707,7 +73707,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -73799,9 +73799,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -73828,7 +73828,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -73928,9 +73928,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -73979,12 +73979,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -74011,7 +74011,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -74103,9 +74103,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -74132,7 +74132,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -74224,9 +74224,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -74253,7 +74253,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -74353,9 +74353,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -74404,12 +74404,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -74436,7 +74436,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -74528,9 +74528,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -74557,7 +74557,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -74649,9 +74649,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -74678,7 +74678,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -74778,9 +74778,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -74829,12 +74829,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -74857,7 +74857,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -74949,9 +74949,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -74978,7 +74978,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -75070,9 +75070,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -75099,7 +75099,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -75207,9 +75207,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -75258,12 +75258,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -75286,7 +75286,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -75378,9 +75378,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -75407,7 +75407,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -75499,9 +75499,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -75528,7 +75528,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -75636,9 +75636,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -75665,7 +75665,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -75757,9 +75757,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -75786,7 +75786,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -75878,9 +75878,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -75907,7 +75907,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -76095,9 +76095,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -76120,7 +76120,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -76292,9 +76292,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -76317,7 +76317,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -76493,9 +76493,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -76518,7 +76518,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -76674,9 +76674,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -76699,7 +76699,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -76843,9 +76843,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -76868,7 +76868,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -77012,9 +77012,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77037,7 +77037,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -77109,9 +77109,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77160,12 +77160,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77185,7 +77185,7 @@ p21: : Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77204,7 +77204,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -77241,7 +77241,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -77301,9 +77301,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77327,7 +77327,7 @@ p21: : Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77346,7 +77346,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -77375,7 +77375,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -77435,9 +77435,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77461,7 +77461,7 @@ p21: : Troop; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77480,7 +77480,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -77509,7 +77509,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -77581,9 +77581,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77632,12 +77632,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77657,7 +77657,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77676,7 +77676,7 @@ p21: : i20; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -77709,7 +77709,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -77769,9 +77769,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77795,7 +77795,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77814,7 +77814,7 @@ p21: : i20; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -77843,7 +77843,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -77903,9 +77903,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77929,7 +77929,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -77948,7 +77948,7 @@ p21: : i20; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -77977,7 +77977,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -78089,9 +78089,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -78140,12 +78140,12 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -78188,7 +78188,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -78204,7 +78204,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -78384,9 +78384,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -78409,7 +78409,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -78581,9 +78581,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -78610,7 +78610,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -78682,9 +78682,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -78707,7 +78707,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -78779,9 +78779,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -78804,7 +78804,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -78876,9 +78876,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -78898,7 +78898,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -78914,7 +78914,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -78953,7 +78953,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -79013,9 +79013,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79035,7 +79035,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79051,7 +79051,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -79086,7 +79086,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -79146,9 +79146,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79168,7 +79168,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79184,7 +79184,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -79219,7 +79219,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -79279,9 +79279,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79301,7 +79301,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79317,7 +79317,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -79352,7 +79352,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -79412,9 +79412,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79434,7 +79434,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.SeekingWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79450,7 +79450,7 @@ p21: : i18; DisplayEffect: - FrEee.Game.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.SeekerWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -79485,7 +79485,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -79557,9 +79557,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79579,7 +79579,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79669,7 +79669,7 @@ p21: i3; ; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -79706,7 +79706,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -79766,9 +79766,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79788,7 +79788,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79807,7 +79807,7 @@ p21: : i24; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -79836,7 +79836,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -79896,9 +79896,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79918,7 +79918,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -79937,7 +79937,7 @@ p21: : i24; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -79966,7 +79966,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -80038,9 +80038,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80060,7 +80060,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80079,7 +80079,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -80112,7 +80112,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -80172,9 +80172,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80194,7 +80194,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80213,7 +80213,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -80242,7 +80242,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -80302,9 +80302,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80324,7 +80324,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80343,7 +80343,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -80372,7 +80372,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -80432,9 +80432,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80458,7 +80458,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80477,7 +80477,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -80506,7 +80506,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -80566,9 +80566,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80592,7 +80592,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80611,7 +80611,7 @@ p21: : i16; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -80640,7 +80640,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -80712,9 +80712,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80734,7 +80734,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80753,7 +80753,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -80786,7 +80786,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -80846,9 +80846,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80868,7 +80868,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80887,7 +80887,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -80916,7 +80916,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -80976,9 +80976,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -80998,7 +80998,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -81017,7 +81017,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.BeamWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -81046,7 +81046,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -81118,9 +81118,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -81140,7 +81140,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -81159,7 +81159,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -81192,7 +81192,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -81252,9 +81252,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -81274,7 +81274,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -81293,7 +81293,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -81322,7 +81322,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -81382,9 +81382,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -81404,7 +81404,7 @@ p21: : Ship, Base, Satellite, Drone, WeaponPlatform; WeaponInfo: - FrEee.Game.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.DirectFireWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: AccuracyModifier: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -81423,7 +81423,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -81452,7 +81452,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -81548,9 +81548,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -81596,7 +81596,7 @@ p21: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -81609,7 +81609,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -81745,9 +81745,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -81770,7 +81770,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -81894,9 +81894,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -81923,7 +81923,7 @@ p21: : p16: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -82047,9 +82047,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82076,7 +82076,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -82144,9 +82144,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82166,7 +82166,7 @@ p21: : Drone; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82182,7 +82182,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -82211,7 +82211,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -82271,9 +82271,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82293,7 +82293,7 @@ p21: : Drone; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82309,7 +82309,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -82338,7 +82338,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -82398,9 +82398,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82420,7 +82420,7 @@ p21: : Drone; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82436,7 +82436,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -82465,7 +82465,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -82537,9 +82537,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82559,7 +82559,7 @@ p21: : Drone; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82575,7 +82575,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -82608,7 +82608,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -82668,9 +82668,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82690,7 +82690,7 @@ p21: : Drone; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82706,7 +82706,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -82735,7 +82735,7 @@ p21: : p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -82795,9 +82795,9 @@ p21: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: FrEee.Modding.Templates.ComponentTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82817,7 +82817,7 @@ p21: : Drone; WeaponInfo: - FrEee.Game.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.WarheadWeaponInfo, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p9: Damage: FrEee.Modding.ComputedFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -82833,7 +82833,7 @@ p21: : i0; DisplayEffect: - FrEee.Game.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Combat.ProjectileWeaponDisplayEffect, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Name: : @@ -82861,7 +82861,7 @@ p21: ; ; Cultures: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c14: : p3: @@ -83843,7 +83843,7 @@ p21: "Drone Carrier"; ; EmpireAIs: - System.Collections.Generic.List`1[[FrEee.Game.Objects.AI.AI`2[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[FrEee.Game.Objects.Space.Galaxy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.AI.AI`2[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[FrEee.Objects.Space.Galaxy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p4: @@ -83959,8 +83959,8 @@ from System.Collections.Generic import List\; clr.ImportExtensions(System.Linq)\; import FrEee\; import FrEee.Utility\; -from FrEee.Game.Objects.Commands import *\; -clr.ImportExtensions(FrEee.Utility.Extensions)\; +from FrEee.Objects.Commands import *\; +clr.ImportExtensions(FrEee.Extensions)\; from System import Console\; # alias the domain and context variables to avoid confusion @@ -84008,12 +84008,12 @@ for msg in empire.AINotes.Log: ""; ; FacilityTemplates: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c150: : p6: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Cost: @@ -84034,14 +84034,14 @@ for msg in empire.AINotes.Log: "Unknown"; ; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -84061,7 +84061,7 @@ for msg in empire.AINotes.Log: i656; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -84130,12 +84130,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -84152,7 +84152,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -84172,7 +84172,7 @@ for msg in empire.AINotes.Log: ; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -84229,12 +84229,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -84251,7 +84251,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -84267,7 +84267,7 @@ for msg in empire.AINotes.Log: i248; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; ID: : @@ -84324,12 +84324,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -84346,7 +84346,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -84373,7 +84373,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; ID: : @@ -84438,12 +84438,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -84460,7 +84460,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -84479,7 +84479,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; ID: : @@ -84536,12 +84536,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -84558,7 +84558,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -84577,7 +84577,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; ID: : @@ -84634,12 +84634,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -84656,7 +84656,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -84683,7 +84683,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; ID: : @@ -84748,12 +84748,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -84770,7 +84770,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -84789,7 +84789,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; ID: : @@ -84846,12 +84846,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -84868,7 +84868,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -84887,7 +84887,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; ID: : @@ -84944,12 +84944,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -84966,7 +84966,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -84989,7 +84989,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; ID: : @@ -85021,7 +85021,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; ID: : @@ -85049,7 +85049,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; ID: : @@ -85114,12 +85114,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -85136,7 +85136,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -85155,7 +85155,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; ID: : @@ -85183,7 +85183,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; ID: : @@ -85211,7 +85211,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; ID: : @@ -85268,12 +85268,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -85290,7 +85290,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -85309,7 +85309,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; ID: : @@ -85337,7 +85337,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; ID: : @@ -85365,7 +85365,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; ID: : @@ -85422,12 +85422,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -85444,7 +85444,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -85467,7 +85467,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; ID: : @@ -85536,12 +85536,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -85587,7 +85587,7 @@ for msg in empire.AINotes.Log: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -85597,7 +85597,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -85616,7 +85616,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; ID: : @@ -85673,12 +85673,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -85699,7 +85699,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -85718,7 +85718,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; ID: : @@ -85775,12 +85775,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -85801,7 +85801,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -85820,7 +85820,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; ID: : @@ -85889,12 +85889,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -85940,7 +85940,7 @@ for msg in empire.AINotes.Log: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -85950,7 +85950,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -85969,7 +85969,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; ID: : @@ -86026,12 +86026,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -86052,7 +86052,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -86071,7 +86071,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; ID: : @@ -86128,12 +86128,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -86154,7 +86154,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -86181,7 +86181,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; ID: : @@ -86250,12 +86250,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -86272,7 +86272,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -86299,7 +86299,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; ID: : @@ -86368,12 +86368,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -86394,7 +86394,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -86421,7 +86421,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; ID: : @@ -86490,12 +86490,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -86512,7 +86512,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -86539,7 +86539,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; ID: : @@ -86596,12 +86596,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -86618,7 +86618,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -86645,7 +86645,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; ID: : @@ -86702,12 +86702,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -86724,7 +86724,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -86751,7 +86751,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; ID: : @@ -86808,12 +86808,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -86830,7 +86830,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -86853,7 +86853,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; ID: : @@ -86910,12 +86910,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -86932,7 +86932,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -86955,7 +86955,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; ID: : @@ -87012,12 +87012,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -87034,7 +87034,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -87061,7 +87061,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; ID: : @@ -87118,12 +87118,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -87140,7 +87140,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -87163,7 +87163,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; ID: : @@ -87220,12 +87220,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -87242,7 +87242,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -87265,7 +87265,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; ID: : @@ -87322,12 +87322,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -87344,7 +87344,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -87367,7 +87367,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; ID: : @@ -87432,12 +87432,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -87454,7 +87454,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -87477,7 +87477,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; ID: : @@ -87534,12 +87534,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -87556,7 +87556,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -87583,7 +87583,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; ID: : @@ -87640,12 +87640,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -87662,7 +87662,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -87689,7 +87689,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; ID: : @@ -87758,12 +87758,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -87784,7 +87784,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -87807,7 +87807,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; ID: : @@ -87864,12 +87864,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -87890,7 +87890,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -87913,7 +87913,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; ID: : @@ -87970,12 +87970,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -87996,7 +87996,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -88023,7 +88023,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; ID: : @@ -88088,12 +88088,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -88114,7 +88114,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -88137,7 +88137,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; ID: : @@ -88194,12 +88194,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -88220,7 +88220,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -88243,7 +88243,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; ID: : @@ -88300,12 +88300,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -88326,7 +88326,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -88353,7 +88353,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; ID: : @@ -88418,12 +88418,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -88444,7 +88444,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -88467,7 +88467,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; ID: : @@ -88524,12 +88524,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -88550,7 +88550,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -88573,7 +88573,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; ID: : @@ -88630,12 +88630,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -88656,7 +88656,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -88683,7 +88683,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; ID: : @@ -88752,12 +88752,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -88778,7 +88778,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -88801,7 +88801,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; ID: : @@ -88858,12 +88858,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -88884,7 +88884,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -88907,7 +88907,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; ID: : @@ -88964,12 +88964,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -88990,7 +88990,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -89017,7 +89017,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; ID: : @@ -89082,12 +89082,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -89108,7 +89108,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -89131,7 +89131,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; ID: : @@ -89188,12 +89188,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -89214,7 +89214,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -89237,7 +89237,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; ID: : @@ -89294,12 +89294,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -89320,7 +89320,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -89347,7 +89347,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; ID: : @@ -89416,12 +89416,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -89442,7 +89442,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -89465,7 +89465,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; ID: : @@ -89522,12 +89522,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -89548,7 +89548,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -89571,7 +89571,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; ID: : @@ -89628,12 +89628,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -89654,7 +89654,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -89677,7 +89677,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; ID: : @@ -89709,7 +89709,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; ID: : @@ -89741,7 +89741,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; ID: : @@ -89810,12 +89810,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -89832,7 +89832,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -89855,7 +89855,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; ID: : @@ -89887,7 +89887,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; ID: : @@ -89919,7 +89919,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; ID: : @@ -89976,12 +89976,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -89998,7 +89998,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -90017,7 +90017,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; ID: : @@ -90049,7 +90049,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; ID: : @@ -90077,7 +90077,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; ID: : @@ -90134,12 +90134,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -90156,7 +90156,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -90179,7 +90179,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; ID: : @@ -90211,7 +90211,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; ID: : @@ -90243,7 +90243,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; ID: : @@ -90308,12 +90308,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -90330,7 +90330,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -90353,7 +90353,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; ID: : @@ -90385,7 +90385,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; ID: : @@ -90417,7 +90417,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; ID: : @@ -90474,12 +90474,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -90500,7 +90500,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -90519,7 +90519,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; ID: : @@ -90551,7 +90551,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; ID: : @@ -90583,7 +90583,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; ID: : @@ -90640,12 +90640,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -90666,7 +90666,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -90693,7 +90693,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; ID: : @@ -90758,12 +90758,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -90780,7 +90780,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -90803,7 +90803,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; ID: : @@ -90860,12 +90860,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -90882,7 +90882,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -90905,7 +90905,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; ID: : @@ -90962,12 +90962,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -90984,7 +90984,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -91011,7 +91011,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; ID: : @@ -91076,12 +91076,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -91098,7 +91098,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -91121,7 +91121,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; ID: : @@ -91178,12 +91178,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -91200,7 +91200,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -91223,7 +91223,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; ID: : @@ -91280,12 +91280,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -91302,7 +91302,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -91329,7 +91329,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; ID: : @@ -91398,12 +91398,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -91420,7 +91420,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -91443,7 +91443,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; ID: : @@ -91500,12 +91500,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -91522,7 +91522,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -91545,7 +91545,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; ID: : @@ -91602,12 +91602,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -91624,7 +91624,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -91651,7 +91651,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; ID: : @@ -91716,12 +91716,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -91738,7 +91738,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -91761,7 +91761,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; ID: : @@ -91818,12 +91818,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -91840,7 +91840,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -91863,7 +91863,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; ID: : @@ -91920,12 +91920,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -91942,7 +91942,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -91969,7 +91969,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; ID: : @@ -92034,12 +92034,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -92060,7 +92060,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -92083,7 +92083,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; ID: : @@ -92140,12 +92140,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -92166,7 +92166,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -92189,7 +92189,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; ID: : @@ -92246,12 +92246,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -92272,7 +92272,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -92299,7 +92299,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; ID: : @@ -92364,12 +92364,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -92386,7 +92386,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -92409,7 +92409,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; ID: : @@ -92466,12 +92466,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -92488,7 +92488,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -92511,7 +92511,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; ID: : @@ -92568,12 +92568,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -92590,7 +92590,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -92613,7 +92613,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; ID: : @@ -92645,7 +92645,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; ID: : @@ -92677,7 +92677,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; ID: : @@ -92742,12 +92742,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -92764,7 +92764,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -92787,7 +92787,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; ID: : @@ -92819,7 +92819,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; ID: : @@ -92851,7 +92851,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; ID: : @@ -92908,12 +92908,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -92930,7 +92930,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -92953,7 +92953,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; ID: : @@ -92985,7 +92985,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; ID: : @@ -93017,7 +93017,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; ID: : @@ -93074,12 +93074,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -93096,7 +93096,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -93123,7 +93123,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; ID: : @@ -93159,7 +93159,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; ID: : @@ -93224,12 +93224,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -93246,7 +93246,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -93269,7 +93269,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; ID: : @@ -93301,7 +93301,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; ID: : @@ -93358,12 +93358,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -93380,7 +93380,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -93403,7 +93403,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; ID: : @@ -93435,7 +93435,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; ID: : @@ -93492,12 +93492,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -93514,7 +93514,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -93545,7 +93545,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; ID: : @@ -93581,7 +93581,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; ID: : @@ -93617,7 +93617,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; ID: : @@ -93682,12 +93682,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -93704,7 +93704,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -93731,7 +93731,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; ID: : @@ -93763,7 +93763,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; ID: : @@ -93795,7 +93795,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; ID: : @@ -93852,12 +93852,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -93874,7 +93874,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -93897,7 +93897,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; ID: : @@ -93925,7 +93925,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; ID: : @@ -93953,7 +93953,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; ID: : @@ -94010,12 +94010,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -94032,7 +94032,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -94059,7 +94059,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i84; ID: : @@ -94124,12 +94124,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i84; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -94175,12 +94175,12 @@ for msg in empire.AINotes.Log: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -94204,7 +94204,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -94227,7 +94227,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i85; ID: : @@ -94284,12 +94284,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i85; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -94310,7 +94310,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -94333,7 +94333,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i86; ID: : @@ -94390,12 +94390,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i86; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -94416,7 +94416,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -94443,7 +94443,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i87; ID: : @@ -94508,12 +94508,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i87; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -94530,7 +94530,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -94553,7 +94553,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i88; ID: : @@ -94610,12 +94610,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i88; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -94632,7 +94632,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -94655,7 +94655,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i89; ID: : @@ -94712,12 +94712,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i89; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -94734,7 +94734,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -94761,7 +94761,7 @@ for msg in empire.AINotes.Log: i341; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i90; ID: : @@ -94830,12 +94830,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i90; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -94856,7 +94856,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -94879,7 +94879,7 @@ for msg in empire.AINotes.Log: i407; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i91; ID: : @@ -94936,12 +94936,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i91; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -94962,7 +94962,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -94985,7 +94985,7 @@ for msg in empire.AINotes.Log: i204; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i92; ID: : @@ -95042,12 +95042,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i92; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -95068,7 +95068,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -95095,7 +95095,7 @@ for msg in empire.AINotes.Log: i341; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i93; ID: : @@ -95160,12 +95160,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i93; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -95182,7 +95182,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -95205,7 +95205,7 @@ for msg in empire.AINotes.Log: i407; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i94; ID: : @@ -95262,12 +95262,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i94; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -95284,7 +95284,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -95307,7 +95307,7 @@ for msg in empire.AINotes.Log: i204; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i95; ID: : @@ -95364,12 +95364,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i95; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -95386,7 +95386,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -95413,7 +95413,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i96; ID: : @@ -95482,12 +95482,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i96; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -95504,7 +95504,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -95527,7 +95527,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i97; ID: : @@ -95584,12 +95584,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i97; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -95606,7 +95606,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -95629,7 +95629,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i98; ID: : @@ -95686,12 +95686,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i98; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -95708,7 +95708,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -95735,7 +95735,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i99; ID: : @@ -95800,12 +95800,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i99; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -95826,7 +95826,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -95849,7 +95849,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i100; ID: : @@ -95906,12 +95906,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i100; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -95932,7 +95932,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -95955,7 +95955,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i101; ID: : @@ -96012,12 +96012,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i101; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -96038,7 +96038,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -96065,7 +96065,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i102; ID: : @@ -96093,7 +96093,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i102; ID: : @@ -96125,7 +96125,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i102; ID: : @@ -96190,12 +96190,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i102; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -96212,7 +96212,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -96235,7 +96235,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i103; ID: : @@ -96263,7 +96263,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i103; ID: : @@ -96291,7 +96291,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i103; ID: : @@ -96348,12 +96348,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i103; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -96370,7 +96370,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -96393,7 +96393,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i104; ID: : @@ -96421,7 +96421,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i104; ID: : @@ -96449,7 +96449,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i104; ID: : @@ -96506,12 +96506,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i104; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -96528,7 +96528,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -96547,7 +96547,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i105; ID: : @@ -96612,12 +96612,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i105; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -96663,12 +96663,12 @@ for msg in empire.AINotes.Log: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -96717,7 +96717,7 @@ for msg in empire.AINotes.Log: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -96730,7 +96730,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -96749,7 +96749,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i106; ID: : @@ -96806,12 +96806,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i106; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -96832,7 +96832,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -96851,7 +96851,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i107; ID: : @@ -96908,12 +96908,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i107; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -96934,7 +96934,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -96953,7 +96953,7 @@ for msg in empire.AINotes.Log: i266; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; ID: : @@ -96981,7 +96981,7 @@ for msg in empire.AINotes.Log: i266; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; ID: : @@ -97009,7 +97009,7 @@ for msg in empire.AINotes.Log: i266; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; ID: : @@ -97037,7 +97037,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; ID: : @@ -97106,12 +97106,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -97128,7 +97128,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -97151,7 +97151,7 @@ for msg in empire.AINotes.Log: i1406; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; ID: : @@ -97183,7 +97183,7 @@ for msg in empire.AINotes.Log: i1406; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; ID: : @@ -97215,7 +97215,7 @@ for msg in empire.AINotes.Log: i1406; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; ID: : @@ -97243,7 +97243,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; ID: : @@ -97300,12 +97300,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -97322,7 +97322,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -97345,7 +97345,7 @@ for msg in empire.AINotes.Log: i1898; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; ID: : @@ -97377,7 +97377,7 @@ for msg in empire.AINotes.Log: i1898; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; ID: : @@ -97409,7 +97409,7 @@ for msg in empire.AINotes.Log: i1898; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; ID: : @@ -97437,7 +97437,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; ID: : @@ -97494,12 +97494,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -97516,7 +97516,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -97543,7 +97543,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i111; ID: : @@ -97608,12 +97608,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i111; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -97630,7 +97630,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c5: : p7: @@ -97657,7 +97657,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; ID: : @@ -97693,7 +97693,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; ID: : @@ -97729,7 +97729,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; ID: : @@ -97765,7 +97765,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; ID: : @@ -97801,7 +97801,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; ID: : @@ -97866,12 +97866,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -97888,7 +97888,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -97919,7 +97919,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i113; ID: : @@ -97980,12 +97980,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i113; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -98028,7 +98028,7 @@ for msg in empire.AINotes.Log: : "4"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -98038,7 +98038,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -98065,7 +98065,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i114; ID: : @@ -98134,12 +98134,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i114; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -98185,12 +98185,12 @@ for msg in empire.AINotes.Log: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -98239,7 +98239,7 @@ for msg in empire.AINotes.Log: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -98252,7 +98252,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -98275,7 +98275,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i115; ID: : @@ -98332,12 +98332,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i115; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -98358,7 +98358,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -98381,7 +98381,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i116; ID: : @@ -98438,12 +98438,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i116; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -98464,7 +98464,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -98491,7 +98491,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i117; ID: : @@ -98527,7 +98527,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i117; ID: : @@ -98563,7 +98563,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i117; ID: : @@ -98628,12 +98628,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i117; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -98654,7 +98654,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -98677,7 +98677,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i118; ID: : @@ -98709,7 +98709,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i118; ID: : @@ -98741,7 +98741,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i118; ID: : @@ -98798,12 +98798,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i118; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -98824,7 +98824,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -98847,7 +98847,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i119; ID: : @@ -98879,7 +98879,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i119; ID: : @@ -98911,7 +98911,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i119; ID: : @@ -98968,12 +98968,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i119; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -98994,7 +98994,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -99021,7 +99021,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i120; ID: : @@ -99086,12 +99086,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i120; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -99112,7 +99112,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -99135,7 +99135,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i121; ID: : @@ -99192,12 +99192,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i121; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -99218,7 +99218,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -99241,7 +99241,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i122; ID: : @@ -99298,12 +99298,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i122; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -99324,7 +99324,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -99343,7 +99343,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i123; ID: : @@ -99408,12 +99408,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i123; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -99430,7 +99430,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -99453,7 +99453,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i124; ID: : @@ -99510,12 +99510,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i124; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -99532,7 +99532,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -99555,7 +99555,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i125; ID: : @@ -99612,12 +99612,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i125; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -99634,7 +99634,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -99653,7 +99653,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i126; ID: : @@ -99722,12 +99722,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i126; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -99744,7 +99744,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -99763,7 +99763,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i127; ID: : @@ -99820,12 +99820,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i127; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -99842,7 +99842,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -99861,7 +99861,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i128; ID: : @@ -99918,12 +99918,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i128; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -99940,7 +99940,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -99967,7 +99967,7 @@ for msg in empire.AINotes.Log: ; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; ID: : @@ -99999,7 +99999,7 @@ for msg in empire.AINotes.Log: i2245; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; ID: : @@ -100031,7 +100031,7 @@ for msg in empire.AINotes.Log: i2245; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; ID: : @@ -100059,7 +100059,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; ID: : @@ -100128,12 +100128,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -100154,7 +100154,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -100177,7 +100177,7 @@ for msg in empire.AINotes.Log: i570; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; ID: : @@ -100209,7 +100209,7 @@ for msg in empire.AINotes.Log: i570; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; ID: : @@ -100241,7 +100241,7 @@ for msg in empire.AINotes.Log: i570; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; ID: : @@ -100269,7 +100269,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; ID: : @@ -100326,12 +100326,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -100352,7 +100352,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c4: : p7: @@ -100379,7 +100379,7 @@ for msg in empire.AINotes.Log: ; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; ID: : @@ -100411,7 +100411,7 @@ for msg in empire.AINotes.Log: i2259; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; ID: : @@ -100443,7 +100443,7 @@ for msg in empire.AINotes.Log: i2259; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; ID: : @@ -100471,7 +100471,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; ID: : @@ -100528,12 +100528,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -100554,7 +100554,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -100581,7 +100581,7 @@ for msg in empire.AINotes.Log: i341; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i132; ID: : @@ -100650,12 +100650,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i132; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -100672,7 +100672,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -100695,7 +100695,7 @@ for msg in empire.AINotes.Log: i407; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i133; ID: : @@ -100752,12 +100752,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i133; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -100774,7 +100774,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -100797,7 +100797,7 @@ for msg in empire.AINotes.Log: i204; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i134; ID: : @@ -100854,12 +100854,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i134; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -100876,7 +100876,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -100903,7 +100903,7 @@ for msg in empire.AINotes.Log: i341; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i135; ID: : @@ -100976,12 +100976,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i135; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -100998,7 +100998,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -101021,7 +101021,7 @@ for msg in empire.AINotes.Log: i407; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i136; ID: : @@ -101078,12 +101078,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i136; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -101100,7 +101100,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -101123,7 +101123,7 @@ for msg in empire.AINotes.Log: i204; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i137; ID: : @@ -101180,12 +101180,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i137; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -101202,7 +101202,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -101229,7 +101229,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i138; ID: : @@ -101294,12 +101294,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i138; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -101320,7 +101320,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -101339,7 +101339,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i139; ID: : @@ -101396,12 +101396,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i139; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -101422,7 +101422,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -101441,7 +101441,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i140; ID: : @@ -101498,12 +101498,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i140; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -101524,7 +101524,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -101551,7 +101551,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i141; ID: : @@ -101587,7 +101587,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i141; ID: : @@ -101623,7 +101623,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i141; ID: : @@ -101692,12 +101692,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i141; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -101718,7 +101718,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -101741,7 +101741,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i142; ID: : @@ -101773,7 +101773,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i142; ID: : @@ -101805,7 +101805,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i142; ID: : @@ -101862,12 +101862,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i142; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -101888,7 +101888,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -101911,7 +101911,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i143; ID: : @@ -101943,7 +101943,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i143; ID: : @@ -101975,7 +101975,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i143; ID: : @@ -102032,12 +102032,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i143; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -102058,7 +102058,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -102085,7 +102085,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i144; ID: : @@ -102154,12 +102154,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i144; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -102176,7 +102176,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -102199,7 +102199,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i145; ID: : @@ -102256,12 +102256,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i145; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -102278,7 +102278,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -102301,7 +102301,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i146; ID: : @@ -102358,12 +102358,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i146; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -102380,7 +102380,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -102407,7 +102407,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i147; ID: : @@ -102476,12 +102476,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i147; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -102498,7 +102498,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -102521,7 +102521,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i148; ID: : @@ -102578,12 +102578,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i148; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -102600,7 +102600,7 @@ for msg in empire.AINotes.Log: : p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -102623,7 +102623,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i149; ID: : @@ -102680,12 +102680,12 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i149; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -102715,7 +102715,7 @@ for msg in empire.AINotes.Log: : All; EmpireTemplates: - System.Collections.Generic.List`1[[FrEee.Game.Setup.EmpireTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Setup.EmpireTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p10: @@ -103063,14 +103063,14 @@ for msg in empire.AINotes.Log: : 50000; VictoryConditions: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IVictoryCondition, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IVictoryCondition, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.VictoryConditions.TotalEliminationVictoryCondition, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.VictoryConditions.TotalEliminationVictoryCondition, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p0: ; ; WarpPointPlacementStrategy: - FrEee.Game.Setup.WarpPointPlacementStrategies.EdgeAlignedWarpPointPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Setup.WarpPointPlacementStrategies.EdgeAlignedWarpPointPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p2: Description: : @@ -103096,7 +103096,7 @@ for msg in empire.AINotes.Log: : "Mid-Life"; StarSystemPlacementStrategy: - FrEee.Game.Setup.StarSystemPlacementStrategies.RandomStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Setup.StarSystemPlacementStrategies.RandomStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p0: ; StarSystemTemplateChances: @@ -103105,7 +103105,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -103171,7 +103171,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 7439499337417305482; @@ -103209,7 +103209,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 1899678370737027373; @@ -103275,7 +103275,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 2586982607903416845; @@ -103313,7 +103313,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 1826964651759018666; @@ -103351,7 +103351,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 4126516829893383581; @@ -103393,7 +103393,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 5398481770652465885; @@ -103427,7 +103427,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 6448183416667432625; @@ -103461,7 +103461,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 6731149648841166365; @@ -103495,7 +103495,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 4557906566128214081; @@ -103639,7 +103639,7 @@ for msg in empire.AINotes.Log: i247; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 4510775897146327665; @@ -103681,7 +103681,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 5012034615131724325; @@ -103727,7 +103727,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 4336644445440199093; @@ -103769,7 +103769,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 4303430544232696177; @@ -103864,7 +103864,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -103947,7 +103947,7 @@ for msg in empire.AINotes.Log: : i1; StellarSize: - FrEee.Game.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: Huge; ; ; @@ -104039,7 +104039,7 @@ for msg in empire.AINotes.Log: : i1; StellarSize: - FrEee.Game.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: Huge; ; ; @@ -104183,7 +104183,7 @@ for msg in empire.AINotes.Log: : "None"; StellarSize: - FrEee.Game.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: Tiny; ; TargetIndex: @@ -104215,7 +104215,7 @@ for msg in empire.AINotes.Log: : "None"; StellarSize: - FrEee.Game.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: Tiny; ; TargetIndex: @@ -104232,7 +104232,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -104320,7 +104320,7 @@ for msg in empire.AINotes.Log: : i1; StellarSize: - FrEee.Game.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: Huge; ; ; @@ -104401,7 +104401,7 @@ for msg in empire.AINotes.Log: : i1; StellarSize: - FrEee.Game.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: Huge; ; ; @@ -104433,7 +104433,7 @@ for msg in empire.AINotes.Log: : "None"; StellarSize: - FrEee.Game.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: Tiny; ; TargetIndex: @@ -104455,7 +104455,7 @@ for msg in empire.AINotes.Log: : "None"; StellarSize: - FrEee.Game.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: Tiny; ; TargetIndex: @@ -104477,7 +104477,7 @@ for msg in empire.AINotes.Log: : "None"; StellarSize: - FrEee.Game.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Enumerations.StellarSize, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: Tiny; ; TargetIndex: @@ -104494,7 +104494,7 @@ for msg in empire.AINotes.Log: : p8: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -104557,7 +104557,7 @@ for msg in empire.AINotes.Log: : p8: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -104652,7 +104652,7 @@ for msg in empire.AINotes.Log: : p8: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -104711,7 +104711,7 @@ for msg in empire.AINotes.Log: : p8: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -104770,7 +104770,7 @@ for msg in empire.AINotes.Log: : p8: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -104829,7 +104829,7 @@ for msg in empire.AINotes.Log: : p8: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -105001,7 +105001,7 @@ for msg in empire.AINotes.Log: : p8: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -105266,7 +105266,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -105444,7 +105444,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -105596,7 +105596,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -105761,7 +105761,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -105926,7 +105926,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -106085,7 +106085,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -106192,7 +106192,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -106355,7 +106355,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Interfaces.IAbilityObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ID: : 5328234969218981134; @@ -106383,7 +106383,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p7: @@ -106501,7 +106501,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -106535,7 +106535,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -106569,7 +106569,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -106603,7 +106603,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -106637,7 +106637,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -106727,7 +106727,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -106817,7 +106817,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -106907,7 +106907,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -106997,7 +106997,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -107087,7 +107087,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -107149,7 +107149,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -107183,7 +107183,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -107217,7 +107217,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -107251,7 +107251,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -107285,7 +107285,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -107383,7 +107383,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -107473,7 +107473,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -107507,7 +107507,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -107541,7 +107541,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -107575,7 +107575,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -107609,7 +107609,7 @@ for msg in empire.AINotes.Log: : p9: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -107663,7 +107663,7 @@ for msg in empire.AINotes.Log: : "Cluster"; StarSystemPlacementStrategy: - FrEee.Game.Setup.StarSystemPlacementStrategies.ClusteredStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Setup.StarSystemPlacementStrategies.ClusteredStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p0: ; StarSystemTemplateChances: @@ -107848,7 +107848,7 @@ for msg in empire.AINotes.Log: : "Galactic Edge"; StarSystemPlacementStrategy: - FrEee.Game.Setup.StarSystemPlacementStrategies.DiffuseStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Setup.StarSystemPlacementStrategies.DiffuseStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p0: ; StarSystemTemplateChances: @@ -108033,7 +108033,7 @@ for msg in empire.AINotes.Log: : "Spiral Arm"; StarSystemPlacementStrategy: - FrEee.Game.Setup.StarSystemPlacementStrategies.SpiralStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Setup.StarSystemPlacementStrategies.SpiralStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p0: ; StarSystemTemplateChances: @@ -108218,7 +108218,7 @@ for msg in empire.AINotes.Log: : "Grid"; StarSystemPlacementStrategy: - FrEee.Game.Setup.StarSystemPlacementStrategies.GridStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Setup.StarSystemPlacementStrategies.GridStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p0: ; StarSystemTemplateChances: @@ -108403,7 +108403,7 @@ for msg in empire.AINotes.Log: : "Ancient"; StarSystemPlacementStrategy: - FrEee.Game.Setup.StarSystemPlacementStrategies.RandomStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Setup.StarSystemPlacementStrategies.RandomStarSystemPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p0: ; StarSystemTemplateChances: @@ -108560,7 +108560,7 @@ for msg in empire.AINotes.Log: # This script will be imported into all mod scripts, including formulas."; ; HappinessModels: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.HappinessModel, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.HappinessModel, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c3: : p37: @@ -108906,12 +108906,12 @@ for msg in empire.AINotes.Log: ; ; Hulls: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IHull, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IHull, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c37: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -108934,7 +108934,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -109010,12 +109010,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -109029,10 +109029,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -109055,7 +109055,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -109131,12 +109131,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -109154,10 +109154,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -109180,7 +109180,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -109256,12 +109256,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -109279,10 +109279,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -109305,7 +109305,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; ID: : @@ -109381,12 +109381,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -109404,10 +109404,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -109474,12 +109474,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -109497,10 +109497,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -109567,12 +109567,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -109590,10 +109590,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -109660,12 +109660,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -109683,10 +109683,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -109753,12 +109753,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -109776,10 +109776,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -109806,7 +109806,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; ID: : @@ -109882,12 +109882,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -109905,10 +109905,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -109978,12 +109978,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -109997,10 +109997,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -110070,12 +110070,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -110089,10 +110089,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -110162,12 +110162,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -110185,10 +110185,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -110211,7 +110211,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -110247,7 +110247,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -110317,12 +110317,12 @@ for msg in empire.AINotes.Log: : 500; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -110368,17 +110368,17 @@ for msg in empire.AINotes.Log: : "0"; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -110397,7 +110397,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -110425,7 +110425,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -110495,12 +110495,12 @@ for msg in empire.AINotes.Log: : 1500; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -110518,10 +110518,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -110544,7 +110544,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -110572,7 +110572,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -110642,12 +110642,12 @@ for msg in empire.AINotes.Log: : 2500; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -110665,10 +110665,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -110738,12 +110738,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -110757,10 +110757,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -110830,12 +110830,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -110849,10 +110849,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -110922,12 +110922,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -110941,10 +110941,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; CanUseAuxiliaryControl: @@ -111014,12 +111014,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -111033,10 +111033,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -111059,7 +111059,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -111091,7 +111091,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -111161,12 +111161,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -111180,10 +111180,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -111202,7 +111202,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -111238,7 +111238,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -111308,12 +111308,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -111327,10 +111327,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -111349,7 +111349,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -111381,7 +111381,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -111451,12 +111451,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -111470,10 +111470,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p12: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Code: @@ -111525,12 +111525,12 @@ for msg in empire.AINotes.Log: : 80; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -111544,10 +111544,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p12: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Code: @@ -111599,12 +111599,12 @@ for msg in empire.AINotes.Log: : 100; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -111618,10 +111618,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p12: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Code: @@ -111673,12 +111673,12 @@ for msg in empire.AINotes.Log: : 120; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -111692,10 +111692,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c5: : p7: @@ -111718,7 +111718,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -111750,7 +111750,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -111782,7 +111782,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -111814,7 +111814,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -111846,7 +111846,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -111904,12 +111904,12 @@ for msg in empire.AINotes.Log: : 10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -111923,10 +111923,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c5: : p7: @@ -111945,7 +111945,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -111973,7 +111973,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -112001,7 +112001,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -112029,7 +112029,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -112057,7 +112057,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -112115,12 +112115,12 @@ for msg in empire.AINotes.Log: : 15; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -112134,10 +112134,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p11: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c5: : p7: @@ -112156,7 +112156,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -112184,7 +112184,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -112212,7 +112212,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -112240,7 +112240,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -112268,7 +112268,7 @@ for msg in empire.AINotes.Log: i243; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -112326,12 +112326,12 @@ for msg in empire.AINotes.Log: : 20; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -112345,10 +112345,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p12: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Code: @@ -112400,12 +112400,12 @@ for msg in empire.AINotes.Log: : 10; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -112419,10 +112419,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p12: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Code: @@ -112474,12 +112474,12 @@ for msg in empire.AINotes.Log: : 15; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -112497,10 +112497,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p12: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Code: @@ -112552,12 +112552,12 @@ for msg in empire.AINotes.Log: : 20; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -112575,10 +112575,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p12: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Code: @@ -112630,12 +112630,12 @@ for msg in empire.AINotes.Log: : 200; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -112649,10 +112649,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p12: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Code: @@ -112704,12 +112704,12 @@ for msg in empire.AINotes.Log: : 400; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -112727,10 +112727,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p12: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Code: @@ -112782,12 +112782,12 @@ for msg in empire.AINotes.Log: : 600; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -112805,10 +112805,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p14: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -112835,7 +112835,7 @@ for msg in empire.AINotes.Log: ; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -112867,7 +112867,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -112934,12 +112934,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -112953,10 +112953,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p14: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -112979,7 +112979,7 @@ for msg in empire.AINotes.Log: i2379; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -113007,7 +113007,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -113074,12 +113074,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -113093,10 +113093,10 @@ for msg in empire.AINotes.Log: ; ; ; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p14: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p7: @@ -113119,7 +113119,7 @@ for msg in empire.AINotes.Log: i2379; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -113147,7 +113147,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -113214,12 +113214,12 @@ for msg in empire.AINotes.Log: : 1; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.TechnologyRequirement, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p4: Container: - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; Description: FrEee.Modding.LiteralFormula`1[[System.String, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: @@ -113257,16 +113257,16 @@ for msg in empire.AINotes.Log: "(Unknown)"; ; Mounts: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c10: : p19: AbilityModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; AbilityPercentages: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; Code: @@ -113319,7 +113319,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; VehicleTypes: @@ -113335,7 +113335,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; WeaponTypes: - FrEee.Modding.LiteralFormula`1[[FrEee.Game.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Modding.LiteralFormula`1[[FrEee.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: Text: : @@ -113345,11 +113345,11 @@ for msg in empire.AINotes.Log: : p19: AbilityModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; AbilityPercentages: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; Code: @@ -113402,7 +113402,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; VehicleTypes: @@ -113418,17 +113418,17 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; WeaponTypes: - FrEee.Modding.LiteralFormula`1[[FrEee.Game.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Modding.LiteralFormula`1[[FrEee.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; : p19: AbilityModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; AbilityPercentages: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; Code: @@ -113481,7 +113481,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; VehicleTypes: @@ -113497,17 +113497,17 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; WeaponTypes: - FrEee.Modding.LiteralFormula`1[[FrEee.Game.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Modding.LiteralFormula`1[[FrEee.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; : p19: AbilityModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; AbilityPercentages: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; Code: @@ -113552,7 +113552,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; VehicleTypes: @@ -113568,17 +113568,17 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; WeaponTypes: - FrEee.Modding.LiteralFormula`1[[FrEee.Game.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Modding.LiteralFormula`1[[FrEee.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; : p19: AbilityModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; AbilityPercentages: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; Code: @@ -113623,7 +113623,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; VehicleTypes: @@ -113639,17 +113639,17 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; WeaponTypes: - FrEee.Modding.LiteralFormula`1[[FrEee.Game.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Modding.LiteralFormula`1[[FrEee.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; : p19: AbilityModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; AbilityPercentages: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; Code: @@ -113694,7 +113694,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; VehicleTypes: @@ -113710,17 +113710,17 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; WeaponTypes: - FrEee.Modding.LiteralFormula`1[[FrEee.Game.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Modding.LiteralFormula`1[[FrEee.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; : p19: AbilityModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; AbilityPercentages: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; Code: @@ -113765,7 +113765,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; VehicleTypes: @@ -113781,17 +113781,17 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; WeaponTypes: - FrEee.Modding.LiteralFormula`1[[FrEee.Game.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Modding.LiteralFormula`1[[FrEee.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; : p19: AbilityModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; AbilityPercentages: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; Code: @@ -113836,7 +113836,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; VehicleTypes: @@ -113852,17 +113852,17 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; WeaponTypes: - FrEee.Modding.LiteralFormula`1[[FrEee.Game.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Modding.LiteralFormula`1[[FrEee.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; : p19: AbilityModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; AbilityPercentages: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; Code: @@ -113907,7 +113907,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; VehicleTypes: @@ -113923,17 +113923,17 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; WeaponTypes: - FrEee.Modding.LiteralFormula`1[[FrEee.Game.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Modding.LiteralFormula`1[[FrEee.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; : p19: AbilityModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; AbilityPercentages: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; Code: @@ -113978,7 +113978,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; UnlockRequirements: - System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.Requirement`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; VehicleTypes: @@ -113994,7 +113994,7 @@ for msg in empire.AINotes.Log: FrEee.Modding.LiteralFormula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; WeaponTypes: - FrEee.Modding.LiteralFormula`1[[FrEee.Game.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Modding.LiteralFormula`1[[FrEee.Enumerations.WeaponTypes, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; ; @@ -114003,843 +114003,843 @@ for msg in empire.AINotes.Log: d1437: : "*UNKNOWN*"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Warp Point - Turbulence"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Star - Unstable"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Sector - Sight Obscuration"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Sector - Sensor Interference"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : "Sector - Shield Disruption"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : "Sector - Damage"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : "System - Sight Obscuration"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : "System - Sensor Interference"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : "System - Shield Disruption"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : "System - Damage"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : "Resource Generation - Minerals"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : "Resource Generation - Organics"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : "Resource Generation - Radioactives"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : "Point Generation - Research"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : "Point Generation - Intelligence"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : "Spaceport"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : "Palace"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; : "Supply Generation"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; : "Supply Generation - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; : "Planet - Change Minerals Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; : "Planet - Change Organics Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; : "Planet - Change Radioactives Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; : "Sector - Change Minerals Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; : "Sector - Change Organics Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; : "Sector - Change Radioactives Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; : "System - Change Minerals Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; : "System - Change Organics Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; : "System - Change Radioactives Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; : "Empire - Change Minerals Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; : "Empire - Change Organics Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; : "Empire - Change Radioactives Value"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; : "Planet - Change Conditions"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; : "Planet - Change Population Happiness"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; : "Planet - Change Ground Defense"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; : "System - Change Ground Defense"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; : "Empire - Change Ground Defense"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; : "Planet - Shield Generation"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; : "Shield Generation"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; : "Phased Shield Generation"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; : "Component Repair"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; : "Component Repair - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; : "Cargo Storage"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; : "Drop Troops"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; : "Launch/Recover Fighters"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; : "Lay Mines"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; : "Multiplex Tracking"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; : "Combat To Hit Offense Plus"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; : "Combat To Hit Defense Plus"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; : "Mine Sweeping"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; : "Medical Bay"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; : "Movement Bonus"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; : "Emissive Armor"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; : "Shield Regeneration"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; : "Master Computer"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; : "Cloak Level"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; : "Sensor Level"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; : "Emergency Resupply"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; : "Emergency Energy"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; : "Long Range Scanner"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; : "Open Warp Point Distance"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; : "Create Planet Size"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; : "Destroy Planet Size"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; : "Boarding Attack"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; : "Boarding Defense"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; : "Standard Ship Movement"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; : "Ship Bridge"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; : "Ship Auxiliary Control"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; : "Ship Life Support"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; : "Ship Crew Quarters"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; : "Scanner Jammer"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; : "Quantum Reactor"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; : "Supply Storage"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; : "Space Yard"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; : "Resource Storage - Mineral"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; : "Resource Storage - Organics"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; : "Resource Storage - Radioactives"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; : "Resource Gen Modifier Planet - Minerals"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; : "Resource Gen Modifier Planet - Organics"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; : "Resource Gen Modifier Planet - Radioactives"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; : "Resource Gen Modifier System - Minerals"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; : "Resource Gen Modifier System - Organics"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; : "Resource Gen Modifier System - Radioactives"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; : "Resource Gen Modifier Empire - Minerals"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; : "Resource Gen Modifier Empire - Organics"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; : "Resource Gen Modifier Empire - Radioactives"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i84; : "Planet Point Generation Modifier - Research"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i85; : "Planet Point Generation Modifier - Intelligence"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i86; : "System Point Generation Modifier - Research"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i87; : "System Point Generation Modifier - Intelligence"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i88; : "Empire Point Generation Modifier - Research"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i89; : "Empire Point Generation Modifier - Intelligence"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i90; : "Combat Modifier - Sector"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i91; : "Combat Modifier - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i92; : "Combat Modifier - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i93; : "Damage Modifier - Sector"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i94; : "Damage Modifier - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i95; : "Damage Modifier - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i96; : "Planet Value Change - Sector"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i97; : "Planet Value Change - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i98; : "Planet Value Change - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i99; : "Planet Conditions Change - Sector"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i100; : "Planet Conditions Change - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i101; : "Planet Conditions Change - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i102; : "Change Bad Event Chance - Sector"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i103; : "Change Bad Event Chance - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i104; : "Change Bad Event Chance - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i105; : "Change Bad Intelligence Chance - Sector"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i106; : "Change Bad Intelligence Chance - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i107; : "Change Bad Intelligence Chance - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; : "Change Population Happiness - Sector"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; : "Change Population Happiness - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; : "Change Population Happiness - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i111; : "Ship Training"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; : "Fleet Training"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i113; : "Ship Training - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i114; : "Fleet Training - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i115; : "Ship Training - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i116; : "Fleet Training - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i117; : "Modify Reproduction - Planet"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i118; : "Modify Reproduction - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i119; : "Modify Reproduction - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i120; : "Change Population - Planet"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i121; : "Change Population - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i122; : "Change Population - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i123; : "Plague Prevention - Planet"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i124; : "Plague Prevention - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i125; : "Plague Prevention - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i126; : "Resource Conversion"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i127; : "Resource Reclamation"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i128; : "Resource Reclamation - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; : "Resource Reclamation - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; : "Close Warp Point"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; : "Destroy Star"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i132; : "Create Star"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i133; : "Destroy Storm"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i134; : "Create Storm"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i135; : "Self-Destruct"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i136; : "Colonize Planet - Rock"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i137; : "Colonize Planet - Ice"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i138; : "Colonize Planet - Gas"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i139; : "Point-Defense"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i140; : "Armor"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i141; : "Launch/Recover Satellites"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i142; : "Launch Drones"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i143; : "Remote Resource Generation - Minerals"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i144; : "Remote Resource Generation - Organics"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i145; : "Remote Resource Generation - Radioactives"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i146; : "Armor Regeneration"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i147; : "Shield Generation From Damage"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i148; : "System - Movement Towards Center"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i149; : "System - Movement Random"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i150; : "System - Destructive Center"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i151; : "Destroy Nebulae"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i152; : "Create Nebulae"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i153; : "Destroy Black Hole"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i154; : "Create Black Hole"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i155; : "Stop Planet Destroyer"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i156; : "Stop Star Destroyer"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i157; : "Stop Nebulae Creator"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i158; : "Stop Black Hole Creator"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i159; : "Stop Open Warp Point"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i160; : "Stop Close Warp Point"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i161; : "Component Destroyed On Use"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i162; : "Space Object Destroyed On Use"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i163; : "Ancient Ruins"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i164; : "Ancient Ruins Unique"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i165; : "Combat Best Experience"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i166; : "Combat Movement"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i167; : "Supply Generation Per Turn"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i168; : "Solar Supply Generation"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i169; : "Extra Movement Generation"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i170; : "Planet - Change Atmosphere"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i171; : "Weapons Always Hit"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i172; : "Create Constructed Planet"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i173; : "Create Constructed Planet From Planet"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i174; : "Create Constructed Planet From Storm"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i175; : "Create Constructed Planet From Warp Point"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i176; : "Create Constructed Planet From Asteroids"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i177; : "Create Constructed Planet From Space"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i178; : "Constructed Planet Requirements"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i179; : "Modified Maintenance Cost"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i180; : "Long Range Scanner - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i181; : "Solar Resource Generation - Minerals"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i182; : "Solar Resource Generation - Organics"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i183; : "Solar Resource Generation - Radioactives"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i184; : "Reduced Maintenance Cost - Sector"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i185; : "Reduced Maintenance Cost - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i186; : "Reduced Maintenance Cost - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i187; : "Shield Modifier - Sector"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i188; : "Shield Modifier - System"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i189; : "Shield Modifier - Empire"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i190; : "Combat To Hit Offense Minus"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i191; : "Combat To Hit Defense Minus"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i192; : "Generate Points Minerals"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i193; : "Generate Points Organics"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i194; : "Generate Points Radioactives"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i195; : "Generate Points Research"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i196; : "Generate Points Intelligence"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i197; : "Supply Cost"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i198; : "No Plagues"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i199; : "Luck"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i200; : "No Spaceports"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i201; : "Vehicle Speed"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i202; : "Galaxy Seen"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i203; : "Planet Storage Space"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i204; : "Planetary SY Rate"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i205; : "Tech Area"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i206; : "Population Emotionless"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i207; : "Breakthrough Chance"; - FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i208; : "Tiny"; @@ -115332,8 +115332,8 @@ for msg in empire.AINotes.Log: FrEee.Modding.Templates.RandomAbilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : - "Generic FrEee.Game.Objects.Space.Planet 1"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 1"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115350,7 +115350,7 @@ for msg in empire.AINotes.Log: : "p0001"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115367,7 +115367,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 1"; + "Generic FrEee.Objects.Space.Planet 1"; StoredResources: : d0: @@ -115390,15 +115390,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 2"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 2"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115415,7 +115415,7 @@ for msg in empire.AINotes.Log: : "p0002"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115432,7 +115432,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 2"; + "Generic FrEee.Objects.Space.Planet 2"; StoredResources: : d0: @@ -115451,15 +115451,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 3"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 3"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115476,7 +115476,7 @@ for msg in empire.AINotes.Log: : "p0003"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115493,7 +115493,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 3"; + "Generic FrEee.Objects.Space.Planet 3"; StoredResources: : d0: @@ -115512,15 +115512,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 4"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 4"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115537,7 +115537,7 @@ for msg in empire.AINotes.Log: : "p0004"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115554,7 +115554,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 4"; + "Generic FrEee.Objects.Space.Planet 4"; StoredResources: : d0: @@ -115573,15 +115573,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 5"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 5"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115598,7 +115598,7 @@ for msg in empire.AINotes.Log: : "p0005"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115615,7 +115615,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 5"; + "Generic FrEee.Objects.Space.Planet 5"; StoredResources: : d0: @@ -115634,15 +115634,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 6"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 6"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115659,7 +115659,7 @@ for msg in empire.AINotes.Log: : "p0006"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115676,7 +115676,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 6"; + "Generic FrEee.Objects.Space.Planet 6"; StoredResources: : d0: @@ -115699,15 +115699,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 7"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 7"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115724,7 +115724,7 @@ for msg in empire.AINotes.Log: : "p0007"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115741,7 +115741,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 7"; + "Generic FrEee.Objects.Space.Planet 7"; StoredResources: : d0: @@ -115760,15 +115760,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 8"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 8"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115785,7 +115785,7 @@ for msg in empire.AINotes.Log: : "p0008"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115802,7 +115802,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 8"; + "Generic FrEee.Objects.Space.Planet 8"; StoredResources: : d0: @@ -115821,15 +115821,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 9"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 9"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115846,7 +115846,7 @@ for msg in empire.AINotes.Log: : "p0009"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115863,7 +115863,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 9"; + "Generic FrEee.Objects.Space.Planet 9"; StoredResources: : d0: @@ -115882,15 +115882,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 10"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 10"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115907,7 +115907,7 @@ for msg in empire.AINotes.Log: : "p0010"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115924,7 +115924,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 10"; + "Generic FrEee.Objects.Space.Planet 10"; StoredResources: : d0: @@ -115943,15 +115943,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 11"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 11"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -115968,7 +115968,7 @@ for msg in empire.AINotes.Log: : "p0011"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -115985,7 +115985,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 11"; + "Generic FrEee.Objects.Space.Planet 11"; StoredResources: : d0: @@ -116008,15 +116008,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 12"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 12"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116033,7 +116033,7 @@ for msg in empire.AINotes.Log: : "p0012"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116050,7 +116050,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 12"; + "Generic FrEee.Objects.Space.Planet 12"; StoredResources: : d0: @@ -116069,15 +116069,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 13"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 13"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116094,7 +116094,7 @@ for msg in empire.AINotes.Log: : "p0013"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116111,7 +116111,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 13"; + "Generic FrEee.Objects.Space.Planet 13"; StoredResources: : d0: @@ -116130,15 +116130,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 14"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 14"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116155,7 +116155,7 @@ for msg in empire.AINotes.Log: : "p0014"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116172,7 +116172,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 14"; + "Generic FrEee.Objects.Space.Planet 14"; StoredResources: : d0: @@ -116191,15 +116191,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 15"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 15"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116216,7 +116216,7 @@ for msg in empire.AINotes.Log: : "p0015"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116233,7 +116233,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 15"; + "Generic FrEee.Objects.Space.Planet 15"; StoredResources: : d0: @@ -116252,15 +116252,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 16"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 16"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116277,7 +116277,7 @@ for msg in empire.AINotes.Log: : "p0016"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116294,7 +116294,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 16"; + "Generic FrEee.Objects.Space.Planet 16"; StoredResources: : d0: @@ -116317,15 +116317,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 17"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 17"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116342,7 +116342,7 @@ for msg in empire.AINotes.Log: : "p0017"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116359,7 +116359,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 17"; + "Generic FrEee.Objects.Space.Planet 17"; StoredResources: : d0: @@ -116378,15 +116378,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 18"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 18"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116403,7 +116403,7 @@ for msg in empire.AINotes.Log: : "p0018"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116420,7 +116420,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 18"; + "Generic FrEee.Objects.Space.Planet 18"; StoredResources: : d0: @@ -116439,15 +116439,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 19"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 19"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116464,7 +116464,7 @@ for msg in empire.AINotes.Log: : "p0019"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116481,7 +116481,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 19"; + "Generic FrEee.Objects.Space.Planet 19"; StoredResources: : d0: @@ -116500,15 +116500,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 20"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 20"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116525,7 +116525,7 @@ for msg in empire.AINotes.Log: : "p0020"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116542,7 +116542,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 20"; + "Generic FrEee.Objects.Space.Planet 20"; StoredResources: : d0: @@ -116561,15 +116561,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 21"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 21"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116586,7 +116586,7 @@ for msg in empire.AINotes.Log: : "p0021"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116603,7 +116603,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 21"; + "Generic FrEee.Objects.Space.Planet 21"; StoredResources: : d0: @@ -116626,15 +116626,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 22"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 22"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116651,7 +116651,7 @@ for msg in empire.AINotes.Log: : "p0022"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116668,7 +116668,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 22"; + "Generic FrEee.Objects.Space.Planet 22"; StoredResources: : d0: @@ -116687,15 +116687,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 23"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 23"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116712,7 +116712,7 @@ for msg in empire.AINotes.Log: : "p0023"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116729,7 +116729,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 23"; + "Generic FrEee.Objects.Space.Planet 23"; StoredResources: : d0: @@ -116748,15 +116748,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 24"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 24"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116773,7 +116773,7 @@ for msg in empire.AINotes.Log: : "p0024"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116790,7 +116790,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 24"; + "Generic FrEee.Objects.Space.Planet 24"; StoredResources: : d0: @@ -116809,15 +116809,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 25"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 25"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116834,7 +116834,7 @@ for msg in empire.AINotes.Log: : "p0025"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116851,7 +116851,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 25"; + "Generic FrEee.Objects.Space.Planet 25"; StoredResources: : d0: @@ -116870,15 +116870,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 26"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 26"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116895,7 +116895,7 @@ for msg in empire.AINotes.Log: : "p0026"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116912,7 +116912,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 26"; + "Generic FrEee.Objects.Space.Planet 26"; StoredResources: : d0: @@ -116931,15 +116931,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 27"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 27"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -116956,7 +116956,7 @@ for msg in empire.AINotes.Log: : "p0027"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -116973,7 +116973,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 27"; + "Generic FrEee.Objects.Space.Planet 27"; StoredResources: : d0: @@ -116992,15 +116992,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 28"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 28"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117017,7 +117017,7 @@ for msg in empire.AINotes.Log: : "p0028"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117034,7 +117034,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 28"; + "Generic FrEee.Objects.Space.Planet 28"; StoredResources: : d0: @@ -117053,15 +117053,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 29"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 29"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117078,7 +117078,7 @@ for msg in empire.AINotes.Log: : "p0029"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117095,7 +117095,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 29"; + "Generic FrEee.Objects.Space.Planet 29"; StoredResources: : d0: @@ -117114,15 +117114,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 30"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 30"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117139,7 +117139,7 @@ for msg in empire.AINotes.Log: : "p0030"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117156,7 +117156,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 30"; + "Generic FrEee.Objects.Space.Planet 30"; StoredResources: : d0: @@ -117175,15 +117175,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 31"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 31"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117200,7 +117200,7 @@ for msg in empire.AINotes.Log: : "p0031"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117217,7 +117217,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 31"; + "Generic FrEee.Objects.Space.Planet 31"; StoredResources: : d0: @@ -117236,15 +117236,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 32"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 32"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117261,7 +117261,7 @@ for msg in empire.AINotes.Log: : "p0032"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117278,7 +117278,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 32"; + "Generic FrEee.Objects.Space.Planet 32"; StoredResources: : d0: @@ -117297,15 +117297,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 33"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 33"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117322,7 +117322,7 @@ for msg in empire.AINotes.Log: : "p0033"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117339,7 +117339,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 33"; + "Generic FrEee.Objects.Space.Planet 33"; StoredResources: : d0: @@ -117358,15 +117358,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 34"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 34"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117383,7 +117383,7 @@ for msg in empire.AINotes.Log: : "p0034"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117400,7 +117400,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 34"; + "Generic FrEee.Objects.Space.Planet 34"; StoredResources: : d0: @@ -117419,15 +117419,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 35"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 35"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117444,7 +117444,7 @@ for msg in empire.AINotes.Log: : "p0035"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117461,7 +117461,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 35"; + "Generic FrEee.Objects.Space.Planet 35"; StoredResources: : d0: @@ -117480,15 +117480,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 36"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 36"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117505,7 +117505,7 @@ for msg in empire.AINotes.Log: : "p0036"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117522,7 +117522,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 36"; + "Generic FrEee.Objects.Space.Planet 36"; StoredResources: : d0: @@ -117541,15 +117541,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 37"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 37"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117566,7 +117566,7 @@ for msg in empire.AINotes.Log: : "p0037"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117583,7 +117583,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 37"; + "Generic FrEee.Objects.Space.Planet 37"; StoredResources: : d0: @@ -117602,15 +117602,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 38"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 38"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117627,7 +117627,7 @@ for msg in empire.AINotes.Log: : "p0038"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117644,7 +117644,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 38"; + "Generic FrEee.Objects.Space.Planet 38"; StoredResources: : d0: @@ -117663,15 +117663,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 39"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 39"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117688,7 +117688,7 @@ for msg in empire.AINotes.Log: : "p0039"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117705,7 +117705,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 39"; + "Generic FrEee.Objects.Space.Planet 39"; StoredResources: : d0: @@ -117724,15 +117724,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 40"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 40"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117749,7 +117749,7 @@ for msg in empire.AINotes.Log: : "p0040"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117766,7 +117766,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 40"; + "Generic FrEee.Objects.Space.Planet 40"; StoredResources: : d0: @@ -117785,15 +117785,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 41"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 41"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117810,7 +117810,7 @@ for msg in empire.AINotes.Log: : "p0041"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117827,7 +117827,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 41"; + "Generic FrEee.Objects.Space.Planet 41"; StoredResources: : d0: @@ -117846,15 +117846,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 42"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 42"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117871,7 +117871,7 @@ for msg in empire.AINotes.Log: : "p0042"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117888,7 +117888,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 42"; + "Generic FrEee.Objects.Space.Planet 42"; StoredResources: : d0: @@ -117907,15 +117907,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 43"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 43"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117932,7 +117932,7 @@ for msg in empire.AINotes.Log: : "p0043"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -117949,7 +117949,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 43"; + "Generic FrEee.Objects.Space.Planet 43"; StoredResources: : d0: @@ -117968,15 +117968,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 44"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 44"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -117993,7 +117993,7 @@ for msg in empire.AINotes.Log: : "p0044"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118010,7 +118010,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 44"; + "Generic FrEee.Objects.Space.Planet 44"; StoredResources: : d0: @@ -118029,15 +118029,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 45"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 45"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118054,7 +118054,7 @@ for msg in empire.AINotes.Log: : "p0045"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118071,7 +118071,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 45"; + "Generic FrEee.Objects.Space.Planet 45"; StoredResources: : d0: @@ -118090,15 +118090,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 46"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 46"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118115,7 +118115,7 @@ for msg in empire.AINotes.Log: : "p0046"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118132,7 +118132,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 46"; + "Generic FrEee.Objects.Space.Planet 46"; StoredResources: : d0: @@ -118151,15 +118151,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 47"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 47"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118176,7 +118176,7 @@ for msg in empire.AINotes.Log: : "p0047"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118193,7 +118193,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 47"; + "Generic FrEee.Objects.Space.Planet 47"; StoredResources: : d0: @@ -118212,15 +118212,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 48"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 48"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118237,7 +118237,7 @@ for msg in empire.AINotes.Log: : "p0048"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118254,7 +118254,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 48"; + "Generic FrEee.Objects.Space.Planet 48"; StoredResources: : d0: @@ -118273,15 +118273,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 49"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 49"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118298,7 +118298,7 @@ for msg in empire.AINotes.Log: : "p0049"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118315,7 +118315,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 49"; + "Generic FrEee.Objects.Space.Planet 49"; StoredResources: : d0: @@ -118334,15 +118334,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 50"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 50"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118359,7 +118359,7 @@ for msg in empire.AINotes.Log: : "p0050"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118376,7 +118376,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 50"; + "Generic FrEee.Objects.Space.Planet 50"; StoredResources: : d0: @@ -118395,15 +118395,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 51"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 51"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118420,7 +118420,7 @@ for msg in empire.AINotes.Log: : "p0051"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118437,7 +118437,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 51"; + "Generic FrEee.Objects.Space.Planet 51"; StoredResources: : d0: @@ -118456,15 +118456,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 52"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 52"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118481,7 +118481,7 @@ for msg in empire.AINotes.Log: : "p0052"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118498,7 +118498,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 52"; + "Generic FrEee.Objects.Space.Planet 52"; StoredResources: : d0: @@ -118517,15 +118517,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 53"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 53"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118542,7 +118542,7 @@ for msg in empire.AINotes.Log: : "p0053"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118559,7 +118559,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 53"; + "Generic FrEee.Objects.Space.Planet 53"; StoredResources: : d0: @@ -118578,15 +118578,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 54"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 54"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118603,7 +118603,7 @@ for msg in empire.AINotes.Log: : "p0054"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118620,7 +118620,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 54"; + "Generic FrEee.Objects.Space.Planet 54"; StoredResources: : d0: @@ -118639,15 +118639,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 55"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 55"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118664,7 +118664,7 @@ for msg in empire.AINotes.Log: : "p0055"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118681,7 +118681,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 55"; + "Generic FrEee.Objects.Space.Planet 55"; StoredResources: : d0: @@ -118700,15 +118700,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 56"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 56"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118725,7 +118725,7 @@ for msg in empire.AINotes.Log: : "p0056"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118742,7 +118742,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 56"; + "Generic FrEee.Objects.Space.Planet 56"; StoredResources: : d0: @@ -118761,15 +118761,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 57"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 57"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118786,7 +118786,7 @@ for msg in empire.AINotes.Log: : "p0057"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118803,7 +118803,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 57"; + "Generic FrEee.Objects.Space.Planet 57"; StoredResources: : d0: @@ -118822,15 +118822,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 58"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 58"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118847,7 +118847,7 @@ for msg in empire.AINotes.Log: : "p0058"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118864,7 +118864,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 58"; + "Generic FrEee.Objects.Space.Planet 58"; StoredResources: : d0: @@ -118883,15 +118883,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 59"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 59"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118908,7 +118908,7 @@ for msg in empire.AINotes.Log: : "p0059"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118925,7 +118925,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 59"; + "Generic FrEee.Objects.Space.Planet 59"; StoredResources: : d0: @@ -118944,15 +118944,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 60"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 60"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -118969,7 +118969,7 @@ for msg in empire.AINotes.Log: : "p0060"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -118986,7 +118986,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 60"; + "Generic FrEee.Objects.Space.Planet 60"; StoredResources: : d0: @@ -119005,15 +119005,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 61"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 61"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119030,7 +119030,7 @@ for msg in empire.AINotes.Log: : "p0061"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119047,7 +119047,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 61"; + "Generic FrEee.Objects.Space.Planet 61"; StoredResources: : d0: @@ -119066,15 +119066,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 62"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 62"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119091,7 +119091,7 @@ for msg in empire.AINotes.Log: : "p0062"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119108,7 +119108,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 62"; + "Generic FrEee.Objects.Space.Planet 62"; StoredResources: : d0: @@ -119127,15 +119127,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 63"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 63"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119152,7 +119152,7 @@ for msg in empire.AINotes.Log: : "p0063"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119169,7 +119169,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 63"; + "Generic FrEee.Objects.Space.Planet 63"; StoredResources: : d0: @@ -119188,15 +119188,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 64"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 64"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119213,7 +119213,7 @@ for msg in empire.AINotes.Log: : "p0064"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119230,7 +119230,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 64"; + "Generic FrEee.Objects.Space.Planet 64"; StoredResources: : d0: @@ -119249,15 +119249,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 65"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 65"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119274,7 +119274,7 @@ for msg in empire.AINotes.Log: : "p0065"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119291,7 +119291,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 65"; + "Generic FrEee.Objects.Space.Planet 65"; StoredResources: : d0: @@ -119310,15 +119310,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 66"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 66"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119335,7 +119335,7 @@ for msg in empire.AINotes.Log: : "p0066"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119352,7 +119352,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 66"; + "Generic FrEee.Objects.Space.Planet 66"; StoredResources: : d0: @@ -119371,15 +119371,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 67"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 67"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119396,7 +119396,7 @@ for msg in empire.AINotes.Log: : "p0067"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119413,7 +119413,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 67"; + "Generic FrEee.Objects.Space.Planet 67"; StoredResources: : d0: @@ -119432,15 +119432,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 68"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 68"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119457,7 +119457,7 @@ for msg in empire.AINotes.Log: : "p0068"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119474,7 +119474,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 68"; + "Generic FrEee.Objects.Space.Planet 68"; StoredResources: : d0: @@ -119493,15 +119493,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 69"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 69"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119518,7 +119518,7 @@ for msg in empire.AINotes.Log: : "p0069"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119535,7 +119535,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 69"; + "Generic FrEee.Objects.Space.Planet 69"; StoredResources: : d0: @@ -119554,15 +119554,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 70"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 70"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119579,7 +119579,7 @@ for msg in empire.AINotes.Log: : "p0070"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119596,7 +119596,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 70"; + "Generic FrEee.Objects.Space.Planet 70"; StoredResources: : d0: @@ -119615,15 +119615,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 71"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 71"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119640,7 +119640,7 @@ for msg in empire.AINotes.Log: : "p0071"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119657,7 +119657,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 71"; + "Generic FrEee.Objects.Space.Planet 71"; StoredResources: : d0: @@ -119676,15 +119676,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 72"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 72"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119701,7 +119701,7 @@ for msg in empire.AINotes.Log: : "p0072"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119718,7 +119718,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 72"; + "Generic FrEee.Objects.Space.Planet 72"; StoredResources: : d0: @@ -119737,15 +119737,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 73"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 73"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119762,7 +119762,7 @@ for msg in empire.AINotes.Log: : "p0073"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119779,7 +119779,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 73"; + "Generic FrEee.Objects.Space.Planet 73"; StoredResources: : d0: @@ -119798,15 +119798,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 74"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 74"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119823,7 +119823,7 @@ for msg in empire.AINotes.Log: : "p0074"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119840,7 +119840,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 74"; + "Generic FrEee.Objects.Space.Planet 74"; StoredResources: : d0: @@ -119859,15 +119859,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 75"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 75"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119884,7 +119884,7 @@ for msg in empire.AINotes.Log: : "p0075"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119901,7 +119901,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 75"; + "Generic FrEee.Objects.Space.Planet 75"; StoredResources: : d0: @@ -119920,15 +119920,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 76"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 76"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -119945,7 +119945,7 @@ for msg in empire.AINotes.Log: : "p0076"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -119962,7 +119962,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 76"; + "Generic FrEee.Objects.Space.Planet 76"; StoredResources: : d0: @@ -119981,15 +119981,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 77"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 77"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120006,7 +120006,7 @@ for msg in empire.AINotes.Log: : "p0077"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120023,7 +120023,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 77"; + "Generic FrEee.Objects.Space.Planet 77"; StoredResources: : d0: @@ -120042,15 +120042,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 78"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 78"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120067,7 +120067,7 @@ for msg in empire.AINotes.Log: : "p0078"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120084,7 +120084,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 78"; + "Generic FrEee.Objects.Space.Planet 78"; StoredResources: : d0: @@ -120103,15 +120103,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 79"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 79"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120128,7 +120128,7 @@ for msg in empire.AINotes.Log: : "p0079"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120145,7 +120145,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 79"; + "Generic FrEee.Objects.Space.Planet 79"; StoredResources: : d0: @@ -120164,15 +120164,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 80"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 80"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120189,7 +120189,7 @@ for msg in empire.AINotes.Log: : "p0080"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120206,7 +120206,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 80"; + "Generic FrEee.Objects.Space.Planet 80"; StoredResources: : d0: @@ -120225,15 +120225,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 81"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 81"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120250,7 +120250,7 @@ for msg in empire.AINotes.Log: : "p0081"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120267,7 +120267,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 81"; + "Generic FrEee.Objects.Space.Planet 81"; StoredResources: : d0: @@ -120286,15 +120286,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 82"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 82"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120311,7 +120311,7 @@ for msg in empire.AINotes.Log: : "p0082"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120328,7 +120328,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 82"; + "Generic FrEee.Objects.Space.Planet 82"; StoredResources: : d0: @@ -120347,15 +120347,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 83"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 83"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120372,7 +120372,7 @@ for msg in empire.AINotes.Log: : "p0083"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120389,7 +120389,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 83"; + "Generic FrEee.Objects.Space.Planet 83"; StoredResources: : d0: @@ -120408,15 +120408,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 84"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 84"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120433,7 +120433,7 @@ for msg in empire.AINotes.Log: : "p0084"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120450,7 +120450,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 84"; + "Generic FrEee.Objects.Space.Planet 84"; StoredResources: : d0: @@ -120469,15 +120469,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 85"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 85"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120494,7 +120494,7 @@ for msg in empire.AINotes.Log: : "p0085"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120511,7 +120511,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 85"; + "Generic FrEee.Objects.Space.Planet 85"; StoredResources: : d0: @@ -120530,15 +120530,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 86"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 86"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120555,7 +120555,7 @@ for msg in empire.AINotes.Log: : "p0086"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120572,7 +120572,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 86"; + "Generic FrEee.Objects.Space.Planet 86"; StoredResources: : d0: @@ -120591,15 +120591,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 87"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 87"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120616,7 +120616,7 @@ for msg in empire.AINotes.Log: : "p0087"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120633,7 +120633,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 87"; + "Generic FrEee.Objects.Space.Planet 87"; StoredResources: : d0: @@ -120652,15 +120652,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 88"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 88"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120677,7 +120677,7 @@ for msg in empire.AINotes.Log: : "p0088"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120694,7 +120694,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 88"; + "Generic FrEee.Objects.Space.Planet 88"; StoredResources: : d0: @@ -120713,15 +120713,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 89"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 89"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120738,7 +120738,7 @@ for msg in empire.AINotes.Log: : "p0089"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120755,7 +120755,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 89"; + "Generic FrEee.Objects.Space.Planet 89"; StoredResources: : d0: @@ -120774,15 +120774,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 90"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 90"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120799,7 +120799,7 @@ for msg in empire.AINotes.Log: : "p0090"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120816,7 +120816,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 90"; + "Generic FrEee.Objects.Space.Planet 90"; StoredResources: : d0: @@ -120835,15 +120835,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 91"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 91"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120860,7 +120860,7 @@ for msg in empire.AINotes.Log: : "p0091"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120877,7 +120877,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 91"; + "Generic FrEee.Objects.Space.Planet 91"; StoredResources: : d0: @@ -120896,15 +120896,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 92"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 92"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120921,7 +120921,7 @@ for msg in empire.AINotes.Log: : "p0092"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120938,7 +120938,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 92"; + "Generic FrEee.Objects.Space.Planet 92"; StoredResources: : d0: @@ -120957,15 +120957,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 93"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 93"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -120982,7 +120982,7 @@ for msg in empire.AINotes.Log: : "p0093"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -120999,7 +120999,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 93"; + "Generic FrEee.Objects.Space.Planet 93"; StoredResources: : d0: @@ -121018,15 +121018,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 94"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 94"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121043,7 +121043,7 @@ for msg in empire.AINotes.Log: : "p0094"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121060,7 +121060,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 94"; + "Generic FrEee.Objects.Space.Planet 94"; StoredResources: : d0: @@ -121079,15 +121079,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 95"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 95"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121104,7 +121104,7 @@ for msg in empire.AINotes.Log: : "p0095"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121121,7 +121121,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 95"; + "Generic FrEee.Objects.Space.Planet 95"; StoredResources: : d0: @@ -121140,15 +121140,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 96"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 96"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121165,7 +121165,7 @@ for msg in empire.AINotes.Log: : "p0096"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121182,7 +121182,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 96"; + "Generic FrEee.Objects.Space.Planet 96"; StoredResources: : d0: @@ -121201,15 +121201,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 97"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 97"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121226,7 +121226,7 @@ for msg in empire.AINotes.Log: : "p0097"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121243,7 +121243,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 97"; + "Generic FrEee.Objects.Space.Planet 97"; StoredResources: : d0: @@ -121262,15 +121262,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 98"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 98"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121287,7 +121287,7 @@ for msg in empire.AINotes.Log: : "p0098"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121304,7 +121304,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 98"; + "Generic FrEee.Objects.Space.Planet 98"; StoredResources: : d0: @@ -121323,15 +121323,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 99"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 99"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121348,7 +121348,7 @@ for msg in empire.AINotes.Log: : "p0099"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121365,7 +121365,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 99"; + "Generic FrEee.Objects.Space.Planet 99"; StoredResources: : d0: @@ -121384,15 +121384,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 100"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 100"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121409,7 +121409,7 @@ for msg in empire.AINotes.Log: : "p0100"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121426,7 +121426,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 100"; + "Generic FrEee.Objects.Space.Planet 100"; StoredResources: : d0: @@ -121445,15 +121445,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 101"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 101"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121470,7 +121470,7 @@ for msg in empire.AINotes.Log: : "p0101"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121487,7 +121487,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 101"; + "Generic FrEee.Objects.Space.Planet 101"; StoredResources: : d0: @@ -121506,15 +121506,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 102"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 102"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121531,7 +121531,7 @@ for msg in empire.AINotes.Log: : "p0102"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121548,7 +121548,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 102"; + "Generic FrEee.Objects.Space.Planet 102"; StoredResources: : d0: @@ -121567,15 +121567,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 103"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 103"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121592,7 +121592,7 @@ for msg in empire.AINotes.Log: : "p0103"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121609,7 +121609,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 103"; + "Generic FrEee.Objects.Space.Planet 103"; StoredResources: : d0: @@ -121628,15 +121628,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 104"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 104"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121653,7 +121653,7 @@ for msg in empire.AINotes.Log: : "p0104"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121670,7 +121670,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 104"; + "Generic FrEee.Objects.Space.Planet 104"; StoredResources: : d0: @@ -121689,15 +121689,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 105"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 105"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121714,7 +121714,7 @@ for msg in empire.AINotes.Log: : "p0105"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121731,7 +121731,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 105"; + "Generic FrEee.Objects.Space.Planet 105"; StoredResources: : d0: @@ -121750,15 +121750,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 106"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 106"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121775,7 +121775,7 @@ for msg in empire.AINotes.Log: : "p0106"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121792,7 +121792,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 106"; + "Generic FrEee.Objects.Space.Planet 106"; StoredResources: : d0: @@ -121811,15 +121811,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 107"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 107"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121836,7 +121836,7 @@ for msg in empire.AINotes.Log: : "p0107"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121853,7 +121853,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 107"; + "Generic FrEee.Objects.Space.Planet 107"; StoredResources: : d0: @@ -121872,15 +121872,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 108"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 108"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121897,7 +121897,7 @@ for msg in empire.AINotes.Log: : "p0108"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121914,7 +121914,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 108"; + "Generic FrEee.Objects.Space.Planet 108"; StoredResources: : d0: @@ -121933,15 +121933,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 109"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 109"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -121958,7 +121958,7 @@ for msg in empire.AINotes.Log: : "p0109"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -121975,7 +121975,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 109"; + "Generic FrEee.Objects.Space.Planet 109"; StoredResources: : d0: @@ -121994,15 +121994,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 110"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 110"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122019,7 +122019,7 @@ for msg in empire.AINotes.Log: : "p0110"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122036,7 +122036,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 110"; + "Generic FrEee.Objects.Space.Planet 110"; StoredResources: : d0: @@ -122055,15 +122055,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 111"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 111"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122080,7 +122080,7 @@ for msg in empire.AINotes.Log: : "p0111"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122097,7 +122097,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 111"; + "Generic FrEee.Objects.Space.Planet 111"; StoredResources: : d0: @@ -122116,15 +122116,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 112"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 112"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122141,7 +122141,7 @@ for msg in empire.AINotes.Log: : "p0112"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122158,7 +122158,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 112"; + "Generic FrEee.Objects.Space.Planet 112"; StoredResources: : d0: @@ -122177,15 +122177,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 113"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 113"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122202,7 +122202,7 @@ for msg in empire.AINotes.Log: : "p0113"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122219,7 +122219,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 113"; + "Generic FrEee.Objects.Space.Planet 113"; StoredResources: : d0: @@ -122238,15 +122238,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 114"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 114"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122263,7 +122263,7 @@ for msg in empire.AINotes.Log: : "p0114"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122280,7 +122280,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 114"; + "Generic FrEee.Objects.Space.Planet 114"; StoredResources: : d0: @@ -122299,15 +122299,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 115"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 115"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122324,7 +122324,7 @@ for msg in empire.AINotes.Log: : "p0115"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122341,7 +122341,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 115"; + "Generic FrEee.Objects.Space.Planet 115"; StoredResources: : d0: @@ -122360,15 +122360,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 116"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 116"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122385,7 +122385,7 @@ for msg in empire.AINotes.Log: : "p0116"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122402,7 +122402,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 116"; + "Generic FrEee.Objects.Space.Planet 116"; StoredResources: : d0: @@ -122421,15 +122421,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 117"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 117"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122446,7 +122446,7 @@ for msg in empire.AINotes.Log: : "p0117"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122463,7 +122463,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 117"; + "Generic FrEee.Objects.Space.Planet 117"; StoredResources: : d0: @@ -122482,15 +122482,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 118"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 118"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122507,7 +122507,7 @@ for msg in empire.AINotes.Log: : "p0118"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122524,7 +122524,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 118"; + "Generic FrEee.Objects.Space.Planet 118"; StoredResources: : d0: @@ -122543,15 +122543,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 119"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 119"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122568,7 +122568,7 @@ for msg in empire.AINotes.Log: : "p0119"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122585,7 +122585,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 119"; + "Generic FrEee.Objects.Space.Planet 119"; StoredResources: : d0: @@ -122604,15 +122604,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 120"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 120"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122629,7 +122629,7 @@ for msg in empire.AINotes.Log: : "p0120"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122646,7 +122646,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 120"; + "Generic FrEee.Objects.Space.Planet 120"; StoredResources: : d0: @@ -122665,15 +122665,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 121"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 121"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122690,7 +122690,7 @@ for msg in empire.AINotes.Log: : "p0121"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122707,7 +122707,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 121"; + "Generic FrEee.Objects.Space.Planet 121"; StoredResources: : d0: @@ -122726,15 +122726,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 122"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 122"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122751,7 +122751,7 @@ for msg in empire.AINotes.Log: : "p0122"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122768,7 +122768,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 122"; + "Generic FrEee.Objects.Space.Planet 122"; StoredResources: : d0: @@ -122787,15 +122787,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 123"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 123"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122812,7 +122812,7 @@ for msg in empire.AINotes.Log: : "p0123"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122829,7 +122829,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 123"; + "Generic FrEee.Objects.Space.Planet 123"; StoredResources: : d0: @@ -122848,15 +122848,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 124"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 124"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122873,7 +122873,7 @@ for msg in empire.AINotes.Log: : "p0124"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122890,7 +122890,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 124"; + "Generic FrEee.Objects.Space.Planet 124"; StoredResources: : d0: @@ -122909,15 +122909,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 125"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 125"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122934,7 +122934,7 @@ for msg in empire.AINotes.Log: : "p0125"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -122951,7 +122951,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 125"; + "Generic FrEee.Objects.Space.Planet 125"; StoredResources: : d0: @@ -122970,15 +122970,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 126"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 126"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -122995,7 +122995,7 @@ for msg in empire.AINotes.Log: : "p0126"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123012,7 +123012,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 126"; + "Generic FrEee.Objects.Space.Planet 126"; StoredResources: : d0: @@ -123031,15 +123031,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 127"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 127"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123056,7 +123056,7 @@ for msg in empire.AINotes.Log: : "p0127"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123073,7 +123073,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 127"; + "Generic FrEee.Objects.Space.Planet 127"; StoredResources: : d0: @@ -123092,15 +123092,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 128"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 128"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123117,7 +123117,7 @@ for msg in empire.AINotes.Log: : "p0128"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123134,7 +123134,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 128"; + "Generic FrEee.Objects.Space.Planet 128"; StoredResources: : d0: @@ -123153,15 +123153,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 129"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 129"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123178,7 +123178,7 @@ for msg in empire.AINotes.Log: : "p0129"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123195,7 +123195,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 129"; + "Generic FrEee.Objects.Space.Planet 129"; StoredResources: : d0: @@ -123214,15 +123214,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 130"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 130"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123239,7 +123239,7 @@ for msg in empire.AINotes.Log: : "p0130"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123256,7 +123256,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 130"; + "Generic FrEee.Objects.Space.Planet 130"; StoredResources: : d0: @@ -123275,15 +123275,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 131"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 131"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123300,7 +123300,7 @@ for msg in empire.AINotes.Log: : "p0131"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123317,7 +123317,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 131"; + "Generic FrEee.Objects.Space.Planet 131"; StoredResources: : d0: @@ -123336,15 +123336,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 132"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 132"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123361,7 +123361,7 @@ for msg in empire.AINotes.Log: : "p0132"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123378,7 +123378,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 132"; + "Generic FrEee.Objects.Space.Planet 132"; StoredResources: : d0: @@ -123397,15 +123397,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 133"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 133"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123422,7 +123422,7 @@ for msg in empire.AINotes.Log: : "p0133"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123439,7 +123439,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 133"; + "Generic FrEee.Objects.Space.Planet 133"; StoredResources: : d0: @@ -123458,15 +123458,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 134"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 134"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123483,7 +123483,7 @@ for msg in empire.AINotes.Log: : "p0134"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123500,7 +123500,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 134"; + "Generic FrEee.Objects.Space.Planet 134"; StoredResources: : d0: @@ -123519,15 +123519,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 135"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 135"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123544,7 +123544,7 @@ for msg in empire.AINotes.Log: : "p0135"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123561,7 +123561,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 135"; + "Generic FrEee.Objects.Space.Planet 135"; StoredResources: : d0: @@ -123580,15 +123580,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 136"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 136"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123605,7 +123605,7 @@ for msg in empire.AINotes.Log: : "p0136"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123622,7 +123622,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 136"; + "Generic FrEee.Objects.Space.Planet 136"; StoredResources: : d0: @@ -123641,15 +123641,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 137"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 137"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123666,7 +123666,7 @@ for msg in empire.AINotes.Log: : "p0137"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123683,7 +123683,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 137"; + "Generic FrEee.Objects.Space.Planet 137"; StoredResources: : d0: @@ -123702,15 +123702,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 138"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 138"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123727,7 +123727,7 @@ for msg in empire.AINotes.Log: : "p0138"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123744,7 +123744,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 138"; + "Generic FrEee.Objects.Space.Planet 138"; StoredResources: : d0: @@ -123763,15 +123763,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 139"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 139"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123788,7 +123788,7 @@ for msg in empire.AINotes.Log: : "p0139"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123805,7 +123805,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 139"; + "Generic FrEee.Objects.Space.Planet 139"; StoredResources: : d0: @@ -123824,15 +123824,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 140"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 140"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123849,7 +123849,7 @@ for msg in empire.AINotes.Log: : "p0140"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123866,7 +123866,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 140"; + "Generic FrEee.Objects.Space.Planet 140"; StoredResources: : d0: @@ -123885,15 +123885,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 141"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 141"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123910,7 +123910,7 @@ for msg in empire.AINotes.Log: : "p0141"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123927,7 +123927,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 141"; + "Generic FrEee.Objects.Space.Planet 141"; StoredResources: : d0: @@ -123946,15 +123946,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 142"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 142"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -123971,7 +123971,7 @@ for msg in empire.AINotes.Log: : "p0142"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -123988,7 +123988,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 142"; + "Generic FrEee.Objects.Space.Planet 142"; StoredResources: : d0: @@ -124007,15 +124007,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 143"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 143"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124032,7 +124032,7 @@ for msg in empire.AINotes.Log: : "p0143"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124049,7 +124049,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 143"; + "Generic FrEee.Objects.Space.Planet 143"; StoredResources: : d0: @@ -124068,15 +124068,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 144"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 144"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124093,7 +124093,7 @@ for msg in empire.AINotes.Log: : "p0144"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124110,7 +124110,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 144"; + "Generic FrEee.Objects.Space.Planet 144"; StoredResources: : d0: @@ -124129,15 +124129,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 145"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 145"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124154,7 +124154,7 @@ for msg in empire.AINotes.Log: : "p0145"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124171,7 +124171,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 145"; + "Generic FrEee.Objects.Space.Planet 145"; StoredResources: : d0: @@ -124190,15 +124190,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 146"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 146"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124215,7 +124215,7 @@ for msg in empire.AINotes.Log: : "p0146"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124232,7 +124232,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 146"; + "Generic FrEee.Objects.Space.Planet 146"; StoredResources: : d0: @@ -124251,15 +124251,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 147"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 147"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124276,7 +124276,7 @@ for msg in empire.AINotes.Log: : "p0147"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124293,7 +124293,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 147"; + "Generic FrEee.Objects.Space.Planet 147"; StoredResources: : d0: @@ -124312,15 +124312,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 148"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 148"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124337,7 +124337,7 @@ for msg in empire.AINotes.Log: : "p0148"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124354,7 +124354,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 148"; + "Generic FrEee.Objects.Space.Planet 148"; StoredResources: : d0: @@ -124373,15 +124373,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 149"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 149"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124398,7 +124398,7 @@ for msg in empire.AINotes.Log: : "p0149"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124415,7 +124415,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 149"; + "Generic FrEee.Objects.Space.Planet 149"; StoredResources: : d0: @@ -124434,15 +124434,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 150"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 150"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124459,7 +124459,7 @@ for msg in empire.AINotes.Log: : "p0150"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124476,7 +124476,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 150"; + "Generic FrEee.Objects.Space.Planet 150"; StoredResources: : d0: @@ -124495,15 +124495,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 151"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 151"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124520,7 +124520,7 @@ for msg in empire.AINotes.Log: : "p0151"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124537,7 +124537,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 151"; + "Generic FrEee.Objects.Space.Planet 151"; StoredResources: : d0: @@ -124556,15 +124556,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 152"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 152"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124581,7 +124581,7 @@ for msg in empire.AINotes.Log: : "p0152"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124598,7 +124598,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 152"; + "Generic FrEee.Objects.Space.Planet 152"; StoredResources: : d0: @@ -124617,15 +124617,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 153"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 153"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124642,7 +124642,7 @@ for msg in empire.AINotes.Log: : "p0153"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124659,7 +124659,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 153"; + "Generic FrEee.Objects.Space.Planet 153"; StoredResources: : d0: @@ -124678,15 +124678,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 154"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 154"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124703,7 +124703,7 @@ for msg in empire.AINotes.Log: : "p0154"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124720,7 +124720,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 154"; + "Generic FrEee.Objects.Space.Planet 154"; StoredResources: : d0: @@ -124739,15 +124739,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 155"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 155"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124764,7 +124764,7 @@ for msg in empire.AINotes.Log: : "p0155"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124781,7 +124781,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 155"; + "Generic FrEee.Objects.Space.Planet 155"; StoredResources: : d0: @@ -124800,15 +124800,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 156"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 156"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124825,7 +124825,7 @@ for msg in empire.AINotes.Log: : "p0156"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124842,7 +124842,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 156"; + "Generic FrEee.Objects.Space.Planet 156"; StoredResources: : d0: @@ -124861,15 +124861,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 157"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 157"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124886,7 +124886,7 @@ for msg in empire.AINotes.Log: : "p0157"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124903,7 +124903,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 157"; + "Generic FrEee.Objects.Space.Planet 157"; StoredResources: : d0: @@ -124922,15 +124922,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 158"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 158"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -124947,7 +124947,7 @@ for msg in empire.AINotes.Log: : "p0158"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -124964,7 +124964,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 158"; + "Generic FrEee.Objects.Space.Planet 158"; StoredResources: : d0: @@ -124983,15 +124983,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 159"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 159"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125008,7 +125008,7 @@ for msg in empire.AINotes.Log: : "p0159"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125025,7 +125025,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 159"; + "Generic FrEee.Objects.Space.Planet 159"; StoredResources: : d0: @@ -125044,15 +125044,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 160"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 160"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125069,7 +125069,7 @@ for msg in empire.AINotes.Log: : "p0160"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125086,7 +125086,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 160"; + "Generic FrEee.Objects.Space.Planet 160"; StoredResources: : d0: @@ -125105,15 +125105,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 161"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 161"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125130,7 +125130,7 @@ for msg in empire.AINotes.Log: : "p0161"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125147,7 +125147,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 161"; + "Generic FrEee.Objects.Space.Planet 161"; StoredResources: : d0: @@ -125166,15 +125166,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 162"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 162"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125191,7 +125191,7 @@ for msg in empire.AINotes.Log: : "p0162"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125208,7 +125208,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 162"; + "Generic FrEee.Objects.Space.Planet 162"; StoredResources: : d0: @@ -125227,15 +125227,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 163"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 163"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125252,7 +125252,7 @@ for msg in empire.AINotes.Log: : "p0163"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125269,7 +125269,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 163"; + "Generic FrEee.Objects.Space.Planet 163"; StoredResources: : d0: @@ -125288,15 +125288,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 164"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 164"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125313,7 +125313,7 @@ for msg in empire.AINotes.Log: : "p0164"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125330,7 +125330,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 164"; + "Generic FrEee.Objects.Space.Planet 164"; StoredResources: : d0: @@ -125349,15 +125349,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 165"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 165"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125374,7 +125374,7 @@ for msg in empire.AINotes.Log: : "p0165"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125391,7 +125391,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 165"; + "Generic FrEee.Objects.Space.Planet 165"; StoredResources: : d0: @@ -125410,15 +125410,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 166"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 166"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125435,7 +125435,7 @@ for msg in empire.AINotes.Log: : "p0166"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125452,7 +125452,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 166"; + "Generic FrEee.Objects.Space.Planet 166"; StoredResources: : d0: @@ -125471,15 +125471,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 167"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 167"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125496,7 +125496,7 @@ for msg in empire.AINotes.Log: : "p0167"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125513,7 +125513,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 167"; + "Generic FrEee.Objects.Space.Planet 167"; StoredResources: : d0: @@ -125532,15 +125532,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 168"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 168"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125557,7 +125557,7 @@ for msg in empire.AINotes.Log: : "p0168"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125574,7 +125574,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 168"; + "Generic FrEee.Objects.Space.Planet 168"; StoredResources: : d0: @@ -125593,15 +125593,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 169"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 169"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125618,7 +125618,7 @@ for msg in empire.AINotes.Log: : "p0169"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125635,7 +125635,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 169"; + "Generic FrEee.Objects.Space.Planet 169"; StoredResources: : d0: @@ -125654,15 +125654,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 170"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 170"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125679,7 +125679,7 @@ for msg in empire.AINotes.Log: : "p0170"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125696,7 +125696,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 170"; + "Generic FrEee.Objects.Space.Planet 170"; StoredResources: : d0: @@ -125715,15 +125715,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 171"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 171"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125740,7 +125740,7 @@ for msg in empire.AINotes.Log: : "p0171"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125757,7 +125757,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 171"; + "Generic FrEee.Objects.Space.Planet 171"; StoredResources: : d0: @@ -125776,15 +125776,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 172"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 172"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125801,7 +125801,7 @@ for msg in empire.AINotes.Log: : "p0172"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125818,7 +125818,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 172"; + "Generic FrEee.Objects.Space.Planet 172"; StoredResources: : d0: @@ -125837,15 +125837,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 173"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 173"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125862,7 +125862,7 @@ for msg in empire.AINotes.Log: : "p0173"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125879,7 +125879,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 173"; + "Generic FrEee.Objects.Space.Planet 173"; StoredResources: : d0: @@ -125898,15 +125898,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 174"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 174"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125923,7 +125923,7 @@ for msg in empire.AINotes.Log: : "p0174"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -125940,7 +125940,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 174"; + "Generic FrEee.Objects.Space.Planet 174"; StoredResources: : d0: @@ -125959,15 +125959,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 175"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 175"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -125984,7 +125984,7 @@ for msg in empire.AINotes.Log: : "p0175"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126001,7 +126001,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 175"; + "Generic FrEee.Objects.Space.Planet 175"; StoredResources: : d0: @@ -126020,15 +126020,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 176"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 176"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126045,7 +126045,7 @@ for msg in empire.AINotes.Log: : "p0176"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126062,7 +126062,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 176"; + "Generic FrEee.Objects.Space.Planet 176"; StoredResources: : d0: @@ -126081,15 +126081,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 177"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 177"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126106,7 +126106,7 @@ for msg in empire.AINotes.Log: : "p0177"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126123,7 +126123,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 177"; + "Generic FrEee.Objects.Space.Planet 177"; StoredResources: : d0: @@ -126142,15 +126142,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 178"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 178"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126167,7 +126167,7 @@ for msg in empire.AINotes.Log: : "p0178"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126184,7 +126184,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 178"; + "Generic FrEee.Objects.Space.Planet 178"; StoredResources: : d0: @@ -126203,15 +126203,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 179"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 179"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126228,7 +126228,7 @@ for msg in empire.AINotes.Log: : "p0179"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126245,7 +126245,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 179"; + "Generic FrEee.Objects.Space.Planet 179"; StoredResources: : d0: @@ -126264,15 +126264,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 180"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 180"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126289,7 +126289,7 @@ for msg in empire.AINotes.Log: : "p0180"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126306,7 +126306,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 180"; + "Generic FrEee.Objects.Space.Planet 180"; StoredResources: : d0: @@ -126325,15 +126325,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 181"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 181"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126350,7 +126350,7 @@ for msg in empire.AINotes.Log: : "p0181"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126367,7 +126367,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 181"; + "Generic FrEee.Objects.Space.Planet 181"; StoredResources: : d0: @@ -126386,15 +126386,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 182"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 182"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126411,7 +126411,7 @@ for msg in empire.AINotes.Log: : "p0182"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126428,7 +126428,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 182"; + "Generic FrEee.Objects.Space.Planet 182"; StoredResources: : d0: @@ -126447,15 +126447,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 183"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 183"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126472,7 +126472,7 @@ for msg in empire.AINotes.Log: : "p0183"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126489,7 +126489,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 183"; + "Generic FrEee.Objects.Space.Planet 183"; StoredResources: : d0: @@ -126508,15 +126508,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 184"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 184"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126533,7 +126533,7 @@ for msg in empire.AINotes.Log: : "p0184"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126550,7 +126550,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 184"; + "Generic FrEee.Objects.Space.Planet 184"; StoredResources: : d0: @@ -126569,15 +126569,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 185"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 185"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126594,7 +126594,7 @@ for msg in empire.AINotes.Log: : "p0185"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126611,7 +126611,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 185"; + "Generic FrEee.Objects.Space.Planet 185"; StoredResources: : d0: @@ -126630,15 +126630,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 186"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 186"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126655,7 +126655,7 @@ for msg in empire.AINotes.Log: : "p0186"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126672,7 +126672,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 186"; + "Generic FrEee.Objects.Space.Planet 186"; StoredResources: : d0: @@ -126691,15 +126691,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 187"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 187"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126716,7 +126716,7 @@ for msg in empire.AINotes.Log: : "p0187"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126733,7 +126733,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 187"; + "Generic FrEee.Objects.Space.Planet 187"; StoredResources: : d0: @@ -126752,15 +126752,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 188"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 188"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126777,7 +126777,7 @@ for msg in empire.AINotes.Log: : "p0188"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126794,7 +126794,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 188"; + "Generic FrEee.Objects.Space.Planet 188"; StoredResources: : d0: @@ -126813,15 +126813,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 189"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 189"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126838,7 +126838,7 @@ for msg in empire.AINotes.Log: : "p0189"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126855,7 +126855,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 189"; + "Generic FrEee.Objects.Space.Planet 189"; StoredResources: : d0: @@ -126874,15 +126874,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 190"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 190"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126899,7 +126899,7 @@ for msg in empire.AINotes.Log: : "p0190"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126916,7 +126916,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 190"; + "Generic FrEee.Objects.Space.Planet 190"; StoredResources: : d0: @@ -126935,15 +126935,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 191"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 191"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -126960,7 +126960,7 @@ for msg in empire.AINotes.Log: : "p0191"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -126977,7 +126977,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 191"; + "Generic FrEee.Objects.Space.Planet 191"; StoredResources: : d0: @@ -126996,15 +126996,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 192"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 192"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127021,7 +127021,7 @@ for msg in empire.AINotes.Log: : "p0192"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127038,7 +127038,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 192"; + "Generic FrEee.Objects.Space.Planet 192"; StoredResources: : d0: @@ -127057,15 +127057,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 193"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 193"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127082,7 +127082,7 @@ for msg in empire.AINotes.Log: : "p0193"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127099,7 +127099,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 193"; + "Generic FrEee.Objects.Space.Planet 193"; StoredResources: : d0: @@ -127118,15 +127118,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 194"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 194"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127143,7 +127143,7 @@ for msg in empire.AINotes.Log: : "p0194"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127160,7 +127160,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 194"; + "Generic FrEee.Objects.Space.Planet 194"; StoredResources: : d0: @@ -127179,15 +127179,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 195"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 195"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127204,7 +127204,7 @@ for msg in empire.AINotes.Log: : "p0195"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127221,7 +127221,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 195"; + "Generic FrEee.Objects.Space.Planet 195"; StoredResources: : d0: @@ -127240,15 +127240,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 196"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 196"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127265,7 +127265,7 @@ for msg in empire.AINotes.Log: : "p0196"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127282,7 +127282,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 196"; + "Generic FrEee.Objects.Space.Planet 196"; StoredResources: : d0: @@ -127301,15 +127301,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 197"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 197"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127326,7 +127326,7 @@ for msg in empire.AINotes.Log: : "p0197"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127343,7 +127343,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 197"; + "Generic FrEee.Objects.Space.Planet 197"; StoredResources: : d0: @@ -127362,15 +127362,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 198"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 198"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127387,7 +127387,7 @@ for msg in empire.AINotes.Log: : "p0198"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127404,7 +127404,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 198"; + "Generic FrEee.Objects.Space.Planet 198"; StoredResources: : d0: @@ -127423,15 +127423,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 199"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 199"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127448,7 +127448,7 @@ for msg in empire.AINotes.Log: : "p0199"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127465,7 +127465,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 199"; + "Generic FrEee.Objects.Space.Planet 199"; StoredResources: : d0: @@ -127484,15 +127484,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 200"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 200"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127509,7 +127509,7 @@ for msg in empire.AINotes.Log: : "p0200"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127526,7 +127526,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 200"; + "Generic FrEee.Objects.Space.Planet 200"; StoredResources: : d0: @@ -127545,15 +127545,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 201"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 201"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127570,7 +127570,7 @@ for msg in empire.AINotes.Log: : "p0201"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127587,7 +127587,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 201"; + "Generic FrEee.Objects.Space.Planet 201"; StoredResources: : d0: @@ -127606,15 +127606,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 202"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 202"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127631,7 +127631,7 @@ for msg in empire.AINotes.Log: : "p0202"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127648,7 +127648,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 202"; + "Generic FrEee.Objects.Space.Planet 202"; StoredResources: : d0: @@ -127667,15 +127667,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 203"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 203"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127692,7 +127692,7 @@ for msg in empire.AINotes.Log: : "p0203"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127709,7 +127709,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 203"; + "Generic FrEee.Objects.Space.Planet 203"; StoredResources: : d0: @@ -127728,15 +127728,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 204"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 204"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127753,7 +127753,7 @@ for msg in empire.AINotes.Log: : "p0204"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127770,7 +127770,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 204"; + "Generic FrEee.Objects.Space.Planet 204"; StoredResources: : d0: @@ -127789,15 +127789,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 205"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 205"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127814,7 +127814,7 @@ for msg in empire.AINotes.Log: : "p0205"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127831,7 +127831,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 205"; + "Generic FrEee.Objects.Space.Planet 205"; StoredResources: : d0: @@ -127850,15 +127850,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 206"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 206"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127875,7 +127875,7 @@ for msg in empire.AINotes.Log: : "p0206"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127892,7 +127892,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 206"; + "Generic FrEee.Objects.Space.Planet 206"; StoredResources: : d0: @@ -127911,15 +127911,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 207"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 207"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127936,7 +127936,7 @@ for msg in empire.AINotes.Log: : "p0207"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -127953,7 +127953,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 207"; + "Generic FrEee.Objects.Space.Planet 207"; StoredResources: : d0: @@ -127972,15 +127972,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 208"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 208"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -127997,7 +127997,7 @@ for msg in empire.AINotes.Log: : "p0208"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128014,7 +128014,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 208"; + "Generic FrEee.Objects.Space.Planet 208"; StoredResources: : d0: @@ -128033,15 +128033,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 209"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 209"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128058,7 +128058,7 @@ for msg in empire.AINotes.Log: : "p0209"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128075,7 +128075,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 209"; + "Generic FrEee.Objects.Space.Planet 209"; StoredResources: : d0: @@ -128094,15 +128094,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 210"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 210"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128119,7 +128119,7 @@ for msg in empire.AINotes.Log: : "p0210"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128136,7 +128136,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 210"; + "Generic FrEee.Objects.Space.Planet 210"; StoredResources: : d0: @@ -128155,15 +128155,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 211"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 211"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128180,7 +128180,7 @@ for msg in empire.AINotes.Log: : "p0211"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128197,7 +128197,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 211"; + "Generic FrEee.Objects.Space.Planet 211"; StoredResources: : d0: @@ -128216,15 +128216,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 212"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 212"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128241,7 +128241,7 @@ for msg in empire.AINotes.Log: : "p0212"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128258,7 +128258,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 212"; + "Generic FrEee.Objects.Space.Planet 212"; StoredResources: : d0: @@ -128277,15 +128277,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 213"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 213"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128302,7 +128302,7 @@ for msg in empire.AINotes.Log: : "p0213"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128319,7 +128319,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 213"; + "Generic FrEee.Objects.Space.Planet 213"; StoredResources: : d0: @@ -128338,15 +128338,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 214"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 214"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128363,7 +128363,7 @@ for msg in empire.AINotes.Log: : "p0214"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128380,7 +128380,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 214"; + "Generic FrEee.Objects.Space.Planet 214"; StoredResources: : d0: @@ -128399,15 +128399,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 215"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 215"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128424,7 +128424,7 @@ for msg in empire.AINotes.Log: : "p0215"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128441,7 +128441,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 215"; + "Generic FrEee.Objects.Space.Planet 215"; StoredResources: : d0: @@ -128460,15 +128460,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 216"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 216"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128485,7 +128485,7 @@ for msg in empire.AINotes.Log: : "p0216"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128502,7 +128502,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 216"; + "Generic FrEee.Objects.Space.Planet 216"; StoredResources: : d0: @@ -128521,15 +128521,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 217"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 217"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128546,7 +128546,7 @@ for msg in empire.AINotes.Log: : "p0217"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128563,7 +128563,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 217"; + "Generic FrEee.Objects.Space.Planet 217"; StoredResources: : d0: @@ -128582,15 +128582,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 218"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 218"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128607,7 +128607,7 @@ for msg in empire.AINotes.Log: : "p0218"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128624,7 +128624,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 218"; + "Generic FrEee.Objects.Space.Planet 218"; StoredResources: : d0: @@ -128643,15 +128643,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 219"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 219"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128668,7 +128668,7 @@ for msg in empire.AINotes.Log: : "p0219"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128685,7 +128685,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 219"; + "Generic FrEee.Objects.Space.Planet 219"; StoredResources: : d0: @@ -128704,15 +128704,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 220"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 220"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128729,7 +128729,7 @@ for msg in empire.AINotes.Log: : "p0220"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128746,7 +128746,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 220"; + "Generic FrEee.Objects.Space.Planet 220"; StoredResources: : d0: @@ -128765,15 +128765,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 221"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 221"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128790,7 +128790,7 @@ for msg in empire.AINotes.Log: : "p0221"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128807,7 +128807,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 221"; + "Generic FrEee.Objects.Space.Planet 221"; StoredResources: : d0: @@ -128826,15 +128826,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 222"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 222"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128851,7 +128851,7 @@ for msg in empire.AINotes.Log: : "p0222"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128868,7 +128868,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 222"; + "Generic FrEee.Objects.Space.Planet 222"; StoredResources: : d0: @@ -128887,15 +128887,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 223"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 223"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128912,7 +128912,7 @@ for msg in empire.AINotes.Log: : "p0223"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128929,7 +128929,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 223"; + "Generic FrEee.Objects.Space.Planet 223"; StoredResources: : d0: @@ -128948,15 +128948,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 224"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 224"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -128973,7 +128973,7 @@ for msg in empire.AINotes.Log: : "p0224"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -128990,7 +128990,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 224"; + "Generic FrEee.Objects.Space.Planet 224"; StoredResources: : d0: @@ -129009,15 +129009,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 225"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 225"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -129034,7 +129034,7 @@ for msg in empire.AINotes.Log: : "p0225"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129051,7 +129051,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 225"; + "Generic FrEee.Objects.Space.Planet 225"; StoredResources: : d0: @@ -129070,15 +129070,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Star 1"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 1"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129095,7 +129095,7 @@ for msg in empire.AINotes.Log: : "p0226"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129112,7 +129112,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 1"; + "Generic FrEee.Objects.Space.Star 1"; StoredResources: : d0: @@ -129131,8 +129131,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 2"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 2"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129149,7 +129149,7 @@ for msg in empire.AINotes.Log: : "p0227"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129166,7 +129166,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 2"; + "Generic FrEee.Objects.Space.Star 2"; StoredResources: : d0: @@ -129185,8 +129185,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 3"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 3"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129203,7 +129203,7 @@ for msg in empire.AINotes.Log: : "p0228"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129220,7 +129220,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 3"; + "Generic FrEee.Objects.Space.Star 3"; StoredResources: : d0: @@ -129239,8 +129239,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 4"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 4"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129257,7 +129257,7 @@ for msg in empire.AINotes.Log: : "p0229"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129274,7 +129274,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 4"; + "Generic FrEee.Objects.Space.Star 4"; StoredResources: : d0: @@ -129293,8 +129293,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 5"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 5"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129311,7 +129311,7 @@ for msg in empire.AINotes.Log: : "p0230"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129328,7 +129328,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 5"; + "Generic FrEee.Objects.Space.Star 5"; StoredResources: : d0: @@ -129347,8 +129347,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 6"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 6"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129365,7 +129365,7 @@ for msg in empire.AINotes.Log: : "p0231"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129382,7 +129382,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 6"; + "Generic FrEee.Objects.Space.Star 6"; StoredResources: : d0: @@ -129401,8 +129401,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 7"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 7"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129419,7 +129419,7 @@ for msg in empire.AINotes.Log: : "p0232"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129436,7 +129436,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 7"; + "Generic FrEee.Objects.Space.Star 7"; StoredResources: : d0: @@ -129455,8 +129455,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 8"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 8"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129473,7 +129473,7 @@ for msg in empire.AINotes.Log: : "p0233"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129490,7 +129490,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 8"; + "Generic FrEee.Objects.Space.Star 8"; StoredResources: : d0: @@ -129509,8 +129509,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 9"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 9"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129527,7 +129527,7 @@ for msg in empire.AINotes.Log: : "p0234"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129544,7 +129544,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 9"; + "Generic FrEee.Objects.Space.Star 9"; StoredResources: : d0: @@ -129563,8 +129563,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 10"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 10"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129581,7 +129581,7 @@ for msg in empire.AINotes.Log: : "p0235"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129598,7 +129598,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 10"; + "Generic FrEee.Objects.Space.Star 10"; StoredResources: : d0: @@ -129617,8 +129617,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 11"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 11"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129635,7 +129635,7 @@ for msg in empire.AINotes.Log: : "p0236"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129652,7 +129652,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 11"; + "Generic FrEee.Objects.Space.Star 11"; StoredResources: : d0: @@ -129671,8 +129671,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 12"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 12"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129689,7 +129689,7 @@ for msg in empire.AINotes.Log: : "p0237"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129706,7 +129706,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 12"; + "Generic FrEee.Objects.Space.Star 12"; StoredResources: : d0: @@ -129725,8 +129725,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 13"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 13"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129743,7 +129743,7 @@ for msg in empire.AINotes.Log: : "p0238"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129760,7 +129760,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 13"; + "Generic FrEee.Objects.Space.Star 13"; StoredResources: : d0: @@ -129779,8 +129779,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 14"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 14"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129797,7 +129797,7 @@ for msg in empire.AINotes.Log: : "p0239"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129814,7 +129814,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 14"; + "Generic FrEee.Objects.Space.Star 14"; StoredResources: : d0: @@ -129833,8 +129833,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 15"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 15"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129851,7 +129851,7 @@ for msg in empire.AINotes.Log: : "p0240"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129868,7 +129868,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 15"; + "Generic FrEee.Objects.Space.Star 15"; StoredResources: : d0: @@ -129887,8 +129887,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 16"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 16"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129905,7 +129905,7 @@ for msg in empire.AINotes.Log: : "p0241"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129922,7 +129922,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 16"; + "Generic FrEee.Objects.Space.Star 16"; StoredResources: : d0: @@ -129941,8 +129941,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 17"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 17"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -129959,7 +129959,7 @@ for msg in empire.AINotes.Log: : "p0242"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -129976,7 +129976,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 17"; + "Generic FrEee.Objects.Space.Star 17"; StoredResources: : d0: @@ -129995,8 +129995,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 18"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 18"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -130013,7 +130013,7 @@ for msg in empire.AINotes.Log: : "p0243"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130030,7 +130030,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 18"; + "Generic FrEee.Objects.Space.Star 18"; StoredResources: : d0: @@ -130049,8 +130049,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 19"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 19"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -130067,7 +130067,7 @@ for msg in empire.AINotes.Log: : "p0244"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130084,7 +130084,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 19"; + "Generic FrEee.Objects.Space.Star 19"; StoredResources: : d0: @@ -130103,8 +130103,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 20"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 20"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -130121,7 +130121,7 @@ for msg in empire.AINotes.Log: : "p0245"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130138,7 +130138,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 20"; + "Generic FrEee.Objects.Space.Star 20"; StoredResources: : d0: @@ -130157,8 +130157,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 21"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 21"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -130175,7 +130175,7 @@ for msg in empire.AINotes.Log: : "p0246"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130192,7 +130192,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 21"; + "Generic FrEee.Objects.Space.Star 21"; StoredResources: : d0: @@ -130211,8 +130211,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 22"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 22"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -130229,7 +130229,7 @@ for msg in empire.AINotes.Log: : "p0247"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130246,7 +130246,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 22"; + "Generic FrEee.Objects.Space.Star 22"; StoredResources: : d0: @@ -130265,8 +130265,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 23"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 23"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -130283,7 +130283,7 @@ for msg in empire.AINotes.Log: : "p0248"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130300,7 +130300,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 23"; + "Generic FrEee.Objects.Space.Star 23"; StoredResources: : d0: @@ -130319,8 +130319,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 24"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 24"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -130337,7 +130337,7 @@ for msg in empire.AINotes.Log: : "p0249"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130354,7 +130354,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 24"; + "Generic FrEee.Objects.Space.Star 24"; StoredResources: : d0: @@ -130373,8 +130373,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Star 25"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 25"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -130391,7 +130391,7 @@ for msg in empire.AINotes.Log: : "p0250"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130408,7 +130408,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 25"; + "Generic FrEee.Objects.Space.Star 25"; StoredResources: : d0: @@ -130427,8 +130427,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.Storm 1"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 1"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130445,7 +130445,7 @@ for msg in empire.AINotes.Log: : "p0251"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130462,7 +130462,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 1"; + "Generic FrEee.Objects.Space.Storm 1"; StoredResources: : d0: @@ -130472,8 +130472,8 @@ for msg in empire.AINotes.Log: "Storm5"; ; : - "Generic FrEee.Game.Objects.Space.Storm 2"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 2"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130490,7 +130490,7 @@ for msg in empire.AINotes.Log: : "p0252"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130507,7 +130507,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 2"; + "Generic FrEee.Objects.Space.Storm 2"; StoredResources: : d0: @@ -130517,8 +130517,8 @@ for msg in empire.AINotes.Log: "Storm5"; ; : - "Generic FrEee.Game.Objects.Space.Storm 3"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 3"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130535,7 +130535,7 @@ for msg in empire.AINotes.Log: : "p0253"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130552,7 +130552,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 3"; + "Generic FrEee.Objects.Space.Storm 3"; StoredResources: : d0: @@ -130562,8 +130562,8 @@ for msg in empire.AINotes.Log: "Storm5"; ; : - "Generic FrEee.Game.Objects.Space.Storm 4"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 4"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130580,7 +130580,7 @@ for msg in empire.AINotes.Log: : "p0254"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130597,7 +130597,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 4"; + "Generic FrEee.Objects.Space.Storm 4"; StoredResources: : d0: @@ -130607,8 +130607,8 @@ for msg in empire.AINotes.Log: "Storm5"; ; : - "Generic FrEee.Game.Objects.Space.Storm 5"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 5"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130625,7 +130625,7 @@ for msg in empire.AINotes.Log: : "p0255"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130642,7 +130642,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 5"; + "Generic FrEee.Objects.Space.Storm 5"; StoredResources: : d0: @@ -130652,8 +130652,8 @@ for msg in empire.AINotes.Log: "Storm5"; ; : - "Generic FrEee.Game.Objects.Space.Storm 6"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 6"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130670,7 +130670,7 @@ for msg in empire.AINotes.Log: : "p0256"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130687,7 +130687,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 6"; + "Generic FrEee.Objects.Space.Storm 6"; StoredResources: : d0: @@ -130697,8 +130697,8 @@ for msg in empire.AINotes.Log: "Storm4"; ; : - "Generic FrEee.Game.Objects.Space.Storm 7"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 7"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130715,7 +130715,7 @@ for msg in empire.AINotes.Log: : "p0257"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130732,7 +130732,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 7"; + "Generic FrEee.Objects.Space.Storm 7"; StoredResources: : d0: @@ -130742,8 +130742,8 @@ for msg in empire.AINotes.Log: "Storm4"; ; : - "Generic FrEee.Game.Objects.Space.Storm 8"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 8"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130760,7 +130760,7 @@ for msg in empire.AINotes.Log: : "p0258"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130777,7 +130777,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 8"; + "Generic FrEee.Objects.Space.Storm 8"; StoredResources: : d0: @@ -130787,8 +130787,8 @@ for msg in empire.AINotes.Log: "Storm4"; ; : - "Generic FrEee.Game.Objects.Space.Storm 9"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 9"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130805,7 +130805,7 @@ for msg in empire.AINotes.Log: : "p0259"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130822,7 +130822,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 9"; + "Generic FrEee.Objects.Space.Storm 9"; StoredResources: : d0: @@ -130832,8 +130832,8 @@ for msg in empire.AINotes.Log: "Storm4"; ; : - "Generic FrEee.Game.Objects.Space.Storm 10"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 10"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130850,7 +130850,7 @@ for msg in empire.AINotes.Log: : "p0260"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130867,7 +130867,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 10"; + "Generic FrEee.Objects.Space.Storm 10"; StoredResources: : d0: @@ -130877,8 +130877,8 @@ for msg in empire.AINotes.Log: "Storm4"; ; : - "Generic FrEee.Game.Objects.Space.Storm 11"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 11"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130895,7 +130895,7 @@ for msg in empire.AINotes.Log: : "p0261"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -130912,7 +130912,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 11"; + "Generic FrEee.Objects.Space.Storm 11"; StoredResources: : d0: @@ -130922,8 +130922,8 @@ for msg in empire.AINotes.Log: "Storm2"; ; : - "Generic FrEee.Game.Objects.Space.Storm 12"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 12"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130940,7 +130940,7 @@ for msg in empire.AINotes.Log: : "p0262"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : i564; @@ -130959,7 +130959,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 12"; + "Generic FrEee.Objects.Space.Storm 12"; StoredResources: : d0: @@ -130969,8 +130969,8 @@ for msg in empire.AINotes.Log: "Storm2"; ; : - "Generic FrEee.Game.Objects.Space.Storm 13"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 13"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -130987,7 +130987,7 @@ for msg in empire.AINotes.Log: : "p0263"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131004,7 +131004,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 13"; + "Generic FrEee.Objects.Space.Storm 13"; StoredResources: : d0: @@ -131014,8 +131014,8 @@ for msg in empire.AINotes.Log: "Storm2"; ; : - "Generic FrEee.Game.Objects.Space.Storm 14"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 14"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131032,7 +131032,7 @@ for msg in empire.AINotes.Log: : "p0264"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131049,7 +131049,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 14"; + "Generic FrEee.Objects.Space.Storm 14"; StoredResources: : d0: @@ -131059,8 +131059,8 @@ for msg in empire.AINotes.Log: "Storm2"; ; : - "Generic FrEee.Game.Objects.Space.Storm 15"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 15"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131077,7 +131077,7 @@ for msg in empire.AINotes.Log: : "p0265"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131094,7 +131094,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 15"; + "Generic FrEee.Objects.Space.Storm 15"; StoredResources: : d0: @@ -131104,8 +131104,8 @@ for msg in empire.AINotes.Log: "Storm2"; ; : - "Generic FrEee.Game.Objects.Space.Storm 16"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 16"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131122,7 +131122,7 @@ for msg in empire.AINotes.Log: : "p0266"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131139,7 +131139,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 16"; + "Generic FrEee.Objects.Space.Storm 16"; StoredResources: : d0: @@ -131149,8 +131149,8 @@ for msg in empire.AINotes.Log: "Storm1"; ; : - "Generic FrEee.Game.Objects.Space.Storm 17"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 17"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131167,7 +131167,7 @@ for msg in empire.AINotes.Log: : "p0267"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131184,7 +131184,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 17"; + "Generic FrEee.Objects.Space.Storm 17"; StoredResources: : d0: @@ -131194,8 +131194,8 @@ for msg in empire.AINotes.Log: "Storm1"; ; : - "Generic FrEee.Game.Objects.Space.Storm 18"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 18"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131212,7 +131212,7 @@ for msg in empire.AINotes.Log: : "p0268"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131229,7 +131229,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 18"; + "Generic FrEee.Objects.Space.Storm 18"; StoredResources: : d0: @@ -131239,8 +131239,8 @@ for msg in empire.AINotes.Log: "Storm1"; ; : - "Generic FrEee.Game.Objects.Space.Storm 19"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 19"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131257,7 +131257,7 @@ for msg in empire.AINotes.Log: : "p0269"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131274,7 +131274,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 19"; + "Generic FrEee.Objects.Space.Storm 19"; StoredResources: : d0: @@ -131284,8 +131284,8 @@ for msg in empire.AINotes.Log: "Storm1"; ; : - "Generic FrEee.Game.Objects.Space.Storm 20"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 20"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131302,7 +131302,7 @@ for msg in empire.AINotes.Log: : "p0270"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131319,7 +131319,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 20"; + "Generic FrEee.Objects.Space.Storm 20"; StoredResources: : d0: @@ -131329,8 +131329,8 @@ for msg in empire.AINotes.Log: "Storm1"; ; : - "Generic FrEee.Game.Objects.Space.Storm 21"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 21"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131347,7 +131347,7 @@ for msg in empire.AINotes.Log: : "p0271"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131364,7 +131364,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 21"; + "Generic FrEee.Objects.Space.Storm 21"; StoredResources: : d0: @@ -131374,8 +131374,8 @@ for msg in empire.AINotes.Log: "Storm3"; ; : - "Generic FrEee.Game.Objects.Space.Storm 22"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 22"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131392,7 +131392,7 @@ for msg in empire.AINotes.Log: : "p0272"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131409,7 +131409,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 22"; + "Generic FrEee.Objects.Space.Storm 22"; StoredResources: : d0: @@ -131419,8 +131419,8 @@ for msg in empire.AINotes.Log: "Storm3"; ; : - "Generic FrEee.Game.Objects.Space.Storm 23"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 23"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131437,7 +131437,7 @@ for msg in empire.AINotes.Log: : "p0273"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131454,7 +131454,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 23"; + "Generic FrEee.Objects.Space.Storm 23"; StoredResources: : d0: @@ -131464,8 +131464,8 @@ for msg in empire.AINotes.Log: "Storm3"; ; : - "Generic FrEee.Game.Objects.Space.Storm 24"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 24"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131482,7 +131482,7 @@ for msg in empire.AINotes.Log: : "p0274"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131499,7 +131499,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 24"; + "Generic FrEee.Objects.Space.Storm 24"; StoredResources: : d0: @@ -131509,8 +131509,8 @@ for msg in empire.AINotes.Log: "Storm3"; ; : - "Generic FrEee.Game.Objects.Space.Storm 25"; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Storm 25"; + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -131527,7 +131527,7 @@ for msg in empire.AINotes.Log: : "p0275"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131544,7 +131544,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 25"; + "Generic FrEee.Objects.Space.Storm 25"; StoredResources: : d0: @@ -131554,8 +131554,8 @@ for msg in empire.AINotes.Log: "Storm3"; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 1"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 1"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -131572,7 +131572,7 @@ for msg in empire.AINotes.Log: : "p0276"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131589,7 +131589,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 1"; + "Generic FrEee.Objects.Space.AsteroidField 1"; StoredResources: : d0: @@ -131612,8 +131612,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 2"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 2"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -131630,7 +131630,7 @@ for msg in empire.AINotes.Log: : "p0277"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131647,7 +131647,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 2"; + "Generic FrEee.Objects.Space.AsteroidField 2"; StoredResources: : d0: @@ -131670,8 +131670,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 3"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 3"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -131688,7 +131688,7 @@ for msg in empire.AINotes.Log: : "p0278"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131705,7 +131705,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 3"; + "Generic FrEee.Objects.Space.AsteroidField 3"; StoredResources: : d0: @@ -131728,8 +131728,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 4"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 4"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -131746,7 +131746,7 @@ for msg in empire.AINotes.Log: : "p0279"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131763,7 +131763,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 4"; + "Generic FrEee.Objects.Space.AsteroidField 4"; StoredResources: : d0: @@ -131786,8 +131786,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 5"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 5"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -131804,7 +131804,7 @@ for msg in empire.AINotes.Log: : "p0280"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131821,7 +131821,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 5"; + "Generic FrEee.Objects.Space.AsteroidField 5"; StoredResources: : d0: @@ -131844,8 +131844,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 6"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 6"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -131862,7 +131862,7 @@ for msg in empire.AINotes.Log: : "p0281"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131879,7 +131879,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 6"; + "Generic FrEee.Objects.Space.AsteroidField 6"; StoredResources: : d0: @@ -131902,8 +131902,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 7"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 7"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -131920,7 +131920,7 @@ for msg in empire.AINotes.Log: : "p0282"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131937,7 +131937,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 7"; + "Generic FrEee.Objects.Space.AsteroidField 7"; StoredResources: : d0: @@ -131960,8 +131960,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 8"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 8"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -131978,7 +131978,7 @@ for msg in empire.AINotes.Log: : "p0283"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -131995,7 +131995,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 8"; + "Generic FrEee.Objects.Space.AsteroidField 8"; StoredResources: : d0: @@ -132018,8 +132018,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 9"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 9"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132036,7 +132036,7 @@ for msg in empire.AINotes.Log: : "p0284"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132053,7 +132053,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 9"; + "Generic FrEee.Objects.Space.AsteroidField 9"; StoredResources: : d0: @@ -132076,8 +132076,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 10"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 10"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132094,7 +132094,7 @@ for msg in empire.AINotes.Log: : "p0285"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132111,7 +132111,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 10"; + "Generic FrEee.Objects.Space.AsteroidField 10"; StoredResources: : d0: @@ -132134,8 +132134,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 11"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 11"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132152,7 +132152,7 @@ for msg in empire.AINotes.Log: : "p0286"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132169,7 +132169,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 11"; + "Generic FrEee.Objects.Space.AsteroidField 11"; StoredResources: : d0: @@ -132192,8 +132192,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 12"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 12"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132210,7 +132210,7 @@ for msg in empire.AINotes.Log: : "p0287"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132227,7 +132227,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 12"; + "Generic FrEee.Objects.Space.AsteroidField 12"; StoredResources: : d0: @@ -132250,8 +132250,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 13"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 13"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132268,7 +132268,7 @@ for msg in empire.AINotes.Log: : "p0288"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132285,7 +132285,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 13"; + "Generic FrEee.Objects.Space.AsteroidField 13"; StoredResources: : d0: @@ -132308,8 +132308,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 14"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 14"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132326,7 +132326,7 @@ for msg in empire.AINotes.Log: : "p0289"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132343,7 +132343,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 14"; + "Generic FrEee.Objects.Space.AsteroidField 14"; StoredResources: : d0: @@ -132366,8 +132366,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 15"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 15"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132384,7 +132384,7 @@ for msg in empire.AINotes.Log: : "p0290"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132401,7 +132401,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 15"; + "Generic FrEee.Objects.Space.AsteroidField 15"; StoredResources: : d0: @@ -132424,8 +132424,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 16"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 16"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132442,7 +132442,7 @@ for msg in empire.AINotes.Log: : "p0291"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132459,7 +132459,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 16"; + "Generic FrEee.Objects.Space.AsteroidField 16"; StoredResources: : d0: @@ -132482,8 +132482,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 17"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 17"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132500,7 +132500,7 @@ for msg in empire.AINotes.Log: : "p0292"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132517,7 +132517,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 17"; + "Generic FrEee.Objects.Space.AsteroidField 17"; StoredResources: : d0: @@ -132540,8 +132540,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 18"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 18"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132558,7 +132558,7 @@ for msg in empire.AINotes.Log: : "p0293"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132575,7 +132575,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 18"; + "Generic FrEee.Objects.Space.AsteroidField 18"; StoredResources: : d0: @@ -132598,8 +132598,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 19"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 19"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132616,7 +132616,7 @@ for msg in empire.AINotes.Log: : "p0294"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132633,7 +132633,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 19"; + "Generic FrEee.Objects.Space.AsteroidField 19"; StoredResources: : d0: @@ -132656,8 +132656,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.AsteroidField 20"; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.AsteroidField 20"; + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -132674,7 +132674,7 @@ for msg in empire.AINotes.Log: : "p0295"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132691,7 +132691,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 20"; + "Generic FrEee.Objects.Space.AsteroidField 20"; StoredResources: : d0: @@ -132714,8 +132714,8 @@ for msg in empire.AINotes.Log: ; ; : - "Generic FrEee.Game.Objects.Space.WarpPoint 1"; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.WarpPoint 1"; + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Index: : @@ -132732,7 +132732,7 @@ for msg in empire.AINotes.Log: : "p0296"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132749,13 +132749,13 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.WarpPoint 1"; + "Generic FrEee.Objects.Space.WarpPoint 1"; StoredResources: : d0: ; Target: - FrEee.Game.Objects.Space.Sector, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Space.Sector, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; IsOneWay: : False; @@ -132764,8 +132764,8 @@ for msg in empire.AINotes.Log: True; ; : - "Generic FrEee.Game.Objects.Space.WarpPoint 2"; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.WarpPoint 2"; + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Index: : @@ -132782,7 +132782,7 @@ for msg in empire.AINotes.Log: : "p0297"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132799,13 +132799,13 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.WarpPoint 2"; + "Generic FrEee.Objects.Space.WarpPoint 2"; StoredResources: : d0: ; Target: - FrEee.Game.Objects.Space.Sector, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Space.Sector, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; IsOneWay: : False; @@ -132814,8 +132814,8 @@ for msg in empire.AINotes.Log: False; ; : - "Generic FrEee.Game.Objects.Space.WarpPoint 3"; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.WarpPoint 3"; + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Index: : @@ -132832,7 +132832,7 @@ for msg in empire.AINotes.Log: : "p0298"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132849,13 +132849,13 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.WarpPoint 3"; + "Generic FrEee.Objects.Space.WarpPoint 3"; StoredResources: : d0: ; Target: - FrEee.Game.Objects.Space.Sector, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Space.Sector, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; IsOneWay: : True; @@ -132864,8 +132864,8 @@ for msg in empire.AINotes.Log: True; ; : - "Generic FrEee.Game.Objects.Space.WarpPoint 4"; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.WarpPoint 4"; + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Index: : @@ -132882,7 +132882,7 @@ for msg in empire.AINotes.Log: : "p0299"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132899,13 +132899,13 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.WarpPoint 4"; + "Generic FrEee.Objects.Space.WarpPoint 4"; StoredResources: : d0: ; Target: - FrEee.Game.Objects.Space.Sector, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Space.Sector, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; IsOneWay: : False; @@ -132914,8 +132914,8 @@ for msg in empire.AINotes.Log: True; ; : - "Generic FrEee.Game.Objects.Space.WarpPoint 5"; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.WarpPoint 5"; + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p15: Index: : @@ -132932,7 +132932,7 @@ for msg in empire.AINotes.Log: : "p0300"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132949,13 +132949,13 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.WarpPoint 5"; + "Generic FrEee.Objects.Space.WarpPoint 5"; StoredResources: : d0: ; Target: - FrEee.Game.Objects.Space.Sector, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Space.Sector, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; IsOneWay: : False; @@ -132964,8 +132964,8 @@ for msg in empire.AINotes.Log: True; ; : - "Generic FrEee.Game.Objects.Space.Star 26"; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Star 26"; + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -132982,7 +132982,7 @@ for msg in empire.AINotes.Log: : "p0241"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -132999,7 +132999,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 26"; + "Generic FrEee.Objects.Space.Star 26"; StoredResources: : d0: @@ -133018,8 +133018,8 @@ for msg in empire.AINotes.Log: True; ; : - "Generic FrEee.Game.Objects.Space.Planet 226"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 226"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133036,7 +133036,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133053,7 +133053,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 226"; + "Generic FrEee.Objects.Space.Planet 226"; StoredResources: : d0: @@ -133076,15 +133076,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 227"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 227"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133101,7 +133101,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133118,7 +133118,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 227"; + "Generic FrEee.Objects.Space.Planet 227"; StoredResources: : d0: @@ -133137,15 +133137,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 228"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 228"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133162,7 +133162,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133179,7 +133179,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 228"; + "Generic FrEee.Objects.Space.Planet 228"; StoredResources: : d0: @@ -133198,15 +133198,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 229"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 229"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133223,7 +133223,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133240,7 +133240,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 229"; + "Generic FrEee.Objects.Space.Planet 229"; StoredResources: : d0: @@ -133259,15 +133259,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 230"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 230"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133284,7 +133284,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133301,7 +133301,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 230"; + "Generic FrEee.Objects.Space.Planet 230"; StoredResources: : d0: @@ -133320,15 +133320,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 231"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 231"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133345,7 +133345,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133362,7 +133362,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 231"; + "Generic FrEee.Objects.Space.Planet 231"; StoredResources: : d0: @@ -133381,15 +133381,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 232"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 232"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133406,7 +133406,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133423,7 +133423,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 232"; + "Generic FrEee.Objects.Space.Planet 232"; StoredResources: : d0: @@ -133442,15 +133442,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 233"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 233"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133467,7 +133467,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133484,7 +133484,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 233"; + "Generic FrEee.Objects.Space.Planet 233"; StoredResources: : d0: @@ -133503,15 +133503,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 234"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 234"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133528,7 +133528,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133545,7 +133545,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 234"; + "Generic FrEee.Objects.Space.Planet 234"; StoredResources: : d0: @@ -133564,15 +133564,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 235"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 235"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133589,7 +133589,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133606,7 +133606,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 235"; + "Generic FrEee.Objects.Space.Planet 235"; StoredResources: : d0: @@ -133625,15 +133625,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 236"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 236"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133650,7 +133650,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133667,7 +133667,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 236"; + "Generic FrEee.Objects.Space.Planet 236"; StoredResources: : d0: @@ -133686,15 +133686,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 237"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 237"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133711,7 +133711,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133728,7 +133728,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 237"; + "Generic FrEee.Objects.Space.Planet 237"; StoredResources: : d0: @@ -133747,15 +133747,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 238"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 238"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133772,7 +133772,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133789,7 +133789,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 238"; + "Generic FrEee.Objects.Space.Planet 238"; StoredResources: : d0: @@ -133808,15 +133808,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 239"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 239"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133833,7 +133833,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133850,7 +133850,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 239"; + "Generic FrEee.Objects.Space.Planet 239"; StoredResources: : d0: @@ -133869,15 +133869,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 240"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 240"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133894,7 +133894,7 @@ for msg in empire.AINotes.Log: : "p0301"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133911,7 +133911,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 240"; + "Generic FrEee.Objects.Space.Planet 240"; StoredResources: : d0: @@ -133930,15 +133930,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 241"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 241"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -133955,7 +133955,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -133972,7 +133972,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 241"; + "Generic FrEee.Objects.Space.Planet 241"; StoredResources: : d0: @@ -133995,15 +133995,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 242"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 242"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134020,7 +134020,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134037,7 +134037,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 242"; + "Generic FrEee.Objects.Space.Planet 242"; StoredResources: : d0: @@ -134056,15 +134056,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 243"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 243"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134081,7 +134081,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134098,7 +134098,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 243"; + "Generic FrEee.Objects.Space.Planet 243"; StoredResources: : d0: @@ -134117,15 +134117,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 244"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 244"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134142,7 +134142,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134159,7 +134159,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 244"; + "Generic FrEee.Objects.Space.Planet 244"; StoredResources: : d0: @@ -134178,15 +134178,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 245"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 245"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134203,7 +134203,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134220,7 +134220,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 245"; + "Generic FrEee.Objects.Space.Planet 245"; StoredResources: : d0: @@ -134239,15 +134239,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 246"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 246"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134264,7 +134264,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134281,7 +134281,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 246"; + "Generic FrEee.Objects.Space.Planet 246"; StoredResources: : d0: @@ -134300,15 +134300,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 247"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 247"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134325,7 +134325,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134342,7 +134342,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 247"; + "Generic FrEee.Objects.Space.Planet 247"; StoredResources: : d0: @@ -134361,15 +134361,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 248"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 248"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134386,7 +134386,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134403,7 +134403,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 248"; + "Generic FrEee.Objects.Space.Planet 248"; StoredResources: : d0: @@ -134422,15 +134422,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 249"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 249"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134447,7 +134447,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134464,7 +134464,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 249"; + "Generic FrEee.Objects.Space.Planet 249"; StoredResources: : d0: @@ -134483,15 +134483,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 250"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 250"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134508,7 +134508,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134525,7 +134525,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 250"; + "Generic FrEee.Objects.Space.Planet 250"; StoredResources: : d0: @@ -134544,15 +134544,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 251"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 251"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134569,7 +134569,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134586,7 +134586,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 251"; + "Generic FrEee.Objects.Space.Planet 251"; StoredResources: : d0: @@ -134605,15 +134605,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 252"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 252"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134630,7 +134630,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134647,7 +134647,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 252"; + "Generic FrEee.Objects.Space.Planet 252"; StoredResources: : d0: @@ -134666,15 +134666,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 253"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 253"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134691,7 +134691,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134708,7 +134708,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 253"; + "Generic FrEee.Objects.Space.Planet 253"; StoredResources: : d0: @@ -134727,15 +134727,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 254"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 254"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134752,7 +134752,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134769,7 +134769,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 254"; + "Generic FrEee.Objects.Space.Planet 254"; StoredResources: : d0: @@ -134788,15 +134788,15 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : - "Generic FrEee.Game.Objects.Space.Planet 255"; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + "Generic FrEee.Objects.Space.Planet 255"; + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -134813,7 +134813,7 @@ for msg in empire.AINotes.Log: : "p0302"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; StellarSize: @@ -134830,7 +134830,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 255"; + "Generic FrEee.Objects.Space.Planet 255"; StoredResources: : d0: @@ -134849,18 +134849,18 @@ for msg in empire.AINotes.Log: d0: ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Advanced Power Conservation"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -134886,7 +134886,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ID: : @@ -134915,20 +134915,20 @@ for msg in empire.AINotes.Log: : "Advanced Power Conservation"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Mechanoids"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -134950,7 +134950,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; ID: : @@ -134979,20 +134979,20 @@ for msg in empire.AINotes.Log: : "Mechanoids"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Lucky"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135014,7 +135014,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; ID: : @@ -135043,20 +135043,20 @@ for msg in empire.AINotes.Log: : "Lucky"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Natural Merchants"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135078,7 +135078,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; ID: : @@ -135107,20 +135107,20 @@ for msg in empire.AINotes.Log: : "Natural Merchants"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Propulsion Experts"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135142,7 +135142,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; ID: : @@ -135171,20 +135171,20 @@ for msg in empire.AINotes.Log: : "Propulsion Experts"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Ancient Race"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135206,7 +135206,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; ID: : @@ -135235,20 +135235,20 @@ for msg in empire.AINotes.Log: : "Ancient Race"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Advanced Storage Techniques"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135270,7 +135270,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; ID: : @@ -135299,20 +135299,20 @@ for msg in empire.AINotes.Log: : "Advanced Storage Techniques"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Hardy Industrialists"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135334,7 +135334,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; ID: : @@ -135363,20 +135363,20 @@ for msg in empire.AINotes.Log: : "Hardy Industrialists"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Psychic"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135398,7 +135398,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; ID: : @@ -135427,20 +135427,20 @@ for msg in empire.AINotes.Log: : "Psychic"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Deeply Religious"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135458,7 +135458,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; ID: : @@ -135487,20 +135487,20 @@ for msg in empire.AINotes.Log: : "Deeply Religious"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Temporal Knowledge"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135518,7 +135518,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; ID: : @@ -135547,20 +135547,20 @@ for msg in empire.AINotes.Log: : "Temporal Knowledge"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Crystallurgy"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135578,7 +135578,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; ID: : @@ -135607,20 +135607,20 @@ for msg in empire.AINotes.Log: : "Crystallurgy"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Organic Manipulation"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135638,7 +135638,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; ID: : @@ -135667,20 +135667,20 @@ for msg in empire.AINotes.Log: : "Organic Manipulation"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Emotionless"; - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p7: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p7: @@ -135702,7 +135702,7 @@ for msg in empire.AINotes.Log: i205; ; Container: - FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; ID: : @@ -135731,1097 +135731,1097 @@ for msg in empire.AINotes.Log: : "Emotionless"; RequiredTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; RestrictedTraits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; : "Rock Planet Colonization"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Ice Planet Colonization"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Gas Giant Colonization"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Ship Construction"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : "Base Construction"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i84; : "Fighters"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : "Troops"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; : "Mines"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : "Weapon Platforms"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; : "Satellites"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; : "Space Yards"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : "Cargo"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : "Repair"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; : "Resupply"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; : "Propulsion"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : "Armor 1"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : "Shields"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : "Cloaking"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; : "Sensors"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; : "Scanners"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; : "Combat Support"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; : "Computers"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : "Resource Manipulation"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; : "Minerals Extraction"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; : "Organics Extraction"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; : "Radioactives Extraction"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; : "Stellar Manipulation"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; : "Applied Research"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; : "Applied Intelligence"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; : "Medical Technology"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; : "Organic Technology"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; : "Psychic Technology"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; : "Religious Technology"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; : "Temporal Technology"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; : "Crystalline Technology"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; : "Planet Utilization"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; : "Advanced Military Science"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; : "Applied Political Science"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; : "Astrophysics"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; : "Biology"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; : "Chemistry"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : "Construction"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : "Crystallurgy 1"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; : "Industry"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : "Military Science"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; : "Organic Engineering"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; : "Physics"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : "Planetary Engineering"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; : "Psychic Studies"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; : "Psychology"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; : "Religious Studies"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; : "Temporal Studies"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; : "Energy Stream Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; : "Energy Pulse Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; : "Missile Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; : "Projectile Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; : "Torpedo Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; : "High-Energy Discharge Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; : "Phased-Energy Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; : "Point-Defense Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; : "Shield Damaging Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; : "Tractor\\Repulser Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; : "Weapon Overloading Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; : "Engine Overloading Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; : "Gravitational Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; : "Warp Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; : "Biological Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; : "Planetary Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; : "Ship Capture"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; : "Temporal Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; : "Psychic Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; : "Computer Combat"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; : "Null-Space Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; : "Organic Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; : "Crystalline Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; : "Troop Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; : "Explosive Warheads"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; : "Smaller Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; : "Massive Shield Depleting Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; : "Massive Engine Destroying Weapons"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; : "Neural Computer Interface"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; : "Massive Planetary Shielding"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; : "Gravitational Technology"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; : "Stellar Harnessing"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; : "Drones"; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; : "Mineral Miner Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Mineral Miner Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Mineral Miner Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : "Organics Farm Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : "Organics Farm Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : "Organics Farm Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : "Radioactives Extraction Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : "Radioactives Extraction Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : "Radioactives Extraction Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : "Monolith Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : "Monolith Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : "Monolith Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : "Research Center I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : "Research Center II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : "Research Center III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : "Intelligence Center I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; : "Intelligence Center II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; : "Intelligence Center III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; : "Space Port"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; : "Resupply Depot"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; : "Mineral Resource Storage I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; : "Mineral Resource Storage II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; : "Mineral Resource Storage III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; : "Organic Resource Storage I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; : "Organic Resource Storage II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; : "Organic Resource Storage III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; : "Radioactive Resource Storage I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; : "Radioactive Resource Storage II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; : "Radioactive Resource Storage III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; : "Cargo Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; : "Cargo Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; : "Cargo Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; : "Mineral Scanner I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; : "Mineral Scanner II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; : "Mineral Scanner III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; : "Hybrid Eco - Farms I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; : "Hybrid Eco - Farms II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; : "Hybrid Eco - Farms III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; : "Radioactives Collider I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; : "Radioactives Collider II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; : "Radioactives Collider III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; : "System Mineral Scanner I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; : "System Mineral Scanner II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; : "System Mineral Scanner III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; : "System Eco - Farms I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; : "System Eco - Farms II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; : "System Eco - Farms III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; : "System Radioactives Collider I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; : "System Radioactives Collider II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; : "System Radioactives Collider III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; : "Robotoid Factory I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; : "Robotoid Factory II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; : "Robotoid Factory III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; : "System Robotoid Factory I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; : "System Robotoid Factory II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; : "System Robotoid Factory III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; : "Central Computer Complex I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; : "Central Computer Complex II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; : "Central Computer Complex III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; : "Citizen Databank Complex I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; : "Citizen Databank Complex II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; : "Citizen Databank Complex III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; : "System Computer Complex I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; : "System Computer Complex II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; : "System Computer Complex III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; : "System Citizen Databank I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; : "System Citizen Databank II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; : "System Citizen Databank III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; : "War Shrine I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; : "War Shrine II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; : "War Shrine III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; : "Death Shrine I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; : "Death Shrine II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; : "Death Shrine III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; : "Time Shrine I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; : "Time Shrine II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; : "Time Shrine III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; : "Nature Shrine I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; : "Nature Shrine II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; : "Nature Shrine III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; : "Fate Shrine I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; : "Fate Shrine II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; : "Fate Shrine III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; : "Resource Converter I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i84; : "Resource Converter II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i85; : "Resource Converter III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i86; : "Ultra - Recycler I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i87; : "Ultra - Recycler II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i88; : "Ultra - Recycler III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i89; : "Ship Training Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i90; : "Ship Training Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i91; : "Ship Training Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i92; : "Fleet Training Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i93; : "Fleet Training Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i94; : "Fleet Training Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i95; : "Gestation Vats I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i96; : "Gestation Vats II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i97; : "Gestation Vats III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i98; : "Replicant Center I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i99; : "Replicant Center II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i100; : "Replicant Center III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i101; : "Medical Lab I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i102; : "Medical Lab II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i103; : "Medical Lab III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i104; : "Urban Pacification Center I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i105; : "Urban Pacification Center II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i106; : "Urban Pacification Center III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i107; : "Space Yard Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; : "Space Yard Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; : "Space Yard Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; : "Planetary Gravitational Shield Facility"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i111; : "System Gravitational Shield Facility"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; : "Massive Planetary Shield Generator"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i113; : "Climate Control Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i114; : "Climate Control Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i115; : "Climate Control Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i116; : "Value Improvement Plant I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i117; : "Value Improvement Plant II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i118; : "Value Improvement Plant III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i119; : "Atmospheric Modification Plant I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i120; : "Atmospheric Modification Plant II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i121; : "Atmospheric Modification Plant III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i122; : "Events Predictor I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i123; : "Events Predictor II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i124; : "Events Predictor III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i125; : "Temporal Vacation Service I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i126; : "Temporal Vacation Service II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i127; : "Temporal Vacation Service III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i128; : "Temporal Space Yard Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; : "Temporal Space Yard Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; : "Temporal Space Yard Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; : "Psychic Ship Training Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i132; : "Psychic Ship Training Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i133; : "Psychic Ship Training Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i134; : "Psychic Fleet Training Facility I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i135; : "Psychic Fleet Training Facility II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i136; : "Psychic Fleet Training Facility III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i137; : "Psychic Scanner I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i138; : "Psychic Scanner II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i139; : "Psychic Scanner III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i140; : "Solar Generator I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i141; : "Solar Generator II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i142; : "Solar Generator III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i143; : "Crystalline Restructuring Plant I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i144; : "Crystalline Restructuring Plant II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i145; : "Crystalline Restructuring Plant III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i146; : "Energy Transmission Lens I"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i147; : "Energy Transmission Lens II"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i148; : "Energy Transmission Lens III"; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i149; : "Escort"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Frigate"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Destroyer"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Light Cruiser"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : "Cruiser"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : "Battle Cruiser"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : "Battleship"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : "Dreadnought"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : "Baseship"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : "Light Carrier"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : "Carrier"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : "Heavy Carrier"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : "Space Station"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Battle Station"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Starbase"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Colony Ship"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : "Small Transport"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : "Medium Transport"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : "Large Transport"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : "Small Fighter"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Medium Fighter"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Large Fighter"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Small Satellite"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Medium Satellite"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Large Satellite"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Small Mine"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Medium Mine"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Large Mine"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Small Troop"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Medium Troop"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Large Troop"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Small Weapons Platform"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Medium Weapons Platform"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Large Weapons Platform"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Small Drone"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Medium Drone"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Large Drone"; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Normal"; @@ -138901,43 +138901,43 @@ for msg in empire.AINotes.Log: i486; : "Large Ship Mount"; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Heavy Ship Mount"; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Massive Ship Mount"; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Large Weapon Platform Mount"; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : "Heavy Weapon Platform Mount"; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : "Massive Weapon Platform Mount"; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : "Large Satellite Mount"; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : "Large Base Mount"; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : "Heavy Base Mount"; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : "Massive Base Mount"; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : "Standard 1"; @@ -139121,75 +139121,75 @@ for msg in empire.AINotes.Log: i5; : "Peaceful"; - FrEee.Game.Objects.Civilization.HappinessModel, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.HappinessModel, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Bloodthirsty"; - FrEee.Game.Objects.Civilization.HappinessModel, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.HappinessModel, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Neutral"; - FrEee.Game.Objects.Civilization.HappinessModel, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.HappinessModel, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Neutral 1"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : "Berzerkers"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : "Warriors"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : "Traders"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : "Politicians"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : "Artisans"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : "Scientists"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : "Workers"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : "Schemers"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : "Zealots"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : "Engineers"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : "Merchants"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : "Renegades"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : "Xenophobes"; - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : "AI_Default"; - FrEee.Game.Objects.AI.AI`2[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[FrEee.Game.Objects.Space.Galaxy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.AI.AI`2[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[FrEee.Objects.Space.Galaxy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; Settings: @@ -139247,11 +139247,11 @@ for msg in empire.AINotes.Log: : 20; MoodModifiers: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Enumerations.Mood, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Enumerations.Mood, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d0: ; MoodThresholds: - System.Collections.Generic.Dictionary`2[[FrEee.Game.Enumerations.Mood, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[FrEee.Enumerations.Mood, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null],[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d5: : Riot; @@ -141090,673 +141090,673 @@ for msg in empire.AINotes.Log: i11; ; StellarObjectTemplates: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Space.StellarObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Space.StellarObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c331: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i84; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i85; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i86; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i87; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i88; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i89; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i90; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i91; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i92; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i93; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i94; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i95; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i96; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i97; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i98; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i99; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i100; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i101; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i102; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i103; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i104; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i105; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i106; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i107; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i111; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i113; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i114; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i115; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i116; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i117; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i118; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i119; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i120; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i121; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i122; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i123; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i124; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i125; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i126; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i127; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i128; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i132; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i133; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i134; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i135; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i136; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i137; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i138; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i139; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i140; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i141; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i142; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i143; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i144; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i145; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i146; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i147; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i148; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i149; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i150; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i151; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i152; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i153; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i154; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i155; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i156; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i157; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i158; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i159; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i160; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i161; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i162; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i163; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i164; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i165; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i166; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i167; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i168; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i169; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i170; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i171; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i172; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i173; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i174; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i175; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i176; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i177; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i178; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i179; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i180; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i181; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i182; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i183; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i184; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i185; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i186; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i187; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i188; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i189; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i190; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i191; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i192; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i193; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i194; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i195; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i196; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i197; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i198; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i199; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i200; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i201; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i202; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i203; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i204; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i205; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i206; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i207; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i208; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i209; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i210; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i211; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i212; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i213; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i214; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i215; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i216; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i217; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i218; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i219; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i220; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i221; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i222; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i223; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i224; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i225; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i226; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i227; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i228; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i229; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i230; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i231; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i232; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i233; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i234; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i235; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i236; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i237; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i238; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i239; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i240; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i241; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i242; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i243; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i244; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i245; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i246; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i247; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i248; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i249; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i250; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i251; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i252; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i253; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i254; ; Technologies: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c85: : i0; @@ -141930,7 +141930,7 @@ for msg in empire.AINotes.Log: i75; ; Traits: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Trait, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c14: : i0; @@ -141963,14 +141963,14 @@ for msg in empire.AINotes.Log: ; ; referrables: - System.Collections.Generic.Dictionary`2[[System.Int64, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Game.Interfaces.IReferrable, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.Dictionary`2[[System.Int64, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Interfaces.IReferrable, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: d1820: : 638654266453923497; - FrEee.Game.Objects.Space.StarSystem, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.StarSystem, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p10: Abilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; BackgroundImagePath: @@ -141983,7 +141983,7 @@ for msg in empire.AINotes.Log: : True; ExploredByEmpires: - System.Collections.Generic.HashSet`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : p31: @@ -142006,7 +142006,7 @@ for msg in empire.AINotes.Log: : 255,85,0,0; Commands: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.ICommand, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.ICommand, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; culture: @@ -142017,7 +142017,7 @@ for msg in empire.AINotes.Log: "Berzerkers"; ; EncounteredEmpires: - System.Collections.Generic.HashSet`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : i0; @@ -142049,14 +142049,14 @@ for msg in empire.AINotes.Log: : 255,170,170,0; Commands: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.ICommand, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.ICommand, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; culture: : i0; EncounteredEmpires: - System.Collections.Generic.HashSet`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : i1; @@ -142067,7 +142067,7 @@ for msg in empire.AINotes.Log: : 7819653652887766237; IncomingMessages: - System.Collections.Generic.HashSet`1[[FrEee.Game.Interfaces.IMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Interfaces.IMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; InsigniaName: @@ -142093,7 +142093,7 @@ for msg in empire.AINotes.Log: : True; KnownDesigns: - System.Collections.Generic.HashSet`1[[FrEee.Game.Interfaces.IDesign, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Interfaces.IDesign, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; LeaderName: @@ -142103,9 +142103,9 @@ for msg in empire.AINotes.Log: : "Leonine"; Log: - System.Collections.Generic.List`1[[FrEee.Game.Objects.LogMessages.LogMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.LogMessages.LogMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.LogMessages.PictorialLogMessage`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.LogMessages.PictorialLogMessage`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p3: Context: : @@ -142123,7 +142123,7 @@ for msg in empire.AINotes.Log: d1: : 1792810221433606453; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -142141,7 +142141,7 @@ for msg in empire.AINotes.Log: : "p0055"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i767; StellarSize: : @@ -142157,7 +142157,7 @@ for msg in empire.AINotes.Log: 1; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 55"; + "Generic FrEee.Objects.Space.Planet 55"; StoredResources: : d0: @@ -142198,7 +142198,7 @@ for msg in empire.AINotes.Log: d0: ; Units: - System.Collections.Generic.HashSet`1[[FrEee.Game.Interfaces.IUnit, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Interfaces.IUnit, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -142206,13 +142206,13 @@ for msg in empire.AINotes.Log: : p4: Container: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i255; IsMemory: : True; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IConstructionOrder, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IConstructionOrder, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; UnspentRate: @@ -142221,7 +142221,7 @@ for msg in empire.AINotes.Log: ; ; Facilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c25: : p3: @@ -142590,7 +142590,7 @@ for msg in empire.AINotes.Log: ; ; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -142601,16 +142601,16 @@ for msg in empire.AINotes.Log: NumberedWaypoints: : a0_9: - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ; PlayerNotes: : @@ -142972,10 +142972,10 @@ for msg in empire.AINotes.Log: ; ; ResearchQueue: - FrEee.Utility.ModReferenceList`1[[FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Utility.ModReferenceList`1[[FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: list: - System.Collections.Generic.List`1[[FrEee.Modding.ModReference`1[[FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.ModReference`1[[FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -142992,7 +142992,7 @@ for msg in empire.AINotes.Log: d0: ; SentMessages: - System.Collections.Generic.HashSet`1[[FrEee.Game.Interfaces.IMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Interfaces.IMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ShipsetPath: @@ -143019,7 +143019,7 @@ for msg in empire.AINotes.Log: c0: ; Waypoints: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -143028,7 +143028,7 @@ for msg in empire.AINotes.Log: : 3283349604017268189; IncomingMessages: - System.Collections.Generic.HashSet`1[[FrEee.Game.Interfaces.IMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Interfaces.IMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; InsigniaName: @@ -143054,7 +143054,7 @@ for msg in empire.AINotes.Log: : True; KnownDesigns: - System.Collections.Generic.HashSet`1[[FrEee.Game.Interfaces.IDesign, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Interfaces.IDesign, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; LeaderName: @@ -143064,9 +143064,9 @@ for msg in empire.AINotes.Log: : "jraenar"; Log: - System.Collections.Generic.List`1[[FrEee.Game.Objects.LogMessages.LogMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.LogMessages.LogMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.LogMessages.PictorialLogMessage`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.LogMessages.PictorialLogMessage`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p3: Context: : @@ -143089,16 +143089,16 @@ for msg in empire.AINotes.Log: NumberedWaypoints: : a0_9: - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; - FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; ; PlayerNotes: : @@ -143460,10 +143460,10 @@ for msg in empire.AINotes.Log: ; ; ResearchQueue: - FrEee.Utility.ModReferenceList`1[[FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Utility.ModReferenceList`1[[FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p1: list: - System.Collections.Generic.List`1[[FrEee.Modding.ModReference`1[[FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Modding.ModReference`1[[FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -143480,7 +143480,7 @@ for msg in empire.AINotes.Log: d0: ; SentMessages: - System.Collections.Generic.HashSet`1[[FrEee.Game.Interfaces.IMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Interfaces.IMessage, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ShipsetPath: @@ -143507,7 +143507,7 @@ for msg in empire.AINotes.Log: c0: ; Waypoints: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Waypoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -143524,12 +143524,12 @@ for msg in empire.AINotes.Log: : 7; SpaceObjectLocations: - System.Collections.Generic.HashSet`1[[FrEee.Game.Objects.Space.ObjectLocation`1[[FrEee.Game.Interfaces.ISpaceObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Objects.Space.ObjectLocation`1[[FrEee.Interfaces.ISpaceObject, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c15: : p1: Item: - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p16: Index: : @@ -143547,7 +143547,7 @@ for msg in empire.AINotes.Log: : "p0227"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i939; StellarSize: : @@ -143563,7 +143563,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Star 2"; + "Generic FrEee.Objects.Space.Star 2"; StoredResources: : d0: @@ -143585,7 +143585,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -143603,7 +143603,7 @@ for msg in empire.AINotes.Log: : "p0169"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i881; StellarSize: : @@ -143619,7 +143619,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 169"; + "Generic FrEee.Objects.Space.Planet 169"; StoredResources: : d0: @@ -143650,9 +143650,9 @@ for msg in empire.AINotes.Log: 66; ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -143667,7 +143667,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -143685,7 +143685,7 @@ for msg in empire.AINotes.Log: : "p0205"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i917; StellarSize: : @@ -143701,7 +143701,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 205"; + "Generic FrEee.Objects.Space.Planet 205"; StoredResources: : d0: @@ -143732,9 +143732,9 @@ for msg in empire.AINotes.Log: 62; ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -143752,7 +143752,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -143770,7 +143770,7 @@ for msg in empire.AINotes.Log: : "p0055"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i767; StellarSize: : @@ -143786,7 +143786,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 55"; + "Generic FrEee.Objects.Space.Planet 55"; StoredResources: : d0: @@ -143827,7 +143827,7 @@ for msg in empire.AINotes.Log: d0: ; Units: - System.Collections.Generic.HashSet`1[[FrEee.Game.Interfaces.IUnit, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Interfaces.IUnit, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -143835,13 +143835,13 @@ for msg in empire.AINotes.Log: : p4: Container: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i258; ID: : 7035318605537021442; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IConstructionOrder, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IConstructionOrder, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; UnspentRate: @@ -143850,7 +143850,7 @@ for msg in empire.AINotes.Log: ; ; Facilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c25: : p4: @@ -144269,7 +144269,7 @@ for msg in empire.AINotes.Log: ; ; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -144287,7 +144287,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -144305,7 +144305,7 @@ for msg in empire.AINotes.Log: : "p0097"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i809; StellarSize: : @@ -144321,7 +144321,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 97"; + "Generic FrEee.Objects.Space.Planet 97"; StoredResources: : d0: @@ -144352,9 +144352,9 @@ for msg in empire.AINotes.Log: 33; ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -144372,7 +144372,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -144390,7 +144390,7 @@ for msg in empire.AINotes.Log: : "p0078"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i790; StellarSize: : @@ -144406,7 +144406,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 78"; + "Generic FrEee.Objects.Space.Planet 78"; StoredResources: : d0: @@ -144437,9 +144437,9 @@ for msg in empire.AINotes.Log: 128; ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -144454,7 +144454,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -144472,7 +144472,7 @@ for msg in empire.AINotes.Log: : "p0202"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i914; StellarSize: : @@ -144488,7 +144488,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 202"; + "Generic FrEee.Objects.Space.Planet 202"; StoredResources: : d0: @@ -144519,9 +144519,9 @@ for msg in empire.AINotes.Log: 74; ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -144539,7 +144539,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -144557,7 +144557,7 @@ for msg in empire.AINotes.Log: : "p0055"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i767; StellarSize: : @@ -144573,7 +144573,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 55"; + "Generic FrEee.Objects.Space.Planet 55"; StoredResources: : d0: @@ -144614,7 +144614,7 @@ for msg in empire.AINotes.Log: d0: ; Units: - System.Collections.Generic.HashSet`1[[FrEee.Game.Interfaces.IUnit, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Interfaces.IUnit, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -144622,13 +144622,13 @@ for msg in empire.AINotes.Log: : p4: Container: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i262; ID: : 2975104259502939362; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IConstructionOrder, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IConstructionOrder, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; UnspentRate: @@ -144637,7 +144637,7 @@ for msg in empire.AINotes.Log: ; ; Facilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c25: : p4: @@ -145056,7 +145056,7 @@ for msg in empire.AINotes.Log: ; ; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -145074,7 +145074,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p13: Index: : @@ -145092,7 +145092,7 @@ for msg in empire.AINotes.Log: : "p0262"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i974; StellarSize: : @@ -145108,7 +145108,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Storm 12"; + "Generic FrEee.Objects.Space.Storm 12"; StoredResources: : d0: @@ -145131,7 +145131,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -145149,7 +145149,7 @@ for msg in empire.AINotes.Log: : "p0135"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i847; StellarSize: : @@ -145165,7 +145165,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 135"; + "Generic FrEee.Objects.Space.Planet 135"; StoredResources: : d0: @@ -145196,9 +145196,9 @@ for msg in empire.AINotes.Log: 66; ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -145216,7 +145216,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -145234,7 +145234,7 @@ for msg in empire.AINotes.Log: : "p0086"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i798; StellarSize: : @@ -145250,7 +145250,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 86"; + "Generic FrEee.Objects.Space.Planet 86"; StoredResources: : d0: @@ -145281,9 +145281,9 @@ for msg in empire.AINotes.Log: 134; ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -145301,7 +145301,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p17: Index: : @@ -145319,7 +145319,7 @@ for msg in empire.AINotes.Log: : "p0279"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i991; StellarSize: : @@ -145335,7 +145335,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.AsteroidField 4"; + "Generic FrEee.Objects.Space.AsteroidField 4"; StoredResources: : d0: @@ -145383,7 +145383,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -145401,7 +145401,7 @@ for msg in empire.AINotes.Log: : "p0223"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i935; StellarSize: : @@ -145417,7 +145417,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 223"; + "Generic FrEee.Objects.Space.Planet 223"; StoredResources: : d0: @@ -145448,9 +145448,9 @@ for msg in empire.AINotes.Log: 137; ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -145468,7 +145468,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: p18: Index: : @@ -145486,7 +145486,7 @@ for msg in empire.AINotes.Log: : "p0223"; IntrinsicAbilities: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: i935; StellarSize: : @@ -145502,7 +145502,7 @@ for msg in empire.AINotes.Log: 0; ModID: : - "Generic FrEee.Game.Objects.Space.Planet 223"; + "Generic FrEee.Objects.Space.Planet 223"; StoredResources: : d0: @@ -145533,9 +145533,9 @@ for msg in empire.AINotes.Log: 23; ; Colony: - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null:n; Orders: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IOrder`1[[FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IOrder`1[[FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; ; @@ -145553,7 +145553,7 @@ for msg in empire.AINotes.Log: : p2: Item: - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i255; Location: : @@ -147525,5342 +147525,5342 @@ for msg in empire.AINotes.Log: i486; : 2300160500122017901; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 1513143022357870818; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 6055565106109783869; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 4408724356094632222; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : 7747407518409120721; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : 786451409664732474; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : 2648957061810489134; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : 3501631850626902214; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : 5546939874970083110; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : 6422267377857006514; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : 1107454516439224314; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : 6872064553639938917; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : 4161994238994366614; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : 4627795382037743934; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : 3948280437426210745; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : 6779008082851151906; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : 437469159360272446; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; : 8793422373088852450; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; : 4614134877781924237; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; : 3420795094365489657; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; : 8039847666749370953; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; : 2171060801240936297; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; : 8998039932144522422; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; : 6962871586848100958; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; : 5652903813399032798; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; : 8991704013572282798; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; : 4582719794776494401; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; : 8439856035472029517; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; : 791896552020196498; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; : 7341764401704837210; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; : 775429063299448513; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; : 5337629248101932278; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; : 2749604560873906802; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; : 900149759556455713; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; : 1473642921119523621; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; : 8949975133545994770; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; : 7599869585064439234; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; : 2306498789516203814; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; : 8969736071907258657; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; : 1938394588904612041; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; : 2931067779448931014; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; : 838335172922000694; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; : 5348546831624980989; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; : 1432513498268393762; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; : 2130952850461338457; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; : 1268588323371885385; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; : 8787695008432499686; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; : 2923705088815518574; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; : 7222699129402008273; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; : 4664916277553645242; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; : 4264422044950820221; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; : 4885113023014448942; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; : 3444155524556770714; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; : 6948462048886142249; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; : 4119877154054243102; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; : 1469045459279007201; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; : 5434679737826428709; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; : 8808414961450906245; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; : 3366980047524866809; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; : 1205286509822602398; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; : 3203506196381546541; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; : 4445257863293471502; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; : 6601448405430821710; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; : 4862271021145357450; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; : 6776301531901426514; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; : 4795013645797515517; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; : 8031795367577299286; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; : 6747618580670925134; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; : 4354177575676130594; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; : 84184597367739678; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; : 3433683921847596374; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; : 7238758888287602249; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; : 8101234620670231570; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; : 2396185987311866645; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; : 7888761274376059605; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; : 4749617207299535009; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; : 2850005649073733101; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; : 8339842001134803910; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; : 201755873887285301; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; : 6057263946063187217; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; : 6993751121791707346; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; : 7751768765638401730; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; : 8534605676857391798; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; : 3769439425233192354; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; : 3022018135715693833; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i84; : 4587050255680212018; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i85; : 6460146549848663521; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i86; : 7125671729421684385; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i87; : 5981556548981914630; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i88; : 710945283340791314; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i89; : 1464403724915624230; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i90; : 7287180263660812370; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i91; : 7201999251060733870; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i92; : 5067779133079503733; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i93; : 2440561537853867117; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i94; : 2074326129051502274; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i95; : 4646041837621732130; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i96; : 2795566191297973945; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i97; : 8288190707277290733; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i98; : 2004912310754885058; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i99; : 4966929976711698177; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i100; : 28580911397530529; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i101; : 8769041647647077929; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i102; : 4088979305370095098; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i103; : 8737378246812578189; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i104; : 152694909164521878; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i105; : 1067979197162163498; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i106; : 3080752036799443121; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i107; : 468665886228475321; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; : 8320391125052428470; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; : 6737364466515584366; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; : 2032448454178280910; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i111; : 770659106982470466; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; : 7228379008899958573; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i113; : 4974823336324088082; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i114; : 8098537544418356742; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i115; : 6320343096686232289; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i116; : 1906100111345735706; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i117; : 7335355090731477713; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i118; : 8748358330699689189; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i119; : 1426327113277462042; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i120; : 5475447009035328489; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i121; : 355084505476036877; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i122; : 5774825668449101133; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i123; : 1378082200930493205; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i124; : 7863148151018944726; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i125; : 3969270732865970841; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i126; : 4242103281767287573; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i127; : 351386280937865237; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i128; : 503798495355096034; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; : 4302710278217492377; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; : 2362704372202994121; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; : 3623765645133060273; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i132; : 6041690557863900390; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i133; : 6136603760193752778; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i134; : 2133211659660598938; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i135; : 5707779906139834581; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i136; : 7027544001770310638; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i137; : 8248920610127471826; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i138; : 5872354557400607049; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i139; : 6374554294130184521; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i140; : 3076847035355869146; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i141; : 8644435979204138638; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i142; : 8521939955746339206; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i143; : 1525765235450235189; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i144; : 8034019404721347541; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i145; : 556777801689848597; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i146; : 6386192916762549953; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i147; : 3657794009578458998; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i148; : 4885650950488153266; - FrEee.Game.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.FacilityTemplate, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i149; : 3631403488551195529; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 1461725194332524894; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 3015537803163160754; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 1393724978621381897; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : 613040584751060397; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : 5173696857660369982; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : 4116367323961455478; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : 6217443909479327594; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : 6663848095459738350; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : 7559577981483349953; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : 1669777782330590186; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : 7089836309026942690; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : 4231236773995299110; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 4404624354545976057; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 2381128570713477214; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Base, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 2790606345886993570; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : 9215434013877495597; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : 8061821836116971393; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : 315731713025939293; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : 5916173540310847238; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 2836899599325765041; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 4099824948190969310; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Fighter, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 5834418056185509729; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 7191597055023030570; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 8591063511563293313; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Satellite, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 4032981513200988510; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 2176487174589325541; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 7445088790673847905; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Mine, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 3200189579687446801; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 1779339460242901090; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 4828765070751797122; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Troop, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 7805041040282212621; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 628411138824920782; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 5776036256520522561; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.WeaponPlatform, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 5314875147033479790; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 4782392832864488989; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 7925834993971203617; - FrEee.Game.Objects.Technology.Hull`1[[FrEee.Game.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Hull`1[[FrEee.Objects.Vehicles.Drone, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 4730054447319150869; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 5463565841009936290; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 2705747808021283178; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 5187233297490935194; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : 3265470651604758397; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : 171575782957441402; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : 4080641863319374770; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : 6713418305864616766; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : 412005054188390190; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : 3393318805606302989; - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : 1931960745078069217; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 4675560606667515085; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 5118155560385073478; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 3227333910424480210; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : 2546486400670375993; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : 7054104311444640514; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : 4137612250832207658; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : 2913522451505884553; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : 6469376597772226694; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : 2454325954548397849; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : 791508836732632529; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : 2755421595857423697; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : 3927861372636552649; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : 8052019982017688826; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : 1191476291596848450; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : 8173343445044487906; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : 4792571733552577229; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; : 5882674066727966261; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; : 4675833792357217250; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; : 8389802529577426457; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; : 5682885459660024722; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; : 3690944740407001762; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; : 4123201664898229214; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; : 1146279620617646469; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; : 6620255629124583721; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; : 240188581263793029; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; : 5843016838406135369; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; : 2304215473233563769; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; : 2404160057949645397; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; : 8674858916174719885; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; : 1746518737521360109; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; : 182046896040344225; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; : 1154632850968139542; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; : 6871672723773707297; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; : 7701489567802433558; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; : 5844686721690042569; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; : 2696326934700847586; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; : 5463170205802682186; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; : 8232370228537949642; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; : 4042998424902616246; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; : 7776883887537777309; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; : 2320068180335848594; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; : 3075768405859588573; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; : 7944434169449244269; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; : 4574402298553887409; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; : 7920581200998621881; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; : 3015258192202386766; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; : 6109980202831051457; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; : 6940442116587598165; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; : 473575179874405318; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; : 5834259288424519726; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; : 113864616665608570; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; : 2664390090478608041; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; : 1090217747536513401; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; : 230284489763044086; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; : 2298249566093702245; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; : 5664259492176004098; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; : 1763241244220156638; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; : 2657201930136154586; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; : 8067534408905963621; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; : 5373538928481187234; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; : 3949365251675394677; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; : 8007767722806829918; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; : 4090836380508543994; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; : 8215674926161993309; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; : 2822206627882140685; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; : 6740597168138693934; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; : 7862575614698785349; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; : 8661264511465554850; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; : 709807546504610714; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; : 685244216233364489; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; : 1130118887050970553; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; : 6005793719436854493; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; : 3376168167977705954; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; : 3698886306732299521; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; : 1107895497911168470; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; : 1713384310388665370; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; : 5913287631526924406; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; : 7721831709727856114; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; : 4403900360499161066; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; : 5890027110864836378; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; : 2448670118277359361; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; : 6889625274745767074; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; : 2847201945963817429; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; : 138177258285838601; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i84; : 8189722431669175725; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i85; : 5805661755503561417; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i86; : 6204566446480680802; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i87; : 1640677179890485657; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i88; : 817617762524232182; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i89; : 1597219575528362629; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i90; : 3825933088556260418; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i91; : 7871099286531373518; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i92; : 2843006544601626938; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i93; : 2117710169213813669; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i94; : 4635175553188042954; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i95; : 8055838869367018101; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i96; : 5333612946875901586; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i97; : 5962449158613909546; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i98; : 158835578523576262; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i99; : 8166044946992251589; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i100; : 8002646137517492089; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i101; : 8605957968512613798; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i102; : 4912444992282622621; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i103; : 4291433635428665265; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i104; : 5614697390669376753; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i105; : 3826457023026520890; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i106; : 4530782241348836125; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i107; : 4858441482277139053; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; : 4034714747252482210; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; : 6361100807297935625; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; : 7980939432943158206; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i111; : 454857497658788618; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; : 7804062835711200357; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i113; : 1307592312938102642; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i114; : 8880544951423987414; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i115; : 2069749016766024826; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i116; : 8171296059905241869; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i117; : 1190045302983768117; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i118; : 1354346905993791830; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i119; : 1434236819535372910; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i120; : 8077607550319404405; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i121; : 2471249869443479214; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i122; : 6742092031505370633; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i123; : 2514040877701704265; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i124; : 7204096097043337610; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i125; : 3886063781723495209; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i126; : 7368071359848428614; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i127; : 2202075997021490969; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i128; : 5863103953763574793; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; : 2506150172379102053; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; : 1853196293356142485; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; : 1790733922574537209; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i132; : 6607126695790873230; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i133; : 5796633828740853885; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i134; : 4073556206666359917; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i135; : 2826207286837286629; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i136; : 5245099546461819778; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i137; : 541576374838091345; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i138; : 933028094969278409; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i139; : 8896590365118819430; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i140; : 8020622688766790738; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i141; : 554188795405025398; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i142; : 294937637461972881; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i143; : 3473079380502792554; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i144; : 8936486273363112490; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i145; : 2327820269884004249; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i146; : 1846528760359133121; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i147; : 9076370179852894929; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i148; : 2251295308598449585; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i149; : 7298440929171305802; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i150; : 4230510254507715245; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i151; : 5988713003875803777; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i152; : 7575326638707970334; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i153; : 1434044164482433246; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i154; : 8865611650790459993; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i155; : 8374334660134618621; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i156; : 5192340769517744938; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i157; : 7828989863812902501; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i158; : 4384771237596648342; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i159; : 4427101825360956594; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i160; : 5019023695150166293; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i161; : 4192007908531502602; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i162; : 7437568354481661433; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i163; : 6322221586531609069; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i164; : 5982883023860862765; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i165; : 5785613827427712450; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i166; : 1442881429057025529; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i167; : 1362188571379831149; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i168; : 7277557526877558778; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i169; : 7006527893577113602; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i170; : 2563567949455081746; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i171; : 5647185923440530597; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i172; : 2463674741137770945; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i173; : 620945283077106462; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i174; : 7146045576795671249; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i175; : 3914487351289177342; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i176; : 2288994255172515766; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i177; : 2262488740690922741; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i178; : 8089438913904055381; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i179; : 2303158344343556961; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i180; : 8907926012168331513; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i181; : 4963667768663278829; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i182; : 7839422511168720261; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i183; : 194226100436201674; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i184; : 2182951443964179061; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i185; : 2602468928525719705; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i186; : 7623155832580618321; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i187; : 2469641790738932673; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i188; : 98264651208706469; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i189; : 790541077522079273; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i190; : 197632344507792606; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i191; : 8911774345813428453; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i192; : 5760229376719264717; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i193; : 3025073352110346145; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i194; : 2640112865158684333; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i195; : 3196339175868114153; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i196; : 2262366471561997149; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i197; : 6101159619909429069; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i198; : 8285635167377622382; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i199; : 7562419179657742245; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i200; : 663636424755811425; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i201; : 2015906765602561781; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i202; : 6224745499908015590; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i203; : 1657840522032338345; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i204; : 8124515430757816454; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i205; : 2268375852360808541; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i206; : 7727566023641290569; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i207; : 7225092182099010017; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i208; : 1764237264315504414; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i209; : 4984401104799773493; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i210; : 4792219013658524774; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i211; : 877263132977179562; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i212; : 7955831672617724541; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i213; : 1339167675533009970; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i214; : 2276739416402610978; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i215; : 8183554910174599254; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i216; : 4710118935717255058; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i217; : 2314113379981409354; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i218; : 3236032533454822174; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i219; : 1483801025575974314; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i220; : 6904280819844391513; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i221; : 5387437769062085578; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i222; : 3940162528333755933; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i223; : 9038449896434299754; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i224; : 524591067680509546; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 2636553728841361590; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 1872790647115941290; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 6175221821178800369; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : 6336095825539847382; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : 7800241087913653278; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : 8175592650696879001; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : 5421425391447733418; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : 4939950254891174613; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : 776929046267139662; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : 6292018543296546033; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : 7403432469825024713; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : 8033145859913355470; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : 1373686138696327034; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : 556920471913420689; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : 7259530080265826229; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : 281472305109927133; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; : 2537124892387878070; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; : 8056158251724934529; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; : 4199082501348768110; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; : 3408116247834386602; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; : 5390436644075775197; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; : 1350908776085010241; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; : 4916502241726834310; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; : 1985957142617713922; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; : 2924921483682721489; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 3988559095975875910; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 128016533899338570; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 8793486265022317993; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : 5417457554632648222; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : 9163059387398130705; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : 8101256447694019678; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : 8110325142286281857; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : 5586821120196034453; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : 2922304568700421878; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : 3340897879379508777; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : 8649609344619172930; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : 9024311602836826321; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : 997719381977777925; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : 8903935102788942950; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : 570429303694220070; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : 3225598726457835034; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; : 3362248488215497122; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; : 8345871490970485809; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; : 2083344177389433605; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; : 6942653148570680190; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; : 2507272713620996481; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; : 747861059808665769; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; : 7224323846809851769; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; : 2886692022748500429; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; : 7138115941889516222; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 4717546076629881261; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 533289450192683046; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 439794325804225226; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : 3671358169127939685; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : 8210755754091287113; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : 8244384437470240786; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : 4693290205887343321; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : 2147955766984825658; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : 5369351670376986166; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : 1532863948803823802; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : 4927494411651910626; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : 1905115601762735849; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : 243372844245760866; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : 5518959468719730486; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : 5760630861671973250; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : 2346141088531720761; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; : 1814754523598644417; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; : 7057826484720443497; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; : 7425171472553409478; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; : 1586195030139824141; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 3996832122107120826; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 1438559369109334978; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 5485062092186864173; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : 8423439261725089086; - FrEee.Game.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.WarpPoint, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : 8565381617189866905; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; : 4117167038281663689; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i225; : 2701492655074098558; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i226; : 2416914727833356730; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i227; : 1402808877397864838; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i228; : 2798478634389839109; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i229; : 6638266651781384013; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i230; : 3036947192921534781; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i231; : 5970846077371717186; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i232; : 6591500075766944565; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i233; : 2069355073775884558; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i234; : 6956024249340295577; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i235; : 6927287714097834254; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i236; : 2447758202231562693; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i237; : 6707724175665184974; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i238; : 2893216069478151841; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i239; : 333052500078855433; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i240; : 5555589501013535121; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i241; : 4070392679786487514; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i242; : 1168635990534805381; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i243; : 4413426220000131194; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i244; : 4279778846539405218; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i245; : 745208823015340302; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i246; : 4715806838214110549; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i247; : 7060686451901910570; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i248; : 657954672652120942; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i249; : 3971727050431213205; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i250; : 6681815335219943605; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i251; : 8552347997770344861; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i252; : 4967578293434792889; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i253; : 5618291608279556890; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i254; : 4893639941842311373; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 4425339660409770509; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 2085398812433471914; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 1496972771143671398; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : 2207012271651961874; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i84; : 347986316108458134; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : 6933365470775966125; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; : 6225676485608597618; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : 2764264014392768781; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; : 5497279487431899869; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; : 6413212607548711482; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : 4457000269515529150; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : 6221137667251513473; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; : 7933224227502492977; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; : 7920727143987272001; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : 5805847057572493754; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : 3234850515505840434; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : 2211543092779944590; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; : 869620496375544201; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; : 3699792750989763634; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; : 6621935700070912290; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; : 4804440789770200350; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : 7479481316806170302; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; : 661859725635302446; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; : 6074561686321603753; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; : 3362440215555501281; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; : 6880459178885211562; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; : 5814931549054463265; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; : 1311331520054193629; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; : 9220912485179161061; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; : 5853455352687276733; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; : 5647507255713598502; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; : 3782618059928429013; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; : 4898099449333344514; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; : 1691005984598699529; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; : 1516742591497299278; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; : 4027790048793777301; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; : 7755952793927197710; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; : 8095047342326102697; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; : 5988966149248112137; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; : 5330513363469102253; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : 2052145517785948429; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : 3384911596106858926; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; : 8459115854229298661; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : 892429959572416350; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; : 8456887461988414290; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; : 8335411304284378922; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : 727804198200845282; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; : 3136068922033628126; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; : 8315624733558304441; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; : 1749146527360848130; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; : 772247695125436833; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; : 5209319479605563154; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; : 440495539344512842; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; : 1995932178388225158; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; : 5174351144388003353; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; : 6070607464552840538; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; : 3859624186399930497; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; : 1264146605635383993; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; : 6529176784616253598; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; : 4350236444967679489; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; : 6407940363396634721; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; : 4788857918283128369; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; : 7787626330884511289; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; : 1148223789102883097; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; : 3131389099900281961; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; : 8152841367126971377; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; : 1641665460454769646; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; : 3821205798444380965; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; : 5148028767311826489; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; : 7002350522487623321; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; : 1830312587354626253; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; : 2058704491189634650; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; : 5364559895626154598; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; : 1645572240014803338; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; : 1421385504297611990; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; : 2035762416582592958; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; : 1887742209950402797; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; : 5476922072602779849; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; : 4960294466990832878; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; : 1646073179230171733; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; : 7449896723091639501; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; : 3762281226582581841; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; : 7823585824294442057; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; : 2318999300415325402; - FrEee.Game.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Technology, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; : 2937383228207047433; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 1523708152274839301; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 1158085953132908013; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 7540783823080096289; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i3; : 8991797094103478365; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i4; : 1014902515328921365; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i5; : 7708373979467920745; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i6; : 6131259377771005994; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i7; : 1046538617351300441; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i8; : 5624098489960390770; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i9; : 2726956940634607162; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i10; : 3378134249386076569; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i11; : 7308977497555769185; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i12; : 4418953009683854158; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i13; : 8460109623761784382; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i14; : 4263618018483448833; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i15; : 9199596545319169885; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i16; : 919250922221884498; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i17; : 6054932500377050610; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i18; : 6464330827245562554; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i19; : 1008004780674888190; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; : 4315270686730496090; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i21; : 4715753322921627309; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i22; : 9115954385140793233; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i23; : 2037715020383595001; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i24; : 4216101283481439345; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; : 1827037812231904661; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; : 428968499962445530; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; : 2309170336482483106; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; : 5741631214853505450; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; : 6135432093115949577; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; : 4669570269753685290; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; : 6075217081150798977; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; : 8571546149387206754; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; : 9150669016640296453; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; : 1089078859649098009; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; : 5062667288775988698; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; : 2290483054045373337; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; : 1852095871195812158; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; : 3049852418588769989; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; : 587747823004404978; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; : 6527180724336170861; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; : 9149150969040166742; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; : 7499871759933781181; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; : 8414648623315440466; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; : 4508426824914416482; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; : 1970851072629818057; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; : 4413541196274591574; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; : 6598440906122805738; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; : 8488539884886510565; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; : 5844514235803515529; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; : 1312537194683030721; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; : 8536476281142816794; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; : 1794735895789675117; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; : 666103642948045961; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; : 5608663262269017333; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; : 6459193024159722581; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; : 2768625734068452129; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; : 79950730278464122; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; : 3582718531035152630; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; : 5877296698956401557; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; : 6269932816448451237; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; : 610944262754466525; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; : 5884685339782204346; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; : 8461111957459054337; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; : 1412778965366053385; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; : 1009795541518317725; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; : 3272296376837140370; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; : 2754547174876103649; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; : 1352729713368647421; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; : 2278584405503094557; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; : 7190918621989270329; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; : 6962720790546408618; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; : 8582427474796359518; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; : 7663363941997512241; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; : 2199181558432522253; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i75; : 729217311160047985; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i76; : 4402361817315104386; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i77; : 7613202718323175662; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i78; : 7523609064915176150; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i79; : 2392528255725342838; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i80; : 1132217734488333297; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i81; : 4406806764867010865; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i82; : 8777474747209370225; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i83; : 7208730383933432786; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i84; : 4748647532533568629; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i85; : 4102086832586812294; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i86; : 1043477130304398889; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i87; : 936078552540168969; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i88; : 3755786299731183749; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i89; : 1871424606998280825; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i90; : 6551341014876548126; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i91; : 8574314118369236346; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i92; : 1130153693465921129; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i93; : 5867582230261682713; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i94; : 1522246403105999341; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i95; : 2946903530020339126; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i96; : 6399797079637406957; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i97; : 8257838353799219082; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i98; : 3304110273325621870; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i99; : 7084102072422919525; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i100; : 1722865072733048497; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i101; : 23737493959955906; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i102; : 8699298242150253742; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i103; : 4486432426250861301; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i104; : 6507682251426243314; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i105; : 7571673133369263821; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i106; : 1458651878945695666; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i107; : 4763115035374127162; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i108; : 6367509199148294206; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i109; : 7104802302951512038; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i110; : 461900419387228170; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i111; : 568215050485667545; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i112; : 9206167140904353670; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i113; : 5461342001434383558; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i114; : 8694909627389375365; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i115; : 197029202250696186; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i116; : 8409676374038915017; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i117; : 5047287191284801046; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i118; : 4979316696747332529; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i119; : 8216728988445352201; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i120; : 9066736834500425157; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i121; : 1189523266889051594; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i122; : 5621636503038320325; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i123; : 5179333357988650882; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i124; : 4146349090481531634; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i125; : 8469683011370829913; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i126; : 4791372415475335258; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i127; : 7891063909421588061; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i128; : 5552699993047019918; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i129; : 6522588639794706530; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i130; : 1281385882798994602; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i131; : 3395727380315105249; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i132; : 6562720169944748430; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i133; : 747079616279326234; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i134; : 5918606433124468126; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i135; : 2866983775045999333; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i136; : 2504232254733966353; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i137; : 8652787723495947986; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i138; : 5820540149275202341; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i139; : 9036478935943083154; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i140; : 2058536016802560205; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i141; : 2292954696053920694; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i142; : 8519786691073361482; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i143; : 4684796092019672462; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i144; : 4892802234241420437; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i145; : 732657657271953278; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i146; : 2947463533625934609; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i147; : 6462577209279291530; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i148; : 6293422473615674166; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i149; : 1909788259890635621; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i150; : 8200483394914881433; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i151; : 7725657932881323542; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i152; : 3906864110759841686; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i153; : 9214235331455413137; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i154; : 802063572828749533; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i155; : 3105353566509802182; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i156; : 3560777072138463294; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i157; : 7434587097423811801; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i158; : 4872871618902239785; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i159; : 2047932146280599841; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i160; : 9035358284486798085; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i161; : 4383772468722232405; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i162; : 4364372032735757702; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i163; : 6895370446336520762; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i164; : 5355759395971598954; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i165; : 3586730752042254022; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i166; : 4476593833001345858; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i167; : 7406389829684850529; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i168; : 5239088808453343481; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i169; : 470711974287598569; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i170; : 395653349195953858; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i171; : 6509790272913746042; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i172; : 6198253952660062653; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i173; : 8668693284465752774; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i174; : 3248686615204508026; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i175; : 856409726735013833; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i176; : 3059331986932245386; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i177; : 7328515312366109773; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i178; : 3953992597898342750; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i179; : 1464757698940126534; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i180; : 3720123751770025553; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i181; : 2263164390585876469; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i182; : 9167430263944084861; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i183; : 2154576424708788305; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i184; : 4863796739557074245; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i185; : 722515530093836265; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i186; : 2671959850075198810; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i187; : 6751554703447511433; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i188; : 3933767596910896749; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i189; : 5591284166740117850; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i190; : 7146327481268980234; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i191; : 5616707083175650645; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i192; : 3055111167953609002; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i193; : 4071855330898459213; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i194; : 354691997004972805; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i195; : 8363338719228258173; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i196; : 6811120007120164066; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i197; : 6577382681480323737; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i198; : 6254719810364869362; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i199; : 1971084572821723661; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i200; : 9126011987362564326; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i201; : 4227814587005112849; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i202; : 2745243073126457329; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i203; : 376393856856199057; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i204; : 2294543000729045657; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i205; : 4677582058794239950; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i206; : 6892353395021242934; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i207; : 2524155877866392374; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i208; : 1078643343255127858; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i209; : 2511602848107199754; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i210; : 6811785460762761837; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i211; : 4403226557440143758; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i212; : 6942687130351910318; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i213; : 2019311506435599813; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i214; : 1680734733523855702; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i215; : 3522456274429768029; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i216; : 515049016152841038; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i217; : 752283613401101333; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i218; : 4383415531170297242; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i219; : 6189222856211492149; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i220; : 5161026180157060114; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i221; : 1326074570816466026; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i222; : 516055567507993701; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i223; : 6134122205400690869; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i224; : 9056861854287994946; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i225; : 5831534604122879065; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i226; : 2983619942696360690; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i227; : 5748005083756754858; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i228; : 8184922109933429098; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i229; : 9120529530331250030; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i230; : 1763595475942696581; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i231; : 2233830451162623510; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i232; : 3332526515677100437; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i233; : 8980694938655937298; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i234; : 5761804178017217345; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i235; : 7971837134526787770; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i236; : 3583262660441629490; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i237; : 3227171904258150530; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i238; : 7376571048583647086; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i239; : 2100252879510359622; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i240; : 9024826397616685162; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i241; : 6086901900451378674; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i242; : 8068907097632995198; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i243; : 3014621858438042313; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i244; : 7145436327095082761; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i245; : 8341325920924815498; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i246; : 3165978713491791430; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i247; : 6576234095556758493; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i248; : 1032296342595639270; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i249; : 5831466030675063062; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i250; : 7147369036607578998; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i251; : 6918267157499003225; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i252; : 8520017829033255386; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i253; : 6860812168826388317; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i254; : 637676792027351214; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i255; : 5269673966338619110; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i256; : 1819825797641100330; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i257; : 9068203411212503573; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i258; : 811142540982778961; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i259; : 5626947341766500970; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i260; : 8656941317646498681; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i261; : 1346120282689191289; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i262; : 2498625320960537349; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i263; : 1385655748688237281; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i264; : 8381854907348244157; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i265; : 1821573643171328218; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i266; : 5415057260620788793; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i267; : 6791927507680261078; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i268; : 7241816080367209801; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i269; : 5062068183788148638; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i270; : 7305871437338290501; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i271; : 2623040988640324670; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i272; : 576734435940896302; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i273; : 4009510418882410250; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i274; : 5932249413913728302; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i275; : 8338893586456942829; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i276; : 1841284570933420770; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i277; : 8559749179900646129; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i278; : 3379415146072100778; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i279; : 6920385693066441666; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i280; : 8192106997510804525; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i281; : 5763152247991719714; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i282; : 5691001899873664986; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i283; : 2644665968576988322; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i284; : 267238096302844093; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i285; : 6600121586954490053; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i286; : 5831449263122747286; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i287; : 8892263872764881470; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i288; : 997241249038740669; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i289; : 3775057594641062462; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i290; : 8663060168571699546; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i291; : 6913300775147801382; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i292; : 1734521863077067550; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i293; : 2285699431142465781; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i294; : 4527811936457586194; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i295; : 8309778252279019882; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i296; : 7077037418159972333; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i297; : 3871702665222809057; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i298; : 395270074904571885; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i299; : 5449232873724895013; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i300; : 3470429213883702794; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i301; : 1762438652271861446; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i302; : 1459748487175068922; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i303; : 6103826279202927789; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i304; : 6446456479037991930; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i305; : 2465282536374476081; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i306; : 149454012743815358; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i307; : 3874837166713708609; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i308; : 4556893340393886541; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i309; : 762498557454720822; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i310; : 1895345951328223694; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i311; : 1797351651130805349; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i312; : 6859090565546326770; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i313; : 8602983274164789398; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i314; : 2441571843010434737; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i315; : 314754805535049818; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i316; : 8169722942234468489; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i317; : 8638352578938982449; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i318; : 4880050888662394662; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i319; : 4050855792689082430; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i320; : 5797706118865408514; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i321; : 9070583132331024742; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i322; : 5287394743695625470; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i323; : 4746455432766318557; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i324; : 8032524223527091085; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i325; : 3185153474716770198; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i326; : 1327266407060681850; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i327; : 4247597738937221306; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i328; : 1582169108187054889; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i329; : 1771482221305453726; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i330; : 4737395293748906026; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i331; : 6801392473134936874; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i332; : 432551069621324338; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i333; : 1780127174424489865; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i334; : 2036079007211768285; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i335; : 2559684551696996589; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i336; : 7794270722597740582; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i337; : 269743058667658301; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i338; : 270881044611941954; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i339; : 5917979531108301297; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i340; : 8371428565004413990; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i341; : 5510801444632749713; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i342; : 5262622712373629198; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i343; : 7354769476771723330; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i344; : 8183450241821644474; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i345; : 5366597917736699714; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i346; : 6264247594011187201; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i347; : 4902318086468595545; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i348; : 1057351446622048493; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i349; : 3373049162728803153; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i350; : 7271677536263446429; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i351; : 4259987912126560033; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i352; : 3491081349368537093; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i353; : 302466337171233010; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i354; : 6565370491182660774; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i355; : 8546794158382604285; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i356; : 2195372351939473654; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i357; : 488222160808245522; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i358; : 9076949923128173637; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i359; : 3286028692946115746; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i360; : 1936683851891804313; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i361; : 5932768855848199250; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i362; : 3732957869958741298; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i363; : 8479958918190220438; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i364; : 4202044791831047437; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i365; : 2499840418747617477; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i366; : 5503480363642481545; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i367; : 6131567249616574501; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i368; : 1916579127168459489; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i369; : 5086761299381084954; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i370; : 419490555116607265; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i371; : 7872799449334703418; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i372; : 4674076291740512449; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i373; : 9151008198797438222; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i374; : 6261381562335901001; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i375; : 2875720511616108253; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i376; : 6740506759077155234; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i377; : 6777618738240954197; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i378; : 1606792550820547937; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i379; : 1521136076751089049; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i380; : 4153819224016770778; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i381; : 6975480459772050165; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i382; : 4391041563428373998; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i383; : 6317934410308280386; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i384; : 2404672988713698642; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i385; : 5771784874554622074; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i386; : 150717678021056037; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i387; : 1168888938338618218; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i388; : 3254169312753990785; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i389; : 7799050952476485877; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i390; : 3918963591972787906; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i391; : 7056772723084795186; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i392; : 7092522218363853117; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i393; : 581674670531212274; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i394; : 4542695948046447670; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i395; : 7427816906118541249; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i396; : 5799427636246124182; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i397; : 2473005385785294186; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i398; : 1249102632284624781; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i399; : 1687751799549185374; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i400; : 8471331625976697226; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i401; : 5035332888556326613; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i402; : 1087934070476620661; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i403; : 9199197379648800113; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i404; : 3360574232654884629; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i405; : 1316973930257471074; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i406; : 7524699196333870054; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i407; : 992428145480327097; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i408; : 6625734968009642573; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i409; : 864452808907272577; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i410; : 5867697670392610846; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i411; : 8129836646126979401; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i412; : 670321567118726190; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i413; : 4855149432795960994; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i414; : 851420959014275662; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i415; : 4574018354247607573; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i416; : 4419151445762771546; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i417; : 2376259855918540930; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i418; : 6702926422319880157; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i419; : 7302355302233515285; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i420; : 2113674111138230578; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i421; : 7789768540311674257; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i422; : 5019694620581096622; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i423; : 7886863354098644770; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i424; : 9123452676481611842; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i425; : 7913996655359667186; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i426; : 4051882161023329609; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i427; : 9204518448989075066; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i428; : 4876893417686406797; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i429; : 6116375280282798637; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i430; : 7300321051104254301; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i431; : 6293960942255257534; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i432; : 1038071252539936613; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i433; : 3881252799878924873; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i434; : 3566047469454603634; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i435; : 16535340614058597; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i436; : 9185117128239337798; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i437; : 7639718274438302058; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i438; : 7842857591650723109; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i439; : 2111432833995464206; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i440; : 479518461126562049; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i441; : 4380516325167632186; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i442; : 5244436815828486402; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i443; : 1816812053450638882; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i444; : 2907290496911963493; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i445; : 7675205510424453762; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i446; : 6590065058474542461; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i447; : 1301470927982198317; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i448; : 4963659350527382590; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i449; : 4739883814978918801; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i450; : 2338221667057790866; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i451; : 2652040667938954785; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i452; : 854494179911824422; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i453; : 1230162247424879594; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i454; : 788800421767101541; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i455; : 258541534856803249; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i456; : 3083860467838868094; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i457; : 3865166635534407386; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i458; : 8048175316274660961; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i459; : 389218921253859049; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i460; : 7937820959198569417; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i461; : 8542498838901286178; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i462; : 7707205439126307578; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i463; : 1846388478137376494; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i464; : 3967267465630768773; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i465; : 1368571124706949026; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i466; : 1501604077326464537; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i467; : 5484393382959057550; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i468; : 4114890920364208389; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i469; : 1319632274494288609; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i470; : 7902315237673184338; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i471; : 4243178303491041185; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i472; : 4491671126708371922; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i473; : 2410461427804972085; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i474; : 6310948757673739029; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i475; : 8487860919276805870; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i476; : 6411001549795825694; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i477; : 3185736069850332121; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i478; : 5997764510008955370; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i479; : 6094937114243554809; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i480; : 4544016341251707502; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i481; : 1768580240753916746; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i482; : 6684265674190712721; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i483; : 6597341995790962898; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i484; : 119982453978528049; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i485; : 8897741124295835437; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i486; : 4936510510074690482; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i487; : 4020433645992483278; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i488; : 5558309787268666725; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i489; : 5056935010677051597; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i490; : 4642387902786296218; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i491; : 6884179324936451777; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i492; : 8049165478034619722; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i493; : 5438248735388658477; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i494; : 5764019522147462545; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i495; : 8845752142929798806; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i496; : 1004701486969334437; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i497; : 7653350311650897122; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i498; : 2430379493249719669; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i499; : 8503751301832193662; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i500; : 4777775657124093109; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i501; : 2781903754306871950; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i502; : 2000931202490861401; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i503; : 7543274732311924529; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i504; : 2348524649351002765; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i505; : 7624717869235773181; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i506; : 5791673047027003417; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i507; : 1781188211734734213; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i508; : 6005674817562287398; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i509; : 6688231844558487846; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i510; : 2354936588844346190; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i511; : 8842532635446216405; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i512; : 7918506680256012354; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i513; : 2099166166885631741; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i514; : 7795146672587417294; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i515; : 8648906842588697113; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i516; : 5753771111708688209; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i517; : 7160599219500278246; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i518; : 6023412577219974234; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i519; : 333284943708806714; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i520; : 1241858577237807210; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i521; : 3881835154494318333; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i522; : 4745722084280737234; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i523; : 2870542215578620449; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i524; : 6459637750843147106; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i525; : 1044247097681128857; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i526; : 4893942668317061669; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i527; : 4801514602782994385; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i528; : 4299065861029579970; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i529; : 8834385262878124754; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i530; : 2601167424586618886; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i531; : 2116160974510867869; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i532; : 2601203124354766614; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i533; : 4171658310542857661; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i534; : 2822376141651300277; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i535; : 6992870215409773358; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i536; : 406604072686643074; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i537; : 5431034427285319150; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i538; : 4058332540473954333; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i539; : 6803981178772049493; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i540; : 4469825531481684666; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i541; : 1173903046366390989; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i542; : 7515155572848171941; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i543; : 6005731193302988442; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i544; : 3870974101330793249; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i545; : 7555494378119822282; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i546; : 5325315731488856861; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i547; : 7037136587883160350; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i548; : 7100083800342716109; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i549; : 6786425869325011777; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i550; : 7930510924864181417; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i551; : 5949203917565877534; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i593; : 2665217619007012197; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i594; : 2978460991191565062; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i595; : 5407744108140145350; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i596; : 491071811478272405; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i597; : 5965877753695298453; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i598; : 5550378820922650557; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i599; : 6277252849466699670; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i600; : 2070289400961021317; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i601; : 7645226071776650954; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i602; : 7641607707860343949; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i603; : 4188931852955539801; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i604; : 3908479327700030853; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i605; : 4660749755551539606; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i606; : 7359263232331958826; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i607; : 527205105034722178; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i608; : 8205449502388176461; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i609; : 732386060720149893; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i610; : 2053968576783428845; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i611; : 2061548249164534166; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i612; : 8737984335417238294; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i613; : 8518580389379299466; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i614; : 3890299478468838009; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i615; : 2919978371464318537; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i616; : 3353912188626076998; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i617; : 4448092644786726558; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i618; : 1126763400902860114; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i619; : 7489169122343927994; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i620; : 4730658087792453394; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i621; : 8327265520854186050; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i622; : 7974679767220256257; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i623; : 1979383531965489750; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i624; : 8302868087989637869; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i625; : 8477883667303170929; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i626; : 1195154544537102990; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i627; : 719056818701781829; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i628; : 4410117815283497581; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i629; : 6465847371607139366; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i630; : 1663102535572320798; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i565; : 8064175375114868337; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i566; : 630564446447571445; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i567; : 5388471026523872333; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i568; : 5763956927294119790; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i569; : 1341562918663331653; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i570; : 1163412408362169642; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i571; : 4828051315907011025; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i572; : 1145031889669066529; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i573; : 3427957158486664769; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i575; : 6719229697261109345; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i576; : 5243504610357192877; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i577; : 1896789438296129565; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i578; : 3782969293763797745; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i579; : 6916323315431280941; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i580; : 7776054383324417914; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i581; : 5747011408713549605; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i582; : 676654668192420950; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i583; : 3369037285319085281; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i584; : 1739152911561823050; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i585; : 8996283058593042545; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i586; : 8084833386114960829; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i587; : 8521693123975953025; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i588; : 1069541422795879294; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i589; : 5024546232816268197; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i590; : 3832306991819248177; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i591; : 2260876951134634186; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i592; : 4303430544232696177; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i564; : 3068435968975795070; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i631; : 1849613156761580869; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i632; : 8942521595764379641; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i633; : 4499811524249578117; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i634; : 204613384347460206; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i635; : 7680334302668910921; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i636; : 4169069570546006689; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i637; : 5554119539867229034; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i638; : 5037600545388212734; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i639; : 2914213632002573385; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i640; : 9166563719932782010; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i641; : 20665475653249465; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i642; : 6453440783052802970; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i643; : 6800389907509433042; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i644; : 2586982607903416845; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i554; : 1826964651759018666; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i555; : 4126516829893383581; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i556; : 5398481770652465885; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i557; : 6448183416667432625; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i558; : 6731149648841166365; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i559; : 4557906566128214081; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i560; : 7439499337417305482; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i552; : 1899678370737027373; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i553; : 4510775897146327665; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i561; : 5012034615131724325; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i562; : 4336644445440199093; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i563; : 5328234969218981134; - FrEee.Game.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Abilities.Ability, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i574; : 9066457172000043642; - FrEee.Game.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Star, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; : 988805658395417853; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i256; : 6518185774332346662; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i257; : 682943754441286797; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i258; : 5531619975740488161; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i259; : 7831148428475521022; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i260; : 3276551117467464765; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i261; : 5265145550392321033; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i262; : 1532334972041960173; - FrEee.Game.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Storm, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; : 8123141685468830553; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i263; : 6039720842913199049; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i264; : 6428700345510221362; - FrEee.Game.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.AsteroidField, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i20; : 5004999278315525977; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i265; : 3982086236666434390; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i266; : 4759755580676237065; - FrEee.Game.Objects.Civilization.Race, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Race, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 1168957975642901973; - FrEee.Game.Objects.Civilization.Race, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Race, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 7819653652887766237; - FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 3283349604017268189; - FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; : 1792810221433606453; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i258; : 3731529458326037366; - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 7035318605537021442; - FrEee.Game.Objects.Civilization.ConstructionQueue, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.ConstructionQueue, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i1; : 6528216799296502482; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i25; : 4402949033833474653; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i26; : 6055651873039057258; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i27; : 1072418767415017889; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i28; : 7639484997584695742; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i29; : 5174269900786670050; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i30; : 8764771170256588317; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i31; : 8068655275110613390; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i32; : 6630275100626718682; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i33; : 5927150729390002082; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i34; : 3185225930815019977; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i35; : 6821906413752119429; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i36; : 676119996303925477; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i37; : 7960927943369831533; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i38; : 3384047087910053430; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i39; : 2475602277630069170; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i40; : 4301644190025710286; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i41; : 8191517642098721845; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i42; : 5837524159352661353; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i43; : 149310672505345402; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i44; : 7559345177076145978; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i45; : 5050043615394744366; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i46; : 528537515558470622; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i47; : 2703324046308129333; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i48; : 5817383898069925974; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i49; : 7901129285534161294; - FrEee.Game.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Space.Planet, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i262; : 7932923906209427321; - FrEee.Game.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.Colony, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 2975104259502939362; - FrEee.Game.Objects.Civilization.ConstructionQueue, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Civilization.ConstructionQueue, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i2; : 6014612687450774337; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i50; : 2760856868378046110; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i51; : 5652030096792348966; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i52; : 3818757821705623549; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i53; : 2086728104810964913; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i54; : 8858898634089807169; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i55; : 3308724786186295470; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i56; : 3702600199311159673; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i57; : 7929240310329859045; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i58; : 7515982130713967654; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i59; : 6229569289345056633; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i60; : 1143273658907921750; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i61; : 4847526132137083221; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i62; : 5917144305998506293; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i63; : 4379144126066872126; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i64; : 7298265222059308261; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i65; : 5476832127397708901; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i66; : 8411856928934078817; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i67; : 7619759758991579581; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i68; : 18890537469331026; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i69; : 3365634760689170953; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i70; : 6224887439987147702; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i71; : 467615998653326198; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i72; : 2725922325963155501; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i73; : 8534513111722271509; - FrEee.Game.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.Technology.Facility, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i74; ; AllowedTrades: : All; Battles: - System.Collections.Generic.HashSet`1[[FrEee.Game.Objects.Combat.IBattle, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.HashSet`1[[FrEee.Objects.Combat.IBattle, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c0: ; Empires: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c2: : i1; @@ -152902,7 +152902,7 @@ for msg in empire.AINotes.Log: : i1; StarSystemLocations: - System.Collections.Generic.List`1[[FrEee.Game.Objects.Space.ObjectLocation`1[[FrEee.Game.Objects.Space.StarSystem, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Objects.Space.ObjectLocation`1[[FrEee.Objects.Space.StarSystem, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: : p2: @@ -152925,13 +152925,13 @@ for msg in empire.AINotes.Log: : 1; VictoryConditions: - System.Collections.Generic.List`1[[FrEee.Game.Interfaces.IVictoryCondition, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: + System.Collections.Generic.List`1[[FrEee.Interfaces.IVictoryCondition, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089: c1: - FrEee.Game.Objects.VictoryConditions.TotalEliminationVictoryCondition, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Objects.VictoryConditions.TotalEliminationVictoryCondition, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; ; WarpPointPlacementStrategy: - FrEee.Game.Setup.WarpPointPlacementStrategies.EdgeAlignedWarpPointPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: + FrEee.Setup.WarpPointPlacementStrategies.EdgeAlignedWarpPointPlacementStrategy, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null: i0; Width: : diff --git a/FrEee.Tests/Game/Setup/GameSetupTest.cs b/FrEee.Tests/Setup/GameSetupTest.cs similarity index 75% rename from FrEee.Tests/Game/Setup/GameSetupTest.cs rename to FrEee.Tests/Setup/GameSetupTest.cs index 40edecb46..8038df452 100644 --- a/FrEee.Tests/Game/Setup/GameSetupTest.cs +++ b/FrEee.Tests/Setup/GameSetupTest.cs @@ -1,19 +1,19 @@ -using FrEee.Game.Objects.Space; -using FrEee.Game.Setup; -using FrEee.Modding; -using NUnit.Framework; - -namespace FrEee.Tests.Game.Setup -{ - public class GameSetupTest - { - [Test] - [Ignore("quickstart needs to be rebuilt in new version")] - public void Quickstart() - { - var setup = GameSetup.Load(@"..\..\..\..\FrEee\GameSetups\quickstart.gsu"); - Mod.Current = Mod.Load(null); - Galaxy.Initialize(setup, null); - } - } +using FrEee.Objects.Space; +using FrEee.Setup; +using FrEee.Modding; +using NUnit.Framework; + +namespace FrEee.Tests.Setup +{ + public class GameSetupTest + { + [Test] + [Ignore("quickstart needs to be rebuilt in new version")] + public void Quickstart() + { + var setup = GameSetup.Load(@"..\..\..\..\FrEee\GameSetups\quickstart.gsu"); + Mod.Current = Mod.Load(null); + Galaxy.Initialize(setup, null); + } + } } \ No newline at end of file diff --git a/FrEee.Tests/TestUtilities.cs b/FrEee.Tests/TestUtilities.cs index 176957f26..ef31e429a 100644 --- a/FrEee.Tests/TestUtilities.cs +++ b/FrEee.Tests/TestUtilities.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; using FrEee.Modding; using System; using System.Reflection; diff --git a/FrEee.Tests/Utility/DataTest.cs b/FrEee.Tests/Utility/DataTest.cs index 0851dfa21..0556e028d 100644 --- a/FrEee.Tests/Utility/DataTest.cs +++ b/FrEee.Tests/Utility/DataTest.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using NUnit.Framework; using System; using System.Collections.Generic; diff --git a/FrEee.Tests/Utility/Extensions/CommonExtensionsTest.cs b/FrEee.Tests/Utility/Extensions/CommonExtensionsTest.cs index 9057e5c1d..480fc61ad 100644 --- a/FrEee.Tests/Utility/Extensions/CommonExtensionsTest.cs +++ b/FrEee.Tests/Utility/Extensions/CommonExtensionsTest.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using NUnit.Framework; using System.Collections.Generic; using System.Linq; diff --git a/FrEee.Tests/Utility/Extensions/EnumerableExtensionsTest.cs b/FrEee.Tests/Utility/Extensions/EnumerableExtensionsTest.cs index 9fbc2ddc8..9c82ff149 100644 --- a/FrEee.Tests/Utility/Extensions/EnumerableExtensionsTest.cs +++ b/FrEee.Tests/Utility/Extensions/EnumerableExtensionsTest.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using NUnit.Framework; using System.Collections.Generic; using System.Linq; diff --git a/FrEee.Tests/Utility/Extensions/ParserTest.cs b/FrEee.Tests/Utility/Extensions/ParserTest.cs index 9881c9a05..7d992ac66 100644 --- a/FrEee.Tests/Utility/Extensions/ParserTest.cs +++ b/FrEee.Tests/Utility/Extensions/ParserTest.cs @@ -1,5 +1,5 @@ -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using NUnit.Framework; using System; diff --git a/FrEee.Tests/Utility/MathXTest.cs b/FrEee.Tests/Utility/MathXTest.cs index 62dee5368..711e8e7f6 100644 --- a/FrEee.Tests/Utility/MathXTest.cs +++ b/FrEee.Tests/Utility/MathXTest.cs @@ -1,4 +1,4 @@ -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using NUnit.Framework; namespace FrEee.Tests.Utility diff --git a/FrEee.Tests/Utility/PrngTest.cs b/FrEee.Tests/Utility/PrngTest.cs index 483cba689..e4d1bea24 100644 --- a/FrEee.Tests/Utility/PrngTest.cs +++ b/FrEee.Tests/Utility/PrngTest.cs @@ -1,4 +1,4 @@ -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using NUnit.Framework; namespace FrEee.Tests.Utility diff --git a/FrEee.Tests/Utility/SerializerTest.cs b/FrEee.Tests/Utility/SerializerTest.cs index 4599c1c4e..eb7d71b95 100644 --- a/FrEee.Tests/Utility/SerializerTest.cs +++ b/FrEee.Tests/Utility/SerializerTest.cs @@ -1,11 +1,11 @@ -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Orders; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using NUnit.Framework; using System.Collections.Generic; using System.IO; @@ -95,7 +95,7 @@ public void NestedCrossAssemblySafeTypeName() public void NestedDictionaries() { var s = SafeType.GetShortTypeName(typeof(IDictionary>>)); - Assert.AreEqual("System.Collections.Generic.IDictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib]], FrEee.Core]], System.Private.CoreLib]], System.Private.CoreLib", s); + Assert.AreEqual("System.Collections.Generic.IDictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib]], FrEee.Core]], System.Private.CoreLib]], System.Private.CoreLib", s); } [Test] @@ -107,17 +107,17 @@ public void LookUpComplexType() Assert.AreEqual(typeof(List>), st.Type); } { - var tname = "FrEee.Game.Objects.Orders.ConstructionOrder`2[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core],[FrEee.Game.Objects.Vehicles.Design`1[[FrEee.Game.Objects.Vehicles.Ship, FrEee.Core]], FrEee.Core"; + var tname = "FrEee.Objects.Orders.ConstructionOrder`2[[FrEee.Objects.Vehicles.Ship, FrEee.Core],[FrEee.Objects.Vehicles.Design`1[[FrEee.Objects.Vehicles.Ship, FrEee.Core]], FrEee.Core"; var st = new SafeType(tname); Assert.AreEqual(typeof(ConstructionOrder>), st.Type); } { - var tname = "System.Collections.Generic.Dictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib]], System.Private.CoreLib"; + var tname = "System.Collections.Generic.Dictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib]], System.Private.CoreLib"; var st = new SafeType(tname); Assert.AreEqual(typeof(Dictionary>), st.Type); } { - var tname = "System.Collections.Generic.IDictionary`2[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.9.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.9.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"; + var tname = "System.Collections.Generic.IDictionary`2[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.9.0, Culture=neutral, PublicKeyToken=null],[System.Collections.Generic.IDictionary`2[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[FrEee.Modding.Formula`1[[System.Int32, System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], FrEee.Core, Version=0.0.9.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"; var st = new SafeType(tname); Assert.AreEqual(typeof(IDictionary>>), st.Type); } @@ -127,7 +127,7 @@ public void LookUpComplexType() public void LegacyLookUpComplexType() { { - var tname = "System.Collections.Generic.List`1[[FrEee.Game.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.9.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; + var tname = "System.Collections.Generic.List`1[[FrEee.Objects.Abilities.AbilityRule, FrEee.Core, Version=0.0.9.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"; var st = new SafeType(tname); Assert.AreEqual(typeof(List), st.Type); } diff --git a/FrEee.Tests/Utility/VectorTest.cs b/FrEee.Tests/Utility/VectorTest.cs index 60aa571b5..055d8fd41 100644 --- a/FrEee.Tests/Utility/VectorTest.cs +++ b/FrEee.Tests/Utility/VectorTest.cs @@ -1,4 +1,4 @@ -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using NUnit.Framework; namespace FrEee.Tests.Utility diff --git a/FrEee.WinForms/Controls/AbilityTreeView.cs b/FrEee.WinForms/Controls/AbilityTreeView.cs index 4789d4731..22026de05 100644 --- a/FrEee.WinForms/Controls/AbilityTreeView.cs +++ b/FrEee.WinForms/Controls/AbilityTreeView.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Abilities; +using FrEee.Objects.Abilities; using System.Collections.Generic; using System.Drawing; using System.Linq; diff --git a/FrEee.WinForms/Controls/AptitudePicker.cs b/FrEee.WinForms/Controls/AptitudePicker.cs index 192069dd7..209a02fd8 100644 --- a/FrEee.WinForms/Controls/AptitudePicker.cs +++ b/FrEee.WinForms/Controls/AptitudePicker.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Utility.Extensions; +using FrEee.Objects.Civilization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Drawing; diff --git a/FrEee.WinForms/Controls/AsteroidFieldReport.cs b/FrEee.WinForms/Controls/AsteroidFieldReport.cs index 7a984db7b..338264609 100644 --- a/FrEee.WinForms/Controls/AsteroidFieldReport.cs +++ b/FrEee.WinForms/Controls/AsteroidFieldReport.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using System; using System.Drawing; diff --git a/FrEee.WinForms/Controls/BattleView.cs b/FrEee.WinForms/Controls/BattleView.cs index 7ea7c5113..3f59307b7 100644 --- a/FrEee.WinForms/Controls/BattleView.cs +++ b/FrEee.WinForms/Controls/BattleView.cs @@ -1,10 +1,10 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Combat.Grid; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Combat; +using FrEee.Objects.Combat.Grid; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using NAudio.MediaFoundation; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Controls/Cargolist.cs b/FrEee.WinForms/Controls/Cargolist.cs index 49b89f394..39e5dd9b7 100644 --- a/FrEee.WinForms/Controls/Cargolist.cs +++ b/FrEee.WinForms/Controls/Cargolist.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; using FrEee.Modding; using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Utility.Extensions; using System.Collections.Generic; @@ -278,4 +278,4 @@ public enum SelectionType Population } } -} \ No newline at end of file +} diff --git a/FrEee.WinForms/Controls/ComponentReport.cs b/FrEee.WinForms/Controls/ComponentReport.cs index e42c91e3e..f1875e3e8 100644 --- a/FrEee.WinForms/Controls/ComponentReport.cs +++ b/FrEee.WinForms/Controls/ComponentReport.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Technology; +using FrEee.Objects.Combat; +using FrEee.Objects.Technology; using FrEee.Modding.Templates; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using System; using System.Collections.Generic; @@ -10,7 +10,7 @@ using System.Drawing; using System.Linq; using System.Windows.Forms; -using Component = FrEee.Game.Objects.Technology.Component; +using Component = FrEee.Objects.Technology.Component; namespace FrEee.WinForms.Controls { diff --git a/FrEee.WinForms/Controls/DesignReport.cs b/FrEee.WinForms/Controls/DesignReport.cs index 420ef9aac..5eb721494 100644 --- a/FrEee.WinForms/Controls/DesignReport.cs +++ b/FrEee.WinForms/Controls/DesignReport.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Technology; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Technology; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Utility.Extensions; using System.Linq; diff --git a/FrEee.WinForms/Controls/EmpireReport.cs b/FrEee.WinForms/Controls/EmpireReport.cs index 796d9452e..c07d02772 100644 --- a/FrEee.WinForms/Controls/EmpireReport.cs +++ b/FrEee.WinForms/Controls/EmpireReport.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Civilization; +using FrEee.Objects.Civilization; using FrEee.WinForms.Interfaces; using System.Windows.Forms; diff --git a/FrEee.WinForms/Controls/FacilityReport.cs b/FrEee.WinForms/Controls/FacilityReport.cs index 744c91a3b..c2ee2e9d5 100644 --- a/FrEee.WinForms/Controls/FacilityReport.cs +++ b/FrEee.WinForms/Controls/FacilityReport.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Objects.Technology; +using FrEee.Objects.Technology; using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using System; using System.Windows.Forms; diff --git a/FrEee.WinForms/Controls/FleetReport.cs b/FrEee.WinForms/Controls/FleetReport.cs index ae4786a14..ad024e9ca 100644 --- a/FrEee.WinForms/Controls/FleetReport.cs +++ b/FrEee.WinForms/Controls/FleetReport.cs @@ -1,10 +1,10 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Utility.Extensions; using System; diff --git a/FrEee.WinForms/Controls/GalaxyView.cs b/FrEee.WinForms/Controls/GalaxyView.cs index 02ae5a03e..e3bd12af1 100644 --- a/FrEee.WinForms/Controls/GalaxyView.cs +++ b/FrEee.WinForms/Controls/GalaxyView.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Objects.GalaxyViewModes; using System; using System.Drawing; diff --git a/FrEee.WinForms/Controls/GameGridView.cs b/FrEee.WinForms/Controls/GameGridView.cs index 2b1aec999..4b73771e5 100644 --- a/FrEee.WinForms/Controls/GameGridView.cs +++ b/FrEee.WinForms/Controls/GameGridView.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using FrEee.WinForms.DataGridView; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Controls/GameProgressBar.cs b/FrEee.WinForms/Controls/GameProgressBar.cs index e516c38d6..1981839eb 100644 --- a/FrEee.WinForms/Controls/GameProgressBar.cs +++ b/FrEee.WinForms/Controls/GameProgressBar.cs @@ -1,5 +1,5 @@ -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Drawing; using System.Windows.Forms; diff --git a/FrEee.WinForms/Controls/GameTabControl.cs b/FrEee.WinForms/Controls/GameTabControl.cs index 382d6ce4a..d45bb6749 100644 --- a/FrEee.WinForms/Controls/GameTabControl.cs +++ b/FrEee.WinForms/Controls/GameTabControl.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System.Drawing; using System.Linq; using System.Windows.Forms; diff --git a/FrEee.WinForms/Controls/LineGraph.cs b/FrEee.WinForms/Controls/LineGraph.cs index adab82d61..4a9e00e2d 100644 --- a/FrEee.WinForms/Controls/LineGraph.cs +++ b/FrEee.WinForms/Controls/LineGraph.cs @@ -3,7 +3,7 @@ using System.Drawing; using System.Linq; using System.Windows.Forms; -using FrEee.Utility.Extensions; +using FrEee.Extensions; namespace FrEee.WinForms.Controls { diff --git a/FrEee.WinForms/Controls/MountReport.cs b/FrEee.WinForms/Controls/MountReport.cs index 9578473c6..5e372d373 100644 --- a/FrEee.WinForms/Controls/MountReport.cs +++ b/FrEee.WinForms/Controls/MountReport.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Objects.Technology; +using FrEee.Objects.Technology; using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Utility.Extensions; using System; diff --git a/FrEee.WinForms/Controls/PlanetReport.cs b/FrEee.WinForms/Controls/PlanetReport.cs index 105c1c8bf..bb947630d 100644 --- a/FrEee.WinForms/Controls/PlanetReport.cs +++ b/FrEee.WinForms/Controls/PlanetReport.cs @@ -1,10 +1,10 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Enumerations; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Utility.Extensions; using System; diff --git a/FrEee.WinForms/Controls/ResourceDisplay.cs b/FrEee.WinForms/Controls/ResourceDisplay.cs index a3f263e87..4cebe7b0c 100644 --- a/FrEee.WinForms/Controls/ResourceDisplay.cs +++ b/FrEee.WinForms/Controls/ResourceDisplay.cs @@ -1,5 +1,5 @@ -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.ComponentModel; using System.Drawing; diff --git a/FrEee.WinForms/Controls/ResourceQuantityDisplay.cs b/FrEee.WinForms/Controls/ResourceQuantityDisplay.cs index 919970ad9..0ef71eb56 100644 --- a/FrEee.WinForms/Controls/ResourceQuantityDisplay.cs +++ b/FrEee.WinForms/Controls/ResourceQuantityDisplay.cs @@ -1,4 +1,4 @@ -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using FrEee.WinForms.Interfaces; using System.Windows.Forms; diff --git a/FrEee.WinForms/Controls/SearchBox.cs b/FrEee.WinForms/Controls/SearchBox.cs index 560977fbf..0f4995d5e 100644 --- a/FrEee.WinForms/Controls/SearchBox.cs +++ b/FrEee.WinForms/Controls/SearchBox.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Extensions; using FrEee.WinForms.Forms; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Controls/SpaceVehicleReport.cs b/FrEee.WinForms/Controls/SpaceVehicleReport.cs index 005568733..c6e02956d 100644 --- a/FrEee.WinForms/Controls/SpaceVehicleReport.cs +++ b/FrEee.WinForms/Controls/SpaceVehicleReport.cs @@ -1,11 +1,11 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Utility.Extensions; using System; diff --git a/FrEee.WinForms/Controls/StarReport.cs b/FrEee.WinForms/Controls/StarReport.cs index dcd43928d..76df255b2 100644 --- a/FrEee.WinForms/Controls/StarReport.cs +++ b/FrEee.WinForms/Controls/StarReport.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Objects.Space; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using System; using System.Drawing; diff --git a/FrEee.WinForms/Controls/StarSystemReport.cs b/FrEee.WinForms/Controls/StarSystemReport.cs index b58fea41b..3ec922bed 100644 --- a/FrEee.WinForms/Controls/StarSystemReport.cs +++ b/FrEee.WinForms/Controls/StarSystemReport.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using System.Linq; using System.Windows.Forms; diff --git a/FrEee.WinForms/Controls/StarSystemView.cs b/FrEee.WinForms/Controls/StarSystemView.cs index ce9a3a9b5..b570726b3 100644 --- a/FrEee.WinForms/Controls/StarSystemView.cs +++ b/FrEee.WinForms/Controls/StarSystemView.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Extensions; using System; using System.Drawing; using System.Linq; diff --git a/FrEee.WinForms/Controls/StormReport.cs b/FrEee.WinForms/Controls/StormReport.cs index 7f58c7d38..73828507e 100644 --- a/FrEee.WinForms/Controls/StormReport.cs +++ b/FrEee.WinForms/Controls/StormReport.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Objects.Space; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using System; using System.Drawing; diff --git a/FrEee.WinForms/Controls/TraitPicker.cs b/FrEee.WinForms/Controls/TraitPicker.cs index 3bd98a232..cbbd39ca8 100644 --- a/FrEee.WinForms/Controls/TraitPicker.cs +++ b/FrEee.WinForms/Controls/TraitPicker.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Civilization; +using FrEee.Objects.Civilization; using System; using System.Collections.Generic; using System.Data; diff --git a/FrEee.WinForms/Controls/WarpPointReport.cs b/FrEee.WinForms/Controls/WarpPointReport.cs index a892fcd05..2bfabe9ff 100644 --- a/FrEee.WinForms/Controls/WarpPointReport.cs +++ b/FrEee.WinForms/Controls/WarpPointReport.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Objects.Space; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using System; using System.Drawing; diff --git a/FrEee.WinForms/DataGridView/DataGridViewProgressCell.cs b/FrEee.WinForms/DataGridView/DataGridViewProgressCell.cs index 99181e238..0855dfa8f 100644 --- a/FrEee.WinForms/DataGridView/DataGridViewProgressCell.cs +++ b/FrEee.WinForms/DataGridView/DataGridViewProgressCell.cs @@ -1,5 +1,5 @@ -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Drawing; using System.Windows.Forms; diff --git a/FrEee.WinForms/DataGridView/GridColumnConfig.cs b/FrEee.WinForms/DataGridView/GridColumnConfig.cs index d4ca6ef0c..f08966349 100644 --- a/FrEee.WinForms/DataGridView/GridColumnConfig.cs +++ b/FrEee.WinForms/DataGridView/GridColumnConfig.cs @@ -1,4 +1,4 @@ -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Drawing; using System.Windows.Forms; diff --git a/FrEee.WinForms/Forms/ActivateAbilityForm.cs b/FrEee.WinForms/Forms/ActivateAbilityForm.cs index e9c7de964..c4342284c 100644 --- a/FrEee.WinForms/Forms/ActivateAbilityForm.cs +++ b/FrEee.WinForms/Forms/ActivateAbilityForm.cs @@ -1,10 +1,10 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/BattleReplayForm.cs b/FrEee.WinForms/Forms/BattleReplayForm.cs index 0636d09bc..6bf8b1bfa 100644 --- a/FrEee.WinForms/Forms/BattleReplayForm.cs +++ b/FrEee.WinForms/Forms/BattleReplayForm.cs @@ -1,10 +1,10 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Combat.Grid; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Combat.Grid; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Extensions; using FrEee.WinForms.Controls; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Objects; diff --git a/FrEee.WinForms/Forms/BattleResultsForm.cs b/FrEee.WinForms/Forms/BattleResultsForm.cs index f164ffe68..414d9926b 100644 --- a/FrEee.WinForms/Forms/BattleResultsForm.cs +++ b/FrEee.WinForms/Forms/BattleResultsForm.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.DataGridView; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Utility.Extensions; @@ -144,9 +144,9 @@ private void btnClose_Click(object sender, EventArgs e) private void btnReplay_Click(object sender, EventArgs e) { Form form; - //if (Battle is FrEee.Game.Objects.Combat.Simple.Battle b) + //if (Battle is FrEee.Objects.Combat.Simple.Battle b) // form = new LogForm(MainGameForm.Instance, b.Log); - if (Battle is FrEee.Game.Objects.Combat.Grid.Battle b2) + if (Battle is FrEee.Objects.Combat.Grid.Battle b2) form = new BattleReplayForm(b2); else throw new Exception($"Unknown battle type {Battle.GetType()}!"); diff --git a/FrEee.WinForms/Forms/CargoTransferForm.cs b/FrEee.WinForms/Forms/CargoTransferForm.cs index 062795968..8341e6031 100644 --- a/FrEee.WinForms/Forms/CargoTransferForm.cs +++ b/FrEee.WinForms/Forms/CargoTransferForm.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Extensions; using FrEee.WinForms.Controls; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/CombatSimulatorForm.cs b/FrEee.WinForms/Forms/CombatSimulatorForm.cs index e05597b9b..e259af6ad 100644 --- a/FrEee.WinForms/Forms/CombatSimulatorForm.cs +++ b/FrEee.WinForms/Forms/CombatSimulatorForm.cs @@ -1,13 +1,13 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Combat.Grid; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Combat.Grid; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; using FrEee.Modding; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/CommandsForm.cs b/FrEee.WinForms/Forms/CommandsForm.cs index c5e2a208a..c14cd697e 100644 --- a/FrEee.WinForms/Forms/CommandsForm.cs +++ b/FrEee.WinForms/Forms/CommandsForm.cs @@ -1,11 +1,11 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; using FrEee.Modding.Templates; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/ConstructionQueueForm.cs b/FrEee.WinForms/Forms/ConstructionQueueForm.cs index 60e7640c1..3efacafa1 100644 --- a/FrEee.WinForms/Forms/ConstructionQueueForm.cs +++ b/FrEee.WinForms/Forms/ConstructionQueueForm.cs @@ -1,12 +1,12 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Controls; using FrEee.WinForms.Utility.Extensions; using System; diff --git a/FrEee.WinForms/Forms/ConstructionQueueListForm.Designer.cs b/FrEee.WinForms/Forms/ConstructionQueueListForm.Designer.cs index 4f56a3a10..ead210425 100644 --- a/FrEee.WinForms/Forms/ConstructionQueueListForm.Designer.cs +++ b/FrEee.WinForms/Forms/ConstructionQueueListForm.Designer.cs @@ -226,7 +226,7 @@ private void InitializeComponent() // constructionQueueBindingSource // this.constructionQueueBindingSource.AllowNew = false; - this.constructionQueueBindingSource.DataSource = typeof(FrEee.Game.Objects.Civilization.ConstructionQueue); + this.constructionQueueBindingSource.DataSource = typeof(FrEee.Objects.Civilization.ConstructionQueue); // // dataGridViewTextBoxColumn1 // diff --git a/FrEee.WinForms/Forms/ConstructionQueueListForm.cs b/FrEee.WinForms/Forms/ConstructionQueueListForm.cs index 58b913cb9..e64d618a1 100644 --- a/FrEee.WinForms/Forms/ConstructionQueueListForm.cs +++ b/FrEee.WinForms/Forms/ConstructionQueueListForm.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Drawing; diff --git a/FrEee.WinForms/Forms/CultureComparisonForm.Designer.cs b/FrEee.WinForms/Forms/CultureComparisonForm.Designer.cs index 7b6ac5a28..17f79016f 100644 --- a/FrEee.WinForms/Forms/CultureComparisonForm.Designer.cs +++ b/FrEee.WinForms/Forms/CultureComparisonForm.Designer.cs @@ -160,7 +160,7 @@ private void InitializeComponent() // cultureBindingSource // this.cultureBindingSource.AllowNew = false; - this.cultureBindingSource.DataSource = typeof(FrEee.Game.Objects.Civilization.Culture); + this.cultureBindingSource.DataSource = typeof(FrEee.Objects.Civilization.Culture); // // btnClose // diff --git a/FrEee.WinForms/Forms/DebugForm.cs b/FrEee.WinForms/Forms/DebugForm.cs index 0c067047c..dccbd6ba0 100644 --- a/FrEee.WinForms/Forms/DebugForm.cs +++ b/FrEee.WinForms/Forms/DebugForm.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; using FrEee.Modding; using System; using System.Drawing; @@ -19,11 +19,11 @@ public DebugForm() rtbOutput.AppendText("Imported Mod.\n"); rtbOutput.AppendText("Mod.Current is currently: " + OrNil(Mod.Current) + "\n"); - PythonScriptEngine.EvaluateExpression("from FrEee.Game.Objects.Space import Galaxy"); + PythonScriptEngine.EvaluateExpression("from FrEee.Objects.Space import Galaxy"); rtbOutput.AppendText("Imported Galaxy.\n"); rtbOutput.AppendText("Galaxy.Current is currently: " + OrNil(Galaxy.Current) + "\n"); - PythonScriptEngine.EvaluateExpression("from FrEee.Game.Objects.Civilization import Empire"); + PythonScriptEngine.EvaluateExpression("from FrEee.Objects.Civilization import Empire"); rtbOutput.AppendText("Imported Empire.\n"); rtbOutput.AppendText("Empire.Current is currently: " + OrNil(Empire.Current) + "\n"); diff --git a/FrEee.WinForms/Forms/DesignListForm.cs b/FrEee.WinForms/Forms/DesignListForm.cs index e44c18f9a..bc1b48a59 100644 --- a/FrEee.WinForms/Forms/DesignListForm.cs +++ b/FrEee.WinForms/Forms/DesignListForm.cs @@ -1,11 +1,11 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/DiplomacyForm.cs b/FrEee.WinForms/Forms/DiplomacyForm.cs index 043cad9e9..acc3e13d4 100644 --- a/FrEee.WinForms/Forms/DiplomacyForm.cs +++ b/FrEee.WinForms/Forms/DiplomacyForm.cs @@ -1,15 +1,15 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Civilization.Diplomacy; -using FrEee.Game.Objects.Civilization.Diplomacy.Clauses; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Civilization.Diplomacy; +using FrEee.Objects.Civilization.Diplomacy.Clauses; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/EditorForm.cs b/FrEee.WinForms/Forms/EditorForm.cs index b94301536..4519fb44d 100644 --- a/FrEee.WinForms/Forms/EditorForm.cs +++ b/FrEee.WinForms/Forms/EditorForm.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Utility.Extensions; using System; diff --git a/FrEee.WinForms/Forms/EmpireListForm.cs b/FrEee.WinForms/Forms/EmpireListForm.cs index c6e43f4b9..a49fa7b3a 100644 --- a/FrEee.WinForms/Forms/EmpireListForm.cs +++ b/FrEee.WinForms/Forms/EmpireListForm.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Data; diff --git a/FrEee.WinForms/Forms/EmpireSetupForm.cs b/FrEee.WinForms/Forms/EmpireSetupForm.cs index 328d635c9..4ac9b2a39 100644 --- a/FrEee.WinForms/Forms/EmpireSetupForm.cs +++ b/FrEee.WinForms/Forms/EmpireSetupForm.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Setup; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Setup; using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Data; diff --git a/FrEee.WinForms/Forms/FleetTransferForm.cs b/FrEee.WinForms/Forms/FleetTransferForm.cs index f059ef89e..1cbf3fa1e 100644 --- a/FrEee.WinForms/Forms/FleetTransferForm.cs +++ b/FrEee.WinForms/Forms/FleetTransferForm.cs @@ -1,10 +1,10 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Controls; using FrEee.WinForms.Utility.Extensions; using System; diff --git a/FrEee.WinForms/Forms/GameForm.cs b/FrEee.WinForms/Forms/GameForm.cs index faeca6af7..2be9ca73c 100644 --- a/FrEee.WinForms/Forms/GameForm.cs +++ b/FrEee.WinForms/Forms/GameForm.cs @@ -1,10 +1,10 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Extensions; using FrEee.WinForms.Objects; using FrEee.WinForms.Utility.Extensions; using System; diff --git a/FrEee.WinForms/Forms/GameOverForm.cs b/FrEee.WinForms/Forms/GameOverForm.cs index 531dd90ed..d0334c03c 100644 --- a/FrEee.WinForms/Forms/GameOverForm.cs +++ b/FrEee.WinForms/Forms/GameOverForm.cs @@ -1,4 +1,4 @@ -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using FrEee.WinForms.Objects; using System; using System.IO; diff --git a/FrEee.WinForms/Forms/GameSetupForm.Designer.cs b/FrEee.WinForms/Forms/GameSetupForm.Designer.cs index 3b812e70a..dbe156748 100644 --- a/FrEee.WinForms/Forms/GameSetupForm.Designer.cs +++ b/FrEee.WinForms/Forms/GameSetupForm.Designer.cs @@ -582,7 +582,7 @@ private void InitializeComponent() // // warpPointPlacementStrategyBindingSource // - this.warpPointPlacementStrategyBindingSource.DataSource = typeof(FrEee.Game.Setup.WarpPointPlacementStrategies.WarpPointPlacementStrategy); + this.warpPointPlacementStrategyBindingSource.DataSource = typeof(FrEee.Setup.WarpPointPlacementStrategies.WarpPointPlacementStrategy); // // label3 // diff --git a/FrEee.WinForms/Forms/GameSetupForm.cs b/FrEee.WinForms/Forms/GameSetupForm.cs index d860af999..f9b14f294 100644 --- a/FrEee.WinForms/Forms/GameSetupForm.cs +++ b/FrEee.WinForms/Forms/GameSetupForm.cs @@ -1,14 +1,14 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Objects.VictoryConditions; -using FrEee.Game.Setup; -using FrEee.Game.Setup.WarpPointPlacementStrategies; +using FrEee.Enumerations; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Objects.VictoryConditions; +using FrEee.Setup; +using FrEee.Setup.WarpPointPlacementStrategies; using FrEee.Modding; using FrEee.Modding.Templates; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/GenericPickerForm.cs b/FrEee.WinForms/Forms/GenericPickerForm.cs index 4d6d55d53..936be6ea4 100644 --- a/FrEee.WinForms/Forms/GenericPickerForm.cs +++ b/FrEee.WinForms/Forms/GenericPickerForm.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/HostConsoleForm.Designer.cs b/FrEee.WinForms/Forms/HostConsoleForm.Designer.cs index 5ffe79c8e..1ceff2675 100644 --- a/FrEee.WinForms/Forms/HostConsoleForm.Designer.cs +++ b/FrEee.WinForms/Forms/HostConsoleForm.Designer.cs @@ -115,7 +115,7 @@ private void InitializeComponent() // empireStatusBindingSource // this.empireStatusBindingSource.AllowNew = false; - this.empireStatusBindingSource.DataSource = typeof(FrEee.Game.Objects.Civilization.EmpireStatus); + this.empireStatusBindingSource.DataSource = typeof(FrEee.Objects.Civilization.EmpireStatus); // // btnClose // diff --git a/FrEee.WinForms/Forms/HostConsoleForm.cs b/FrEee.WinForms/Forms/HostConsoleForm.cs index ad8caa7ab..9bf3a1d80 100644 --- a/FrEee.WinForms/Forms/HostConsoleForm.cs +++ b/FrEee.WinForms/Forms/HostConsoleForm.cs @@ -1,12 +1,12 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Processes; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Processes; using FrEee.Modding; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Data; diff --git a/FrEee.WinForms/Forms/HullPickerForm.Designer.cs b/FrEee.WinForms/Forms/HullPickerForm.Designer.cs index 3a4df032c..35cd9496f 100644 --- a/FrEee.WinForms/Forms/HullPickerForm.Designer.cs +++ b/FrEee.WinForms/Forms/HullPickerForm.Designer.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; namespace FrEee.WinForms.Forms { partial class HullPickerForm diff --git a/FrEee.WinForms/Forms/HullPickerForm.cs b/FrEee.WinForms/Forms/HullPickerForm.cs index 000d12c08..dff902c9c 100644 --- a/FrEee.WinForms/Forms/HullPickerForm.cs +++ b/FrEee.WinForms/Forms/HullPickerForm.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Data; diff --git a/FrEee.WinForms/Forms/LogForm.cs b/FrEee.WinForms/Forms/LogForm.cs index 7eb0601c1..d9f78181e 100644 --- a/FrEee.WinForms/Forms/LogForm.cs +++ b/FrEee.WinForms/Forms/LogForm.cs @@ -1,10 +1,10 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; +using FrEee.Interfaces; +using FrEee.Objects.Combat; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; using FrEee.Modding.Templates; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/MainGameForm.cs b/FrEee.WinForms/Forms/MainGameForm.cs index 3a5e24cfd..6af97b54d 100644 --- a/FrEee.WinForms/Forms/MainGameForm.cs +++ b/FrEee.WinForms/Forms/MainGameForm.cs @@ -1,15 +1,15 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Civilization.Diplomacy; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Processes; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Civilization.Diplomacy; +using FrEee.Objects.Commands; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Processes; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Controls; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Objects; diff --git a/FrEee.WinForms/Forms/MainMenuForm.cs b/FrEee.WinForms/Forms/MainMenuForm.cs index 1f86aa646..0d84be2bc 100644 --- a/FrEee.WinForms/Forms/MainMenuForm.cs +++ b/FrEee.WinForms/Forms/MainMenuForm.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Setup; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Setup; using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Objects; using FrEee.WinForms.Utility; using FrEee.WinForms.Utility.Extensions; diff --git a/FrEee.WinForms/Forms/MinistersForm.cs b/FrEee.WinForms/Forms/MinistersForm.cs index ebee9b9fb..df4f3e835 100644 --- a/FrEee.WinForms/Forms/MinistersForm.cs +++ b/FrEee.WinForms/Forms/MinistersForm.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/ModErrorsForm.cs b/FrEee.WinForms/Forms/ModErrorsForm.cs index 22d33e8c1..5496c219c 100644 --- a/FrEee.WinForms/Forms/ModErrorsForm.cs +++ b/FrEee.WinForms/Forms/ModErrorsForm.cs @@ -1,5 +1,5 @@ using FrEee.Modding; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Utility.Extensions; using System; diff --git a/FrEee.WinForms/Forms/ModPickerForm.cs b/FrEee.WinForms/Forms/ModPickerForm.cs index beea6994a..a35b1bd83 100644 --- a/FrEee.WinForms/Forms/ModPickerForm.cs +++ b/FrEee.WinForms/Forms/ModPickerForm.cs @@ -1,7 +1,7 @@ using FrEee.Modding; using FrEee.Modding.Loaders; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/MountPickerForm.Designer.cs b/FrEee.WinForms/Forms/MountPickerForm.Designer.cs index e08a98901..ba9d51c4b 100644 --- a/FrEee.WinForms/Forms/MountPickerForm.Designer.cs +++ b/FrEee.WinForms/Forms/MountPickerForm.Designer.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; namespace FrEee.WinForms.Forms { partial class MountPickerForm @@ -99,7 +99,7 @@ private void InitializeComponent() // mountBindingSource // this.mountBindingSource.AllowNew = false; - this.mountBindingSource.DataSource = typeof(FrEee.Game.Objects.Technology.Mount); + this.mountBindingSource.DataSource = typeof(FrEee.Objects.Technology.Mount); // // btnOk // diff --git a/FrEee.WinForms/Forms/MountPickerForm.cs b/FrEee.WinForms/Forms/MountPickerForm.cs index d49fb8c44..97a258b59 100644 --- a/FrEee.WinForms/Forms/MountPickerForm.cs +++ b/FrEee.WinForms/Forms/MountPickerForm.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Technology; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Technology; using FrEee.Modding; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Data; using System.Drawing; diff --git a/FrEee.WinForms/Forms/OptionsForm.cs b/FrEee.WinForms/Forms/OptionsForm.cs index be4f22a4a..ed743d19f 100644 --- a/FrEee.WinForms/Forms/OptionsForm.cs +++ b/FrEee.WinForms/Forms/OptionsForm.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Civilization; +using FrEee.Objects.Civilization; using FrEee.WinForms.Objects; using System; using System.IO; diff --git a/FrEee.WinForms/Forms/PlanetListForm.Designer.cs b/FrEee.WinForms/Forms/PlanetListForm.Designer.cs index 2789cc1a1..c3eb231d6 100644 --- a/FrEee.WinForms/Forms/PlanetListForm.Designer.cs +++ b/FrEee.WinForms/Forms/PlanetListForm.Designer.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; using FrEee.WinForms.Controls; namespace FrEee.WinForms.Forms diff --git a/FrEee.WinForms/Forms/PlanetListForm.cs b/FrEee.WinForms/Forms/PlanetListForm.cs index d8d0c223c..320550ffb 100644 --- a/FrEee.WinForms/Forms/PlanetListForm.cs +++ b/FrEee.WinForms/Forms/PlanetListForm.cs @@ -1,10 +1,10 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.DataGridView; using FrEee.WinForms.Objects; using System; diff --git a/FrEee.WinForms/Forms/RecycleForm.cs b/FrEee.WinForms/Forms/RecycleForm.cs index 6057987a8..50935c0ad 100644 --- a/FrEee.WinForms/Forms/RecycleForm.cs +++ b/FrEee.WinForms/Forms/RecycleForm.cs @@ -1,12 +1,12 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Orders.RecycleBehaviors; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Orders; +using FrEee.Objects.Orders.RecycleBehaviors; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/ResearchForm.Designer.cs b/FrEee.WinForms/Forms/ResearchForm.Designer.cs index c08cbfd96..cbb918d81 100644 --- a/FrEee.WinForms/Forms/ResearchForm.Designer.cs +++ b/FrEee.WinForms/Forms/ResearchForm.Designer.cs @@ -159,7 +159,7 @@ private void InitializeComponent() // technologyBindingSource // this.technologyBindingSource.AllowNew = false; - this.technologyBindingSource.DataSource = typeof(FrEee.Game.Objects.Technology.Technology); + this.technologyBindingSource.DataSource = typeof(FrEee.Objects.Technology.Technology); // // ddlGroup // diff --git a/FrEee.WinForms/Forms/ResearchForm.cs b/FrEee.WinForms/Forms/ResearchForm.cs index c5bed7600..f24da2394 100644 --- a/FrEee.WinForms/Forms/ResearchForm.cs +++ b/FrEee.WinForms/Forms/ResearchForm.cs @@ -1,11 +1,11 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/ScoresForm.cs b/FrEee.WinForms/Forms/ScoresForm.cs index 8e268c60f..c5cc7353a 100644 --- a/FrEee.WinForms/Forms/ScoresForm.cs +++ b/FrEee.WinForms/Forms/ScoresForm.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Extensions; using FrEee.WinForms.DataGridView; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/SearchBoxResultsForm.cs b/FrEee.WinForms/Forms/SearchBoxResultsForm.cs index ecc84a948..5d7cc6161 100644 --- a/FrEee.WinForms/Forms/SearchBoxResultsForm.cs +++ b/FrEee.WinForms/Forms/SearchBoxResultsForm.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/ShipListForm.Designer.cs b/FrEee.WinForms/Forms/ShipListForm.Designer.cs index ca5ee7f03..95d0ec4af 100644 --- a/FrEee.WinForms/Forms/ShipListForm.Designer.cs +++ b/FrEee.WinForms/Forms/ShipListForm.Designer.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; using FrEee.WinForms.Controls; namespace FrEee.WinForms.Forms diff --git a/FrEee.WinForms/Forms/ShipListForm.cs b/FrEee.WinForms/Forms/ShipListForm.cs index 026af1cac..6954fac2b 100644 --- a/FrEee.WinForms/Forms/ShipListForm.cs +++ b/FrEee.WinForms/Forms/ShipListForm.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.DataGridView; using FrEee.WinForms.Objects; using System; diff --git a/FrEee.WinForms/Forms/SpaceObjectPickerForm.cs b/FrEee.WinForms/Forms/SpaceObjectPickerForm.cs index 5e5f9a531..dd0fb0de5 100644 --- a/FrEee.WinForms/Forms/SpaceObjectPickerForm.cs +++ b/FrEee.WinForms/Forms/SpaceObjectPickerForm.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Forms/StatusForm.cs b/FrEee.WinForms/Forms/StatusForm.cs index 4f7d79dec..63542d47b 100644 --- a/FrEee.WinForms/Forms/StatusForm.cs +++ b/FrEee.WinForms/Forms/StatusForm.cs @@ -1,5 +1,5 @@ -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Threading; using System.Windows.Forms; diff --git a/FrEee.WinForms/Forms/TechTreeForm.cs b/FrEee.WinForms/Forms/TechTreeForm.cs index e0b8e4942..b39c83be6 100644 --- a/FrEee.WinForms/Forms/TechTreeForm.cs +++ b/FrEee.WinForms/Forms/TechTreeForm.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Technology; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Technology; using FrEee.Modding; using FrEee.Modding.Templates; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using FrEee.WinForms.Controls; using FrEee.WinForms.Interfaces; using FrEee.WinForms.Utility.Extensions; diff --git a/FrEee.WinForms/Forms/VehicleDesignForm.cs b/FrEee.WinForms/Forms/VehicleDesignForm.cs index 1f6d40a97..69c2abbb9 100644 --- a/FrEee.WinForms/Forms/VehicleDesignForm.cs +++ b/FrEee.WinForms/Forms/VehicleDesignForm.cs @@ -1,11 +1,11 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; using FrEee.Modding; using FrEee.Modding.Templates; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Controls; using FrEee.WinForms.Utility.Extensions; using System; @@ -32,7 +32,7 @@ public VehicleDesignForm(IHull hull) { InitializeComponent(); ShowComponentDetails(null); - Design = FrEee.Game.Objects.Vehicles.Design.Create(hull); + Design = FrEee.Objects.Vehicles.Design.Create(hull); try { this.Icon = new Icon(FrEee.WinForms.Properties.Resources.FrEeeIcon); } catch { } @@ -285,7 +285,7 @@ private void btnHull_Click(object sender, EventArgs e) // Changing vehicle types requires starting over, so warn the user if (MessageBox.Show("Changing the vehicle type requires starting over with your design. Abandon your old design?", "FrEee", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { - var d = FrEee.Game.Objects.Vehicles.Design.Create(form.Hull.VehicleType); + var d = FrEee.Objects.Vehicles.Design.Create(form.Hull.VehicleType); d.TurnNumber = Galaxy.Current.TurnNumber; d.Owner = Empire.Current; d.Hull = form.Hull; @@ -301,7 +301,7 @@ private void btnHull_Click(object sender, EventArgs e) } else { - var d = FrEee.Game.Objects.Vehicles.Design.Create(form.Hull.VehicleType); + var d = FrEee.Objects.Vehicles.Design.Create(form.Hull.VehicleType); d.TurnNumber = Galaxy.Current.TurnNumber; d.Owner = Empire.Current; d.Hull = form.Hull; diff --git a/FrEee.WinForms/GamePropertyGrid.cs b/FrEee.WinForms/GamePropertyGrid.cs index 8bac5af7b..3408a1b0a 100644 --- a/FrEee.WinForms/GamePropertyGrid.cs +++ b/FrEee.WinForms/GamePropertyGrid.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; +using FrEee.Interfaces; +using FrEee.Objects.Space; using FrEee.Modding; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Controls; using FrEee.WinForms.Interfaces; using System; diff --git a/FrEee.WinForms/Objects/ClientSettings.cs b/FrEee.WinForms/Objects/ClientSettings.cs index 2357b1556..6ec873506 100644 --- a/FrEee.WinForms/Objects/ClientSettings.cs +++ b/FrEee.WinForms/Objects/ClientSettings.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.DataGridView; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/ArgbMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/ArgbMode.cs index d24cd3275..79d748bfc 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/ArgbMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/ArgbMode.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Space; +using FrEee.Objects.Space; using FrEee.WinForms.Utility.Extensions; using System.Drawing; using System.Linq; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/ColoniesMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/ColoniesMode.cs index 0cb974200..c01c6fb62 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/ColoniesMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/ColoniesMode.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Drawing; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/ConstructionMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/ConstructionMode.cs index 9ec5491b3..a9785e337 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/ConstructionMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/ConstructionMode.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System.Drawing; using System.Linq; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/ForcesMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/ForcesMode.cs index eab34e046..0b0492272 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/ForcesMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/ForcesMode.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; using System; using System.Collections.Generic; using System.Drawing; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/IGalaxyViewMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/IGalaxyViewMode.cs index 6e9e6e49b..1acd17ffa 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/IGalaxyViewMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/IGalaxyViewMode.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; +using FrEee.Interfaces; +using FrEee.Objects.Space; using System.Drawing; namespace FrEee.WinForms.Objects.GalaxyViewModes diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/PieMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/PieMode.cs index ceef573a0..a8caffd7e 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/PieMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/PieMode.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Space; +using FrEee.Objects.Space; using FrEee.WinForms.Utility.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/PresenceMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/PresenceMode.cs index 03647a87f..85e7beffb 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/PresenceMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/PresenceMode.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; using System; using System.Collections.Generic; using System.Drawing; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/RepairMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/RepairMode.cs index 0b098b5e6..c305bbb12 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/RepairMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/RepairMode.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Extensions; using System.Drawing; using System.Linq; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/ResearchIntelMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/ResearchIntelMode.cs index 1c763d1f4..bdd436b17 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/ResearchIntelMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/ResearchIntelMode.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System.Drawing; using System.Linq; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/ResourcesMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/ResourcesMode.cs index d07750be0..4697c666d 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/ResourcesMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/ResourcesMode.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System.Drawing; using System.Linq; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/SpaceYardMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/SpaceYardMode.cs index 8cbbb6dd4..2b9366ac3 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/SpaceYardMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/SpaceYardMode.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System.Drawing; using System.Linq; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/UtilityMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/UtilityMode.cs index 2e64aa7b9..f2f188460 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/UtilityMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/UtilityMode.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Extensions; using System.Drawing; using System.Linq; diff --git a/FrEee.WinForms/Objects/GalaxyViewModes/WarpPointsMode.cs b/FrEee.WinForms/Objects/GalaxyViewModes/WarpPointsMode.cs index c50da8c92..3c3062bee 100644 --- a/FrEee.WinForms/Objects/GalaxyViewModes/WarpPointsMode.cs +++ b/FrEee.WinForms/Objects/GalaxyViewModes/WarpPointsMode.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Space; +using FrEee.Objects.Space; using System; using System.Collections.Generic; using System.Drawing; diff --git a/FrEee.WinForms/Objects/Music.cs b/FrEee.WinForms/Objects/Music.cs index 51f0d01a5..9e349a09a 100644 --- a/FrEee.WinForms/Objects/Music.cs +++ b/FrEee.WinForms/Objects/Music.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using NAudio.Vorbis; using NAudio.Wave; using NAudio.Wave.SampleProviders; diff --git a/FrEee.WinForms/Program.cs b/FrEee.WinForms/Program.cs index b0bb28b74..40a886897 100644 --- a/FrEee.WinForms/Program.cs +++ b/FrEee.WinForms/Program.cs @@ -1,12 +1,12 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Processes; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Processes; using FrEee.Modding; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using FrEee.WinForms.Forms; using FrEee.WinForms.Utility; using FrEee.WinForms.Utility.Extensions; diff --git a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Interfaces.IHull.datasource b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Interfaces.IHull.datasource index 13cafba1a..048727d37 100644 --- a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Interfaces.IHull.datasource +++ b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Interfaces.IHull.datasource @@ -6,5 +6,5 @@ cause the file to be unrecognizable by the program. --> - FrEee.Game.Interfaces.IHull, FrEee, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + FrEee.Interfaces.IHull, FrEee, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.ConstructionQueue.datasource b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.ConstructionQueue.datasource index c42dc0b9c..a684692d3 100644 --- a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.ConstructionQueue.datasource +++ b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.ConstructionQueue.datasource @@ -6,5 +6,5 @@ cause the file to be unrecognizable by the program. --> - FrEee.Game.Objects.Civilization.ConstructionQueue, FrEee, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + FrEee.Objects.Civilization.ConstructionQueue, FrEee, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.Culture.datasource b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.Culture.datasource index b48ac6cdd..5b64d4c73 100644 --- a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.Culture.datasource +++ b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.Culture.datasource @@ -6,5 +6,5 @@ cause the file to be unrecognizable by the program. --> - FrEee.Game.Objects.Civilization.Culture, FrEee.Core, Version=0.0.4.0, Culture=neutral, PublicKeyToken=1f58fa7bbe756d08 + FrEee.Objects.Civilization.Culture, FrEee.Core, Version=0.0.4.0, Culture=neutral, PublicKeyToken=1f58fa7bbe756d08 \ No newline at end of file diff --git a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.Empire.datasource b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.Empire.datasource index 73b83b7a9..b6bf2b50a 100644 --- a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.Empire.datasource +++ b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.Empire.datasource @@ -6,5 +6,5 @@ cause the file to be unrecognizable by the program. --> - FrEee.Game.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null + FrEee.Objects.Civilization.Empire, FrEee.Core, Version=0.0.8.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.EmpireStatus.datasource b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.EmpireStatus.datasource index 10cfa56cf..f9eff14ed 100644 --- a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.EmpireStatus.datasource +++ b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Civilization.EmpireStatus.datasource @@ -6,5 +6,5 @@ cause the file to be unrecognizable by the program. --> - FrEee.Game.Objects.Civilization.EmpireStatus, FrEee.Core, Version=0.0.4.0, Culture=neutral, PublicKeyToken=null + FrEee.Objects.Civilization.EmpireStatus, FrEee.Core, Version=0.0.4.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Technology.Mount.datasource b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Technology.Mount.datasource index a7b60b4ae..c0e13e171 100644 --- a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Technology.Mount.datasource +++ b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Technology.Mount.datasource @@ -6,5 +6,5 @@ cause the file to be unrecognizable by the program. --> - FrEee.Game.Objects.Technology.Mount, FrEee.Core, Version=0.0.2.0, Culture=neutral, PublicKeyToken=null + FrEee.Objects.Technology.Mount, FrEee.Core, Version=0.0.2.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Technology.Technology.datasource b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Technology.Technology.datasource index 6146a9513..bde601383 100644 --- a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Technology.Technology.datasource +++ b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Objects.Technology.Technology.datasource @@ -6,5 +6,5 @@ cause the file to be unrecognizable by the program. --> - FrEee.Game.Objects.Technology.Technology, FrEee, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + FrEee.Objects.Technology.Technology, FrEee, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Setup.WarpPointPlacementStrategies.WarpPointPlacementStrategy.datasource b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Setup.WarpPointPlacementStrategies.WarpPointPlacementStrategy.datasource index 922f2d9cf..37595e94c 100644 --- a/FrEee.WinForms/Properties/DataSources/FrEee.Game.Setup.WarpPointPlacementStrategies.WarpPointPlacementStrategy.datasource +++ b/FrEee.WinForms/Properties/DataSources/FrEee.Game.Setup.WarpPointPlacementStrategies.WarpPointPlacementStrategy.datasource @@ -6,5 +6,5 @@ cause the file to be unrecognizable by the program. --> - FrEee.Game.Setup.WarpPointPlacementStrategies.WarpPointPlacementStrategy, FrEee, Version=0.0.2.0, Culture=neutral, PublicKeyToken=null + FrEee.Setup.WarpPointPlacementStrategies.WarpPointPlacementStrategy, FrEee, Version=0.0.2.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/FrEee.WinForms/Utility/Extensions/GuiExtensions.cs b/FrEee.WinForms/Utility/Extensions/GuiExtensions.cs index f27050402..c3369ab9a 100644 --- a/FrEee.WinForms/Utility/Extensions/GuiExtensions.cs +++ b/FrEee.WinForms/Utility/Extensions/GuiExtensions.cs @@ -1,4 +1,4 @@ -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using FrEee.WinForms.Forms; using System; using System.Collections.Generic; diff --git a/FrEee/ClassDiagram1.cd b/FrEee/ClassDiagram1.cd index 990b25348..6c0ad76b2 100644 --- a/FrEee/ClassDiagram1.cd +++ b/FrEee/ClassDiagram1.cd @@ -7,7 +7,7 @@ FrEeeConstants.cs - + AAAAAAAAAAAAgAAAAAAAAAAAAACAAAAAAQAAAAAAAAA= @@ -15,7 +15,7 @@ - + AAAAQESAAGAggAAEAAAAABAAAAAAAAAAAAAgAAAAAAA= @@ -23,7 +23,7 @@ - + ABCAQAAAACAiAAAEgAEAAAQIgAAAAEAAAAABAAAAAAE= @@ -31,7 +31,7 @@ - + AAAAAAAAACAAAAAEgAQAAAQAAAAAAAAAAAAAAAAgAEA= @@ -39,7 +39,7 @@ - + CQAEMAICBAAAAAAAAAAAIBQBACAAGEAAAIAiBAAIACA= @@ -47,7 +47,7 @@ - + AAAAAEAAIBAAgAMYSAAQQAQACCQAgAAAMgAAgAAUBAA= @@ -55,7 +55,7 @@ - + ACAAAAAgAAAAAAAEAABAAgFAAgAAAAAAEAAAAAAEAAA= @@ -63,7 +63,7 @@ - + AACAAASAACAAgAAICAAGQBABAEAAwCABJACAAAAAAAg= @@ -71,7 +71,7 @@ - + SAUAACSgAKgAgAAECAAGABQCMCIAjACAIQQBACGAAAw= @@ -79,7 +79,7 @@ - + AAAEAAAAACggAABFgAAAAAQAACAAAJIAJAAAAAAAACA= @@ -87,7 +87,7 @@ - + SQBAogCBACIBxAw8CkDXatQjCYhAgFM+J6yDlGFEAYw= @@ -95,14 +95,14 @@ - + ACAAAAAAAAAgAAAAAABAAAQAAAAAAAAAAQAAAAAIAAA= Game\Objects\Civilization\EmpireStatus.cs - + AKgMAgMgAiAoAIA0ogAAFMQKghQABABBCIAIEMIIAgQ= @@ -110,7 +110,7 @@ - + AgABgYCAACgAgAEEgAAEQBQBACAAoAEABAAAEAMAAAA= @@ -118,21 +118,21 @@ - + AAAAAAAACAAAAAAAAAAAAAQAAAAAAQAAAAAAAAAAAAA= Game\Objects\Civilization\SectorWaypoint.cs - + QAAAAEAACAAAAAAAAAAAAAQAAAAAAQAAAAAAAAAAAAA= Game\Objects\Civilization\SpaceObjectWaypoint.cs - + AAAAAQCAACAwAAAEgAAEQBQBAAAAAAAAJAAAEAEAAAA= @@ -140,7 +140,7 @@ - + AAAAAACACCAAgAAECAACABQCAAAAgQAAIAAAAAAEAAg= @@ -148,49 +148,49 @@ - + AAAAAQAAAAEgAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAA= Game\Objects\Civilization\Diplomacy\AcceptProposalAction.cs - + AAAAAAAAAAAgAAAAIAAAACAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Civilization\Diplomacy\Action.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQ= Game\Objects\Civilization\Diplomacy\ActionMessage.cs - + AAAAAAAAAAAgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Civilization\Diplomacy\BreakTreatyAction.cs - + AAAAAAAAAAAgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Civilization\Diplomacy\DeclareWarAction.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA= Game\Objects\Civilization\Diplomacy\GeneralMessage.cs - + AAAAAACAACAAgAAACIACABAAAAgAkAAAIAAAGAEEAAg= @@ -198,7 +198,7 @@ - + AQBAAACAIAAAgQAEAIgAAQAAABAAgAAAAAQAgAAEAAA= @@ -206,7 +206,7 @@ - + AAAAAACAACAggAQECIACAAAAAAABiAAAIAAAJEAEAAg= @@ -214,28 +214,28 @@ - + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA= Game\Objects\Civilization\Diplomacy\ProposalMessage.cs - + AAAAAQAAAAEgAAQAAAAAAAAAAAAAAAAAAAAAAAAEAAA= Game\Objects\Civilization\Diplomacy\RejectProposalAction.cs - + AAAAAABAAAIAAQAAAAAAAAAAABAAAAAAgAAAAAAAAAA= Game\Objects\Civilization\Diplomacy\Clauses\AllianceClause.cs - + AAAAAACAACIEgAAECAACABAAABAEgAAgpAAAIAAEAAg= @@ -243,63 +243,63 @@ - + AAAAAAAAAAIAAAAAAAAAAAAAABAAAAAAgAAAAAAAAAA= Game\Objects\Civilization\Diplomacy\Clauses\CooperativeResearchClause.cs - + AAAAAAAAIAIAAAAAAAAAgACAABAAAAAAgAAAAAAAAAA= Game\Objects\Civilization\Diplomacy\Clauses\FreeTradeClause.cs - + AAAAAAAAAAIAAAAEAAAAAEAAABAAAAAAgAAAAAAAAAA= Game\Objects\Civilization\Diplomacy\Clauses\ShareAbilityClause.cs - + AAAAAAAAAAIAAAAAAAAAAAAAABAAAAAAgAAAAAAAAAA= Game\Objects\Civilization\Diplomacy\Clauses\ShareCombatLogsClause.cs - + AAAAAAAAAAIAAAAAAAAAAAAAABAAAAAAgAAAAAAAAAA= Game\Objects\Civilization\Diplomacy\Clauses\ShareDesignsClause.cs - + AAAAAAAAAAIAAAAAAAAAAAAAABAAAAAAgAAAAAAAAAA= Game\Objects\Civilization\Diplomacy\Clauses\ShareVisionClause.cs - + AAAAAAAAIAIAAAAAAAAAAAAABBAAAAAAgAgAgAAAAAA= Game\Objects\Civilization\Diplomacy\Clauses\TributeClause.cs - + AABAAAAAAAAAAAAAAIACAASAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat\BeamWeaponDisplayEffect.cs - + AAAAAAAAAAAAAAAAIAAAACAIAAAIAAAAAAQAAAAAAAA= @@ -307,21 +307,21 @@ - + AABAAAAAAAAAAAAAAIACAASAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat\ProjectileWeaponDisplayEffect.cs - + AABAAAAAAAAAAAAAAIACAASAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat\SeekerWeaponDisplayEffect.cs - + AgABAAEAAAABCAAEIAAABAAgSAAAIAgAAAQAAAAAAAA= @@ -329,7 +329,7 @@ - + ABBAEAAAAAAAAAAAAIACAASAAAAAAAAAAAAAEAEAAAA= @@ -337,7 +337,7 @@ - + TAoJCAiUCDKAo0AJSgLC4DQMGCBDiQBgYIQQkIUQACo= @@ -345,98 +345,98 @@ - + AABAAAAEQAAAAAAAIAAAAAAgIAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\combatObjects.cs - + AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAACCAAA= Game\Objects\Combat2\combatObjects.cs - + IAAAAAAAAAAIgAAAAAAAAAAgAAAAAACBAAAAAAAAAEA= Game\Objects\Combat2\combatObjects.cs - + EggAAgASQIQBIAAAHAAyAAAAAAGEJAAAQgAAiEABKQA= Game\Objects\Combat2\combatObjects.cs - + AAAAAACAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEA= Game\Objects\Combat2\combatObjects.cs - + AAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAgAAAAEAAAgAA= Game\Objects\Combat2\CombatPlanet.cs - + AAAAAAAAAgAQAAAAAAAAAAAAAgABAAAQAAAAAAAAAAA= Game\Objects\Combat2\CombatReplayLog.cs - + AAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAQAA= Game\Objects\Combat2\CombatReplayLog.cs - + AAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\CombatReplayLog.cs - + AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAA= Game\Objects\Combat2\CombatReplayLog.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAACAAAABAA= Game\Objects\Combat2\CombatReplayLog.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\CombatReplayLog.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\CombatReplayLog.cs - + AAAAgECYQLQBAAMSCAAQQBAACCSAgAAAIgAAhEBRJAA= @@ -444,7 +444,7 @@ - + AABAAACAAAAACAAAIAAAACAACAAAAAgAAAQAAAAAAAA= @@ -452,189 +452,189 @@ - + gACAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA= Game\Objects\Combat2\CombatVehicle.cs - + IAAAAAiIAEAAAAAABAAIAIAICAECAAAAAIAACAIAAAA= Game\Objects\Combat2\CombatWeapon.cs - + QAAAAAAAAIABAAAAAAAAAAAAAAAEAAAAAAAQAAAAgBA= Game\Objects\Combat2\ControlledCombatObject.cs - + AAIAAAAAECIQQIAAAEAAAAQCmEAkABAAgAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyBlocks.cs - + AAAAAgSEMCAAgAAACAICABQARAAAgAAAIAAAAAAEBAg= @@ -642,21 +642,21 @@ - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Combat2\StrategyObject.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAgAAgAAAAAAAAAAAAAA= Game\Objects\Combat2\Tactics\Tactic.cs - + BAACgACAACAAgQBACAAGQBQAEAAAgAAAIIAAAAAEAAg= @@ -664,7 +664,7 @@ - + AABkAACAICAAgQAACAACABAAAAAAgAAAIQAgAAAEAAg= @@ -672,21 +672,21 @@ - + AAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAgAAAAAAA= Game\Objects\Combat2\Tactics\TacticNode.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAgAAAAAAA= Game\Objects\Combat2\Tactics\TacticNode.cs - + AAAFAACAACAAgQAACAACABAAAAAAgAAAIQAgAAAEAAg= @@ -694,35 +694,35 @@ - + AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAgAAAAAAA= Game\Objects\Combat2\Tactics\TacticNode.cs - + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAQAAAAgAABAAAA= Game\Objects\Combat2\Tactics\TacticNode.cs - + AAAAAAAAAAAAAQAAAAAAAAAAAAIAAAAAAAAhAAAAAAA= Game\Objects\Combat2\Tactics\TacticNode.cs - + AAEAAAAAAAAAAAQAAAAAAAAEAIAAAAAAAAAAAAAEAAA= Game\Objects\Commands\AddOrderCommand.cs - + AAEAAAAAQAAAAAQAAAAEABAEAAAAAAAAAAAAAAAFAAA= @@ -730,7 +730,7 @@ - + AAAAAAAAAAAACIQAAAAAAAAEAAAAAAAAAAAAAAAAAAA= @@ -738,70 +738,70 @@ - + AAAAAAAACAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAGAAA= Game\Objects\Commands\CreateFleetCommand.cs - + AAAAAAAAAAAAAAQAAAAAAgAEAAAAAAIAAAAAAAAAAAA= Game\Objects\Commands\CreateWaypointCommand.cs - + AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAIAAAACA= Game\Objects\Commands\DeleteMessageCommand.cs - + AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Commands\DeleteWaypointCommand.cs - + AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Commands\DisbandFleetCommand.cs - + AAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAABAAAAA= Game\Objects\Commands\EditStrategyCommand.cs - + IAAAAAAAAAAAAAQAAAAAAAAAAAAAAAIAAAAAAAAAAAA= Game\Objects\Commands\HotkeyWaypointCommand.cs - + AAAAAAAAAAAAAAQAAAAAAAAAAEAAAAAAAAIAAAAGAAA= Game\Objects\Commands\JoinFleetCommand.cs - + AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Commands\LeaveFleetCommand.cs - + AAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA= @@ -809,56 +809,56 @@ - + AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAI= Game\Objects\Commands\RearrangeOrdersCommand.cs - + AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Commands\RemoveOrderCommand.cs - + AAAAAAAAAAAAAEQQAABAEAACQAAAAAAQACAAAAAAAAI= Game\Objects\Commands\ResearchCommand.cs - + AAAAAAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAIAAEAAA= Game\Objects\Commands\SendMessageCommand.cs - + AAAAAgAAAAAACAQAAAgAAAAAAAAAAAAAAAAAAAAEAAA= Game\Objects\Commands\SetObsoleteFlagCommand.cs - + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\LogMessages\GenericLogMessage.cs - + AAAAgAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAACAAAAAA= Game\Objects\LogMessages\LogMessage.cs - + AAAAgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= @@ -866,7 +866,7 @@ - + AQAAAACAEiAAggYBIAIAADAAAAAAAAAAAAAAgAAEAAA= @@ -874,7 +874,7 @@ - + AQAAAACAECAAgAQFAAAAABAAAAAAggAAAAIAgAAEAAA= @@ -882,7 +882,7 @@ - + AQAAAACAEGAAiARBAAAAABAEAAEAgAAAAAAAgAEEAAA= @@ -890,14 +890,14 @@ - + AIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Orders\EvadeOrder.cs - + AQAAAACAGCAIgAYFAAAAABAAABAAgAAEAAAAoAAEAAA= @@ -905,7 +905,7 @@ - + AYAAAACQGCAIgAYFIAQAADBAABAAgAAEAAAAoAAEAAA= @@ -913,14 +913,14 @@ - + AIAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Orders\PursueOrder.cs - + AQAAAACAECAAgAQFKAAAADAAAAAAAAAAAAAAgAAEAAA= @@ -928,7 +928,7 @@ - + AQAAAACAECAAgAQFCAAAABAAAAAAAAAAAAAAgAAEAAA= @@ -936,7 +936,7 @@ - + AQAAAACAECAAgAQFAAAAABAAAAAAgAAAAAAAgAAEAAA= @@ -944,7 +944,7 @@ - + AQAAAACAECAAgAQFIAAAEDABAAAAAAAAAAAAgAAEAAA= @@ -952,7 +952,7 @@ - + AQAAAACAECAAmAQBAACAABAgAAEAoAAAAACAgAEEAAA= @@ -960,7 +960,7 @@ - + AQAAAACAGCAAgAYFAAAIABAACAAAgAAEAAAAoAAEAAA= @@ -968,7 +968,7 @@ - + AYAAAACAGCAIgAYFIAAAADAAABAAgAAEAAAAoAAEAAA= @@ -976,7 +976,7 @@ - + AIAAAAAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAA= @@ -984,7 +984,7 @@ - + AAAAAEAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAA= @@ -992,7 +992,7 @@ - + AAAAAEAAACAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAA= @@ -1000,7 +1000,7 @@ - + AAAAAAAAACAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA= @@ -1008,7 +1008,7 @@ - + AAAAAACEAAAAgACAAAQAAAAFAAAAACBAAAAAAAACQAA= @@ -1016,7 +1016,7 @@ - + GCmAgkSgCDCCgAMcCABe4dSJGWQApSQBN4CRlCEUhBw= @@ -1024,7 +1024,7 @@ - + 8AAQjJQxBRpxFaAtGDSOQGZZxQTQEAItBBAGDkEMjIg= @@ -1032,21 +1032,21 @@ - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA= Game\Objects\Space\Galaxy.cs - + AAAAAAAAAAAAAAAEgAIAAAAEAAAAAIAAAAAAAAAAAiA= Game\Objects\Space\ObjectLocation.cs - + CAGEgkSsqDSAgSMQiAVc4YCNGWSBhCTBIwCRhaESxBw= @@ -1054,7 +1054,7 @@ - + AAgAAECAAAAAAAAEgABEZASBKQAAgYQBBEEAEAEkhiQ= @@ -1062,7 +1062,7 @@ - + AAAAAACAAAAAAAAQAEQAAAABAAAAAAAAAAAAgAAAAIA= @@ -1070,7 +1070,7 @@ - + ABBIAUCABTAggABECAIGVDQDIAgAgAAAJEgBEAEwBAg= @@ -1078,7 +1078,7 @@ - + AAgAgAiACCAggIIUiAAGQJQBAACAhQAAJAGAEAEAAAw= @@ -1086,7 +1086,7 @@ - + AAAAAACAAAAAAACAAAQAAAABAAAAAAAAAAAAAAAAAAA= @@ -1094,7 +1094,7 @@ - + AAAAAACAAAAACAAAAAQAACABAAACAAAAAAAAAAAACAg= @@ -1102,7 +1102,7 @@ - + BAAAA0SAAHAAgAMUCAAUQBQJCCQAgAUAJgQEkAEQBAA= @@ -1110,14 +1110,14 @@ - + AgAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAA= Game\Objects\Technology\DirectFireWeaponInfo.cs - + AAAAA0SAAHABgAMUCQAUQBQBCCRAgAUAJkQEkAEQJAA= @@ -1125,7 +1125,7 @@ - + AAAAAgAAAAAAACAAAAAAAAAAAAAAAAQAAAIEAAAAAAA= @@ -1133,7 +1133,7 @@ - + ABAAAwiAACBggIAEiAgmQBQJEgAIgIQCpEAEEAGCAAg= @@ -1141,7 +1141,7 @@ - + AAAAQgiAACBhqBAEyAAiBBREAABAgIQAIAQEEAECAgg= @@ -1149,7 +1149,7 @@ - + BAAAAwQAAAAAgAAEwAQEVBQBAAAQEYUQVAQEEBEEAiA= @@ -1157,14 +1157,14 @@ - + AgAAAAAAAAAAEAAAAQAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Technology\SeekingWeaponInfo.cs - + RAJQAECAADBhgQAUiAICABQAAABUgAAAIAAAEAGAAAg= @@ -1172,7 +1172,7 @@ - + AAAAAAQAAAAAAAAAAAAAAEAAAAAAgAABAAgAAAAAAAA= @@ -1180,21 +1180,21 @@ - + AgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Objects\Technology\WarheadWeaponInfo.cs - + AgAAAACAAAgIAAAAAIAAAAAgAAAAAEAABgQAAGAAhAA= Game\Objects\Technology\WeaponInfo.cs - + gAAAA0iAACAggAAEiAQGQhQBAAACgQQAJAAEkAEABAg= @@ -1202,21 +1202,21 @@ - + AAgAAAAAAAABAAAAAAAAAAABAAAAAAAAAEAAhAAAAAw= Game\Objects\Vehicles\Base.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA= Game\Objects\Vehicles\Design.cs - + AIAQhwCAADAAgIcEGBQOahQBSAkAkQcApAANlRGGEAg= @@ -1224,7 +1224,7 @@ - + QAAAAAAAAAABAAAAAAAAAAABAAAAgAAAAEAAhAAAAAw= @@ -1232,7 +1232,7 @@ - + QAAAAAAAAAABAAAAAAAAAAABAAAAgAAAAEAAhAAAAAw= @@ -1240,7 +1240,7 @@ - + QAAAAAAAAAABAAAAAAAAAAABAAAAgAAAAEAAhAAAAAw= @@ -1248,7 +1248,7 @@ - + QAAAAAAAAAABAAAAAAAAAAABAAAAgAAAAEAAhAAAAAw= @@ -1256,14 +1256,14 @@ - + AAAAAAAAAAABAAAAAAAAAAABAAAAAAAAAEAAhAAAAAw= Game\Objects\Vehicles\Ship.cs - + CAkAgAQgCCAAAgIACABF4YCBGQAAhQQBEQiRgCAAgAw= @@ -1271,7 +1271,7 @@ - + AAAAAAQACAABAAAACAAAAAABAAAAgQAAAEAAhAAAAAg= @@ -1279,7 +1279,7 @@ - + FKCAgkCACnADiIMcCgAeQBQJCGRAgSQAJkAMlAEQJBg= @@ -1287,7 +1287,7 @@ - + AAAAAAQACAABAAAACAAAAAABAAAAgQAAAEAAhAAAAAg= @@ -1295,7 +1295,7 @@ - + AAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAACAAAAA= @@ -1303,7 +1303,7 @@ - + AAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAEAAACAAAAA= @@ -1311,7 +1311,7 @@ - + AAAAAAAAAAAAAAAAAAEAAAAAAAgAAABAAAAAACAAAAA= @@ -1319,7 +1319,7 @@ - + AAAAAAAAAAAAAAgAAAEAAAAAAAAAAABAAAAAACAAAAA= @@ -1327,7 +1327,7 @@ - + AAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAEAAACAAAAA= @@ -1335,7 +1335,7 @@ - + AAAAAAAAAAAAAAAAAAEAAAAAAAgAAABAAAAAACAAAAA= @@ -1343,7 +1343,7 @@ - + AAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAACAAAAA= @@ -1351,7 +1351,7 @@ - + ACAAgIgAAAIAAAAAAARAAUQAQQAAAAAEASAAgAABAAU= @@ -1359,14 +1359,14 @@ - + QMAIkNSAYgAMkIEWGAQIAAgAQUHQEAYEgBAiGEEAiIQ= Game\Setup\GameSetup.cs - + AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= @@ -1374,7 +1374,7 @@ - + AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= @@ -1382,7 +1382,7 @@ - + AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= @@ -1390,7 +1390,7 @@ - + AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= @@ -1398,7 +1398,7 @@ - + AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= @@ -1406,49 +1406,49 @@ - + AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA= Game\Setup\WarpPointPlacementStrategies\CenterWarpPointPlacementStrategy.cs - + AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA= Game\Setup\WarpPointPlacementStrategies\EdgeAlignedWarpPointPlacementStrategy.cs - + AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA= Game\Setup\WarpPointPlacementStrategies\PlanetWarpPointPlacementStrategy.cs - + AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA= Game\Setup\WarpPointPlacementStrategies\RandomAlignedWarpPointPlacementStrategy.cs - + AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA= Game\Setup\WarpPointPlacementStrategies\RandomWarpPointPlacementStrategy.cs - + AAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA= Game\Setup\WarpPointPlacementStrategies\StarWarpPointPlacementStrategy.cs - + AAAQAAAAAAAgAAAAAAAAAAQAAAAEAAAAAIAAAACAAAA= @@ -2158,21 +2158,21 @@ Utility\Status.cs - + i9OiRZ0iqHWSCpP+IezR8nFp0jpC03EIG1yzfTca+Yw= Utility\Extensions\CommonExtensions.cs - + AABAAAAAAAAAEAAAAAAAAAgAAAAAAAABAAAAAAAAEAA= Utility\Extensions\Parser.cs - + AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAABAA= @@ -2193,420 +2193,420 @@ Modding\Interfaces\IModObject.cs - + AAAAAAAAAAAAAAAAAAAEQAABAAAAAAAABAAAAAAAAAA= Game\Interfaces\IAbilityObject.cs - + AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IAbilityObject.cs - + AAAAAAAAAAAAAAAAAABAIACACQAAAAQBAAAAAAAAgAQ= Game\Interfaces\ICargoContainer.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\ICargoTransferrer.cs - + AAAAAAAAAAAAAAAQAAAIAAAIAAAAAAAAAAAAAAAAABA= Game\Interfaces\ICombatant.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\ICombatSpaceObject.cs - + AAEAAAAAAAAAAAQAAAAAAAAEAAAAAAAAAAAAAAAAAAA= Game\Interfaces\ICommand.cs - + AAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\ICommand.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAA= Game\Interfaces\ICommonAbilityObject.cs - + AAAAAACAAEAAAAAAAAAEABAAAAAAAAAAAEAAAAAAAAA= Game\Interfaces\IConstructable.cs - + AAAAAAAAAEAAAAAAAAAAABAEAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IConstructionOrder.cs - + AAAAAAAAAAAAAAAAAAAAAhAAAAAAAQAAAAAAgAAAAAA= Game\Interfaces\IConstructionTemplate.cs - + AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IContainable.cs - + AAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\ICreateDesignCommand.cs - + AAAAAEAAABAAAAMQCAAQQAAACCQAgAAAIgAAgAAQBAA= Game\Interfaces\IDamageable.cs - + AIAAhgCAABAAgIcAEBQIKAQBCAkAEAAAAAAJBBACEAA= Game\Interfaces\IDesign.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IDesign.cs - + AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IErrorProne.cs - + AAAAAAAAAAAAAAAACAACAAAAAAAAgAAAIAAAAAAAAAg= Game\Interfaces\IFoggable.cs - + ABAAAAgAAABggIAAAAggABQIEAAIAIACgEAAEACCAAA= Game\Interfaces\IHull.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IHull.cs - + AACAAAAAAAAAAAAAAAAAAAAAAEAAACAAAAAAAAAAAAA= Game\Interfaces\IIncomeProducer.cs - + AAAAAAAACAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAA= Game\Interfaces\ILocated.cs - + AAAAAAAAAAAAgAAAAAAAAAAAAAgAEAAAAAAACAAAAAA= Game\Interfaces\IMessage.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAA= Game\Interfaces\IMineableSpaceObject.cs - + CAAAAgAACAAAgAAAAAAEgQABEAAAAAAAAAAQgAAAAAA= Game\Interfaces\IMobileSpaceObject.cs - + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IMobileSpaceObject.cs - + AAAAAAAACAAAAAIAAAAAAAAAAAAAAAAEAAAAIAAAAAA= Game\Interfaces\IMovementOrder.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IMovementOrder.cs - + AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\INamed.cs - + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAA= Game\Interfaces\IOrder.cs - + AAAAAAAAEAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IOrder.cs - + AAEAAAAgAAAAAAAAAAAAAAAAAAAABAAAAQAAACAAAAA= Game\Interfaces\IOrderable.cs - + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IOrderCommand.cs - + AAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IOwnable.cs - + AAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IOwnable.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IOwnableAbilityObject.cs - + AYAAAACQAAAIAAAAAAQAACBAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IPathfindingOrder.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAA= Game\Interfaces\IPictorial.cs - + AAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IPictorialLogMessage.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IPlanetOrder.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA= Game\Interfaces\IPromotable.cs - + AAAAAAAAAAABAAAAAAAAAAAAAABAAAAAAAAAAAAAIAA= Game\Interfaces\IRecyclable.cs - + AIAAAAAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IRecycleBehavior.cs - + AAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAgAAAAAAA= Game\Interfaces\IReference.cs - + AAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IReference.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IReferenceEnumerable.cs - + AAAAAAAAAAAAgAAAAAAAABAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IReferrable.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IResearchable.cs - + AAgAgAAAAAAAAAIAAAAAAIQAAAAABAAAAACAAAAAAAQ= Game\Interfaces\ISpaceObject.cs - + AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IStarSystemPlacementStrategy.cs - + AAAAAAgAAAAgAIAAgAAAAAQAAAAAAAAAAAEAAAAAAAA= Game\Interfaces\IStellarObject.cs - + AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA= Game\Interfaces\ITargetable.cs - + AAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\ITemplate.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IUnit.cs - + AAAAAACAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IUnlockable.cs - + AAAAAgAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAA= Game\Interfaces\IUpgradeable.cs - + AAAAAgAAAAAACIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= Game\Interfaces\IVehicle.cs - + AAAAAAAAAAAAAAAAAAEAAAAAAAAAAABAAAAAACAAAAA= Game\Interfaces\IVictoryCondition.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAgAAAAAAA= @@ -2648,112 +2648,112 @@ Modding\Loaders\ILoader.cs - + QAIKAEAAGAAAAIABoAAIAAAABBDAAYEAgIJAAAGKQMA= Game\Enumerations\AbilityTargets.cs - + AAIAAEAAAQAAAAAAAAAAAAAAAAEAAAEAAAAAAAEAAAA= Game\Enumerations\AbilityValueRule.cs - + AAAAAAAEAAAAAAAABAQAAAAAAAAAAAAAAAAABAEAAAA= Game\Enumerations\AllianceLevel.cs - + AAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAIAAAAEAAAA= Game\Enumerations\AllowedTrades.cs - + AAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAABAAEAA= Game\Enumerations\EmpirePlacement.cs - + AAAAgAAAAIAAAAAAAAAAAAAAAQAAgAAAAAAAAAAABCg= Game\Enumerations\Mood.cs - + AAAAAAAAAAAAAAAAAIAAAAABAAAAgAAAAIEAAAAAAAA= Game\Enumerations\ScoreDisplay.cs - + AAAAAAAAAAAAAAAAAgAAAAAAAAgAAAAAAAAAAAEEAAA= Game\Enumerations\SharingPriority.cs - + AAAAAAAAAAAAAAAAAgAAAAAAAAgAAAAAAAAAAAAEAAA= Game\Enumerations\StartingTechnologyLevel.cs - + AAEAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAABAEAAA= Game\Enumerations\StellarSize.cs - + AAAAAAAAAAAAAAAAAgAAAAAAAAgAAAAAAAAAAAAEAAA= Game\Enumerations\TechnologyCost.cs - + AAICAAAAEAAAAAAAAAAAAAAAABDAAIAAAIAAAAEAQIA= Game\Enumerations\VehicleTypes.cs - + AAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAIAAAAIACAABA= Game\Enumerations\Visibility.cs - + AAACAAAAEAAAAAAAAAAAAAAAAADAAIAAAIIAAAEAQAA= Game\Enumerations\WeaponTargets.cs - + AAAAAAACAAoAAAAAAAAABAACACAAAAAAAIAAAAEAICA= Game\Enumerations\WeaponTypes.cs - + AQAAAAAAQAAAAAAAAAAAAAAAAAQAAAAAAAACAAAAAAA= @@ -2774,7 +2774,7 @@ Modding\Enumerations\RequirementType.cs - + AAAAAAAAAQAAAAAAAAAAAAAAAAAAACCAAAAAAAAAAAA= diff --git a/FrEee/Game/Enumerations/AbilityTargets.cs b/FrEee/Enumerations/AbilityTargets.cs similarity index 91% rename from FrEee/Game/Enumerations/AbilityTargets.cs rename to FrEee/Enumerations/AbilityTargets.cs index 9f8ef489c..bf3479b69 100644 --- a/FrEee/Game/Enumerations/AbilityTargets.cs +++ b/FrEee/Enumerations/AbilityTargets.cs @@ -1,80 +1,80 @@ -using FrEee.Utility; -using System; - -namespace FrEee.Game.Enumerations -{ - /// - /// Specifies what object types abilities can stack to. - /// - [Flags] - public enum AbilityTargets - { - // none - None = 0, - - // basic types - Empire = 0x1, - - Race = 0x2, - Trait = 0x4, - Component = 0x8, // includes MountedComponentTemplate and ComponentTemplate - Facility = 0x10, // includes FacilityTemplate - - // shared types - Sector = 0x20, - - StarSystem = 0x40, - Galaxy = 0x80, - - // stellar objects - [Name("Asteroid")] - [Name("Asteroids")] - [CanonicalName("Asteroid Field")] - AsteroidField = 0x100, - - Planet = 0x200, - Star = 0x400, - Storm = 0x800, - - [CanonicalName("Warp Point")] - WarpPoint = 0x1000, - - // vehicles - Base = 0x2000, - - Drone = 0x4000, - Fighter = 0x8000, - Mine = 0x10000, - Satellite = 0x20000, - Ship = 0x40000, - Troop = 0x80000, - WeaponPlatform = 0x100000, - - // fleets - Fleet = 0x200000, - - // compound types - [CanonicalName("Stellar Object")] - StellarObject = AsteroidField | Planet | Star | Storm | WarpPoint, - - [CanonicalName("Space Vehicle")] - SpaceVehicle = Base | Drone | Fighter | Mine | Satellite | Ship, - - [CanonicalName("Ground Vehicle")] - GroundVehicle = WeaponPlatform | Troop, - - Unit = Drone | Fighter | Mine | Satellite | Troop | WeaponPlatform, - Vehicle = Ship | Base | Unit, - - [CanonicalName("Space Object")] - SpaceObject = StellarObject | SpaceVehicle, - - Part = Component | Facility, - - // invalid - Invalid = 0x2000000, - - // everything! - All = int.MaxValue & ~Invalid, - } -} \ No newline at end of file +using FrEee.Utility; using FrEee.Serialization; +using System; + +namespace FrEee.Enumerations +{ + /// + /// Specifies what object types abilities can stack to. + /// + [Flags] + public enum AbilityTargets + { + // none + None = 0, + + // basic types + Empire = 0x1, + + Race = 0x2, + Trait = 0x4, + Component = 0x8, // includes MountedComponentTemplate and ComponentTemplate + Facility = 0x10, // includes FacilityTemplate + + // shared types + Sector = 0x20, + + StarSystem = 0x40, + Galaxy = 0x80, + + // stellar objects + [Name("Asteroid")] + [Name("Asteroids")] + [CanonicalName("Asteroid Field")] + AsteroidField = 0x100, + + Planet = 0x200, + Star = 0x400, + Storm = 0x800, + + [CanonicalName("Warp Point")] + WarpPoint = 0x1000, + + // vehicles + Base = 0x2000, + + Drone = 0x4000, + Fighter = 0x8000, + Mine = 0x10000, + Satellite = 0x20000, + Ship = 0x40000, + Troop = 0x80000, + WeaponPlatform = 0x100000, + + // fleets + Fleet = 0x200000, + + // compound types + [CanonicalName("Stellar Object")] + StellarObject = AsteroidField | Planet | Star | Storm | WarpPoint, + + [CanonicalName("Space Vehicle")] + SpaceVehicle = Base | Drone | Fighter | Mine | Satellite | Ship, + + [CanonicalName("Ground Vehicle")] + GroundVehicle = WeaponPlatform | Troop, + + Unit = Drone | Fighter | Mine | Satellite | Troop | WeaponPlatform, + Vehicle = Ship | Base | Unit, + + [CanonicalName("Space Object")] + SpaceObject = StellarObject | SpaceVehicle, + + Part = Component | Facility, + + // invalid + Invalid = 0x2000000, + + // everything! + All = int.MaxValue & ~Invalid, + } +} diff --git a/FrEee/Game/Enumerations/AbilityValueRule.cs b/FrEee/Enumerations/AbilityValueRule.cs similarity index 91% rename from FrEee/Game/Enumerations/AbilityValueRule.cs rename to FrEee/Enumerations/AbilityValueRule.cs index 3c1f83d36..ffd895179 100644 --- a/FrEee/Game/Enumerations/AbilityValueRule.cs +++ b/FrEee/Enumerations/AbilityValueRule.cs @@ -1,48 +1,48 @@ -using FrEee.Utility; - -namespace FrEee.Game.Enumerations -{ - /// - /// Rules for grouping and stacking ability values within a group of similar abilities. - /// - public enum AbilityValueRule - { - /// - /// Do not group or stack abilities by this value. - /// Note that this does not necessarily mean that only one instance of the ability will apply! - /// To guarantee this, use TakeHighest, TakeAverage, or TakeLowest. - /// - None, - - /// - /// Group the abilities by this value. - /// - Group, - - /// - /// Add the values within the group. Only works properly for numeric values. - /// - Add, - - /// - /// Take the highest value within the group. Only works properly for numeric values. - /// - [CanonicalName("Take Highest")] - [Name("Highest")] - TakeHighest, - - /// - /// Take the average of the group values. Only works properly for numeric values. - /// - [CanonicalName("Take Average")] - [Name("Average")] - TakeAverage, - - /// - /// Take the lowest value within the group. Only works properly for numeric values. - /// - [CanonicalName("Take Lowest")] - [Name("Lowest")] - TakeLowest - } +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Enumerations +{ + /// + /// Rules for grouping and stacking ability values within a group of similar abilities. + /// + public enum AbilityValueRule + { + /// + /// Do not group or stack abilities by this value. + /// Note that this does not necessarily mean that only one instance of the ability will apply! + /// To guarantee this, use TakeHighest, TakeAverage, or TakeLowest. + /// + None, + + /// + /// Group the abilities by this value. + /// + Group, + + /// + /// Add the values within the group. Only works properly for numeric values. + /// + Add, + + /// + /// Take the highest value within the group. Only works properly for numeric values. + /// + [CanonicalName("Take Highest")] + [Name("Highest")] + TakeHighest, + + /// + /// Take the average of the group values. Only works properly for numeric values. + /// + [CanonicalName("Take Average")] + [Name("Average")] + TakeAverage, + + /// + /// Take the lowest value within the group. Only works properly for numeric values. + /// + [CanonicalName("Take Lowest")] + [Name("Lowest")] + TakeLowest + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/AllianceLevel.cs b/FrEee/Enumerations/AllianceLevel.cs similarity index 91% rename from FrEee/Game/Enumerations/AllianceLevel.cs rename to FrEee/Enumerations/AllianceLevel.cs index 96420f06c..dc0a89e1a 100644 --- a/FrEee/Game/Enumerations/AllianceLevel.cs +++ b/FrEee/Enumerations/AllianceLevel.cs @@ -1,41 +1,41 @@ -using FrEee.Utility; - -namespace FrEee.Game.Enumerations -{ - /// - /// A level of alliance. - /// - public enum AllianceLevel - { - /// - /// No alliance. The empire will be attacked by the other empire. - /// - None = 0, - - /// - /// The receiver will not be attacked by the giver, except in systems where the giver has a colony. - /// - [CanonicalName("Neutral Zone")] - NeutralZone = 1, - - /// - /// The receiver will not be attacked by the giver. - /// - [CanonicalName("Non-Aggression")] - [Name("Non Aggression")] - [Name("Nonaggression")] - NonAggression = 2, - - /// - /// Same as Non-Aggression, but the giver will also declare war on any empire that declares war on the receiver. - /// - [CanonicalName("Defensive Pact")] - DefensivePact = 3, - - /// - /// Same as Defensive Pact, but the giver will also declare war on any empire that the receiver declares war on. - /// - [CanonicalName("Military Alliance")] - MilitaryAlliance = 4, - } +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Enumerations +{ + /// + /// A level of alliance. + /// + public enum AllianceLevel + { + /// + /// No alliance. The empire will be attacked by the other empire. + /// + None = 0, + + /// + /// The receiver will not be attacked by the giver, except in systems where the giver has a colony. + /// + [CanonicalName("Neutral Zone")] + NeutralZone = 1, + + /// + /// The receiver will not be attacked by the giver. + /// + [CanonicalName("Non-Aggression")] + [Name("Non Aggression")] + [Name("Nonaggression")] + NonAggression = 2, + + /// + /// Same as Non-Aggression, but the giver will also declare war on any empire that declares war on the receiver. + /// + [CanonicalName("Defensive Pact")] + DefensivePact = 3, + + /// + /// Same as Defensive Pact, but the giver will also declare war on any empire that the receiver declares war on. + /// + [CanonicalName("Military Alliance")] + MilitaryAlliance = 4, + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/AllowedTrades.cs b/FrEee/Enumerations/AllowedTrades.cs similarity index 82% rename from FrEee/Game/Enumerations/AllowedTrades.cs rename to FrEee/Enumerations/AllowedTrades.cs index ed1deb529..0da765e6a 100644 --- a/FrEee/Game/Enumerations/AllowedTrades.cs +++ b/FrEee/Enumerations/AllowedTrades.cs @@ -1,23 +1,23 @@ -using FrEee.Utility; - -namespace FrEee.Game.Enumerations -{ - public enum AllowedTrades - { - /// - /// No trades or gifts are allowed. - /// - None = 0, - - /// - /// Anything except technology can be traded or gifted. - /// - [CanonicalName("All But Technology")] - AllButTechnology = 1, - - /// - /// Anything, including technology, can be traded or gifted. - /// - All = 2 - } +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Enumerations +{ + public enum AllowedTrades + { + /// + /// No trades or gifts are allowed. + /// + None = 0, + + /// + /// Anything except technology can be traded or gifted. + /// + [CanonicalName("All But Technology")] + AllButTechnology = 1, + + /// + /// Anything, including technology, can be traded or gifted. + /// + All = 2 + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/Conditions.cs b/FrEee/Enumerations/Conditions.cs similarity index 78% rename from FrEee/Game/Enumerations/Conditions.cs rename to FrEee/Enumerations/Conditions.cs index 61b62f3cd..d539bb569 100644 --- a/FrEee/Game/Enumerations/Conditions.cs +++ b/FrEee/Enumerations/Conditions.cs @@ -1,16 +1,16 @@ -namespace FrEee.Game.Enumerations -{ - /// - /// Planetary conditions. - /// - public enum Conditions - { - Deadly = -3, - Harsh = -2, - Unpleasant = -1, - Average = 0, - Mild = 1, - Good = 2, - Optimal = 3 - } +namespace FrEee.Enumerations +{ + /// + /// Planetary conditions. + /// + public enum Conditions + { + Deadly = -3, + Harsh = -2, + Unpleasant = -1, + Average = 0, + Mild = 1, + Good = 2, + Optimal = 3 + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/EmpirePlacement.cs b/FrEee/Enumerations/EmpirePlacement.cs similarity index 69% rename from FrEee/Game/Enumerations/EmpirePlacement.cs rename to FrEee/Enumerations/EmpirePlacement.cs index cdbb3be7a..339a00623 100644 --- a/FrEee/Game/Enumerations/EmpirePlacement.cs +++ b/FrEee/Enumerations/EmpirePlacement.cs @@ -1,15 +1,15 @@ -using FrEee.Utility; - -namespace FrEee.Game.Enumerations -{ - public enum EmpirePlacement - { - [CanonicalName("Can Start In Same System")] - CanStartInSameSystem, - - [CanonicalName("Different Systems")] - DifferentSystems, - - Equidistant - } +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Enumerations +{ + public enum EmpirePlacement + { + [CanonicalName("Can Start In Same System")] + CanStartInSameSystem, + + [CanonicalName("Different Systems")] + DifferentSystems, + + Equidistant + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/EventMessageTarget.cs b/FrEee/Enumerations/EventMessageTarget.cs similarity index 90% rename from FrEee/Game/Enumerations/EventMessageTarget.cs rename to FrEee/Enumerations/EventMessageTarget.cs index cdc7f2f56..4f1154291 100644 --- a/FrEee/Game/Enumerations/EventMessageTarget.cs +++ b/FrEee/Enumerations/EventMessageTarget.cs @@ -1,33 +1,33 @@ -namespace FrEee.Game.Enumerations -{ - /// - /// Determines who will receive a message when an event occurs. - /// - public enum EventMessageTarget - { - /// - /// No one will receive a message. - /// - None = 0, - - /// - /// The owner of the affected object will receive a message. - /// - Owner = 1, - - /// - /// Whoever is in the same sector as the event will receive a message. - /// - Sector = 2, - - /// - /// Whoever is in the same sector as the event will receive a message. - /// - System = 3, - - /// - /// Everyone will receive a message. - /// - All = 4 - } +namespace FrEee.Enumerations +{ + /// + /// Determines who will receive a message when an event occurs. + /// + public enum EventMessageTarget + { + /// + /// No one will receive a message. + /// + None = 0, + + /// + /// The owner of the affected object will receive a message. + /// + Owner = 1, + + /// + /// Whoever is in the same sector as the event will receive a message. + /// + Sector = 2, + + /// + /// Whoever is in the same sector as the event will receive a message. + /// + System = 3, + + /// + /// Everyone will receive a message. + /// + All = 4 + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/EventSeverity.cs b/FrEee/Enumerations/EventSeverity.cs similarity index 77% rename from FrEee/Game/Enumerations/EventSeverity.cs rename to FrEee/Enumerations/EventSeverity.cs index be913e89d..70bf38d81 100644 --- a/FrEee/Game/Enumerations/EventSeverity.cs +++ b/FrEee/Enumerations/EventSeverity.cs @@ -1,14 +1,14 @@ -namespace FrEee.Game.Enumerations -{ - /// - /// The severity of a random event. - /// - public enum EventSeverity - { - None = 0, - Low = 1, - Medium = 2, - High = 3, - Catastrophic = 4, - } +namespace FrEee.Enumerations +{ + /// + /// The severity of a random event. + /// + public enum EventSeverity + { + None = 0, + Low = 1, + Medium = 2, + High = 3, + Catastrophic = 4, + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/Mood.cs b/FrEee/Enumerations/Mood.cs similarity index 79% rename from FrEee/Game/Enumerations/Mood.cs rename to FrEee/Enumerations/Mood.cs index be73aa9ec..f4be0e6ae 100644 --- a/FrEee/Game/Enumerations/Mood.cs +++ b/FrEee/Enumerations/Mood.cs @@ -1,17 +1,17 @@ -namespace FrEee.Game.Enumerations -{ - /// - /// Population mood. - /// - public enum Mood - { - Rioting = -3, - Riot = Rioting, - Angry = -2, - Unhappy = -1, - Indifferent = 0, - Happy = 1, - Jubilant = 2, - Emotionless = 3, - } +namespace FrEee.Enumerations +{ + /// + /// Population mood. + /// + public enum Mood + { + Rioting = -3, + Riot = Rioting, + Angry = -2, + Unhappy = -1, + Indifferent = 0, + Happy = 1, + Jubilant = 2, + Emotionless = 3, + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/Relations.cs b/FrEee/Enumerations/Relations.cs similarity index 92% rename from FrEee/Game/Enumerations/Relations.cs rename to FrEee/Enumerations/Relations.cs index b5fb23500..6b986bc18 100644 --- a/FrEee/Game/Enumerations/Relations.cs +++ b/FrEee/Enumerations/Relations.cs @@ -1,36 +1,36 @@ -namespace FrEee.Game.Enumerations -{ - /// - /// Diplomatic relations from one empire to another. - /// Note that diplomatic relations are not necessarily mutual! - /// Also relations may vary by star system if the empires have a neutral zone treaty. - /// - public enum Relations - { - /// - /// This empire has not encountered the other empire. - /// - Unknown = 0, - - /// - /// This empire is hostile toward the other empire and will attack on sight. - /// - Hostile = 1, - - /// - /// This empire has no formal relations toward the other empire and will only fight if provoked. - /// TODO - actually implement this, right now neutral empires are treated as hostile - /// - Neutral = 2, - - /// - /// This empire is allied with the other empire and will not attack it. - /// - Allied = 3, - - /// - /// This empire *is* the other empire. - /// - Self = 4, - } +namespace FrEee.Enumerations +{ + /// + /// Diplomatic relations from one empire to another. + /// Note that diplomatic relations are not necessarily mutual! + /// Also relations may vary by star system if the empires have a neutral zone treaty. + /// + public enum Relations + { + /// + /// This empire has not encountered the other empire. + /// + Unknown = 0, + + /// + /// This empire is hostile toward the other empire and will attack on sight. + /// + Hostile = 1, + + /// + /// This empire has no formal relations toward the other empire and will only fight if provoked. + /// TODO - actually implement this, right now neutral empires are treated as hostile + /// + Neutral = 2, + + /// + /// This empire is allied with the other empire and will not attack it. + /// + Allied = 3, + + /// + /// This empire *is* the other empire. + /// + Self = 4, + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/ScoreDisplay.cs b/FrEee/Enumerations/ScoreDisplay.cs similarity index 81% rename from FrEee/Game/Enumerations/ScoreDisplay.cs rename to FrEee/Enumerations/ScoreDisplay.cs index de25142db..b5b39490f 100644 --- a/FrEee/Game/Enumerations/ScoreDisplay.cs +++ b/FrEee/Enumerations/ScoreDisplay.cs @@ -1,23 +1,23 @@ -using FrEee.Utility; -using System; - -namespace FrEee.Game.Enumerations -{ - [Flags] - public enum ScoreDisplay - { - [CanonicalName("Own Only - No Rankings")] - OwnOnlyNoRankings = 0, - - [CanonicalName("Own Only - Ranked")] - OwnOnlyRanked = 1, - - [CanonicalName("Allies Only - No Rankings")] - AlliesOnlyNoRankings = 2, - - [CanonicalName("Allies Only - Ranked")] - AlliesOnlyRanked = 3, - - All = 7 - } +using FrEee.Utility; using FrEee.Serialization; +using System; + +namespace FrEee.Enumerations +{ + [Flags] + public enum ScoreDisplay + { + [CanonicalName("Own Only - No Rankings")] + OwnOnlyNoRankings = 0, + + [CanonicalName("Own Only - Ranked")] + OwnOnlyRanked = 1, + + [CanonicalName("Allies Only - No Rankings")] + AlliesOnlyNoRankings = 2, + + [CanonicalName("Allies Only - Ranked")] + AlliesOnlyRanked = 3, + + All = 7 + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/SharingPriority.cs b/FrEee/Enumerations/SharingPriority.cs similarity index 92% rename from FrEee/Game/Enumerations/SharingPriority.cs rename to FrEee/Enumerations/SharingPriority.cs index 0d1cee0a5..99a8fcee0 100644 --- a/FrEee/Game/Enumerations/SharingPriority.cs +++ b/FrEee/Enumerations/SharingPriority.cs @@ -1,30 +1,30 @@ -namespace FrEee.Game.Enumerations -{ - /// - /// Priority for sharing of abilities. - /// - public enum SharingPriority - { - /// - /// Empires with no priority won't get the ability shared to them. - /// - None = 0, - - /// - /// Empires with low priority get last pick at the ability. - /// If high and medium priority empires used the ability up, low priority empires won't get any. - /// - Low = 1, - - /// - /// Empires with medium priority get a pick at the ability along with the owner of the ability. - /// If high priority empires used the ability up, medium priority empires won't get any. - /// - Medium = 2, - - /// - /// Empires with high priority get a pick at the ability prior to even the owner of the ability. - /// - High = 3 - } +namespace FrEee.Enumerations +{ + /// + /// Priority for sharing of abilities. + /// + public enum SharingPriority + { + /// + /// Empires with no priority won't get the ability shared to them. + /// + None = 0, + + /// + /// Empires with low priority get last pick at the ability. + /// If high and medium priority empires used the ability up, low priority empires won't get any. + /// + Low = 1, + + /// + /// Empires with medium priority get a pick at the ability along with the owner of the ability. + /// If high priority empires used the ability up, medium priority empires won't get any. + /// + Medium = 2, + + /// + /// Empires with high priority get a pick at the ability prior to even the owner of the ability. + /// + High = 3 + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/StartingTechnologyLevel.cs b/FrEee/Enumerations/StartingTechnologyLevel.cs similarity index 60% rename from FrEee/Game/Enumerations/StartingTechnologyLevel.cs rename to FrEee/Enumerations/StartingTechnologyLevel.cs index bd84b9f83..6ff398ea9 100644 --- a/FrEee/Game/Enumerations/StartingTechnologyLevel.cs +++ b/FrEee/Enumerations/StartingTechnologyLevel.cs @@ -1,9 +1,9 @@ -namespace FrEee.Game.Enumerations -{ - public enum StartingTechnologyLevel - { - Low, - Medium, - High - } +namespace FrEee.Enumerations +{ + public enum StartingTechnologyLevel + { + Low, + Medium, + High + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/StellarSize.cs b/FrEee/Enumerations/StellarSize.cs similarity index 75% rename from FrEee/Game/Enumerations/StellarSize.cs rename to FrEee/Enumerations/StellarSize.cs index 2a922d22b..b094f766b 100644 --- a/FrEee/Game/Enumerations/StellarSize.cs +++ b/FrEee/Enumerations/StellarSize.cs @@ -1,14 +1,14 @@ -namespace FrEee.Game.Enumerations -{ - /// - /// The size of a stellar object. - /// - public enum StellarSize - { - Tiny = 1, - Small, - Medium, - Large, - Huge - } +namespace FrEee.Enumerations +{ + /// + /// The size of a stellar object. + /// + public enum StellarSize + { + Tiny = 1, + Small, + Medium, + Large, + Huge + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/TechnologyCost.cs b/FrEee/Enumerations/TechnologyCost.cs similarity index 88% rename from FrEee/Game/Enumerations/TechnologyCost.cs rename to FrEee/Enumerations/TechnologyCost.cs index f6c056bb2..a378995ea 100644 --- a/FrEee/Game/Enumerations/TechnologyCost.cs +++ b/FrEee/Enumerations/TechnologyCost.cs @@ -1,26 +1,26 @@ -namespace FrEee.Game.Enumerations -{ - /// - /// Cost to research technology. - /// - public enum TechnologyCost - { - /// - /// Cost = Level * BaseCost - /// 1x, 2x, 3x, 4x... - /// - Low = 0, - - /// - /// Cost = Level for level 1, Level ^ 2 * BaseCost / 2 for subsequent levels - /// 1x, 2x, 4.5x, 8x... - /// - Medium = 1, - - /// - /// Cost = Level ^ 2 * BaseCost - /// 1x, 4x, 9x, 16x... - /// - High = 2, - } +namespace FrEee.Enumerations +{ + /// + /// Cost to research technology. + /// + public enum TechnologyCost + { + /// + /// Cost = Level * BaseCost + /// 1x, 2x, 3x, 4x... + /// + Low = 0, + + /// + /// Cost = Level for level 1, Level ^ 2 * BaseCost / 2 for subsequent levels + /// 1x, 2x, 4.5x, 8x... + /// + Medium = 1, + + /// + /// Cost = Level ^ 2 * BaseCost + /// 1x, 4x, 9x, 16x... + /// + High = 2, + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/VehicleTypes.cs b/FrEee/Enumerations/VehicleTypes.cs similarity index 88% rename from FrEee/Game/Enumerations/VehicleTypes.cs rename to FrEee/Enumerations/VehicleTypes.cs index 0e70cf04f..e38d38dc4 100644 --- a/FrEee/Game/Enumerations/VehicleTypes.cs +++ b/FrEee/Enumerations/VehicleTypes.cs @@ -1,53 +1,53 @@ -using System; -using FrEee.Utility; - -namespace FrEee.Game.Enumerations -{ - /// - /// Vehicle types. Used for restricting component placement. - /// - [Flags] - public enum VehicleTypes - { - None = 0x0, - - [Name("Ships")] - Ship = 0x1, - - [Name("Bases")] - Base = 0x2, - - [Name("Fighters")] - [Name("Ftr")] - Fighter = 0x4, - - [Name("Satellites")] - [Name("Sat")] - Satellite = 0x8, - - [Name("Mines")] - Mine = 0x10, - - [Name("Troops")] - [Name("Troop")] - [Name("Trp")] - Troop = 0x20, - - [Name("Drones")] - Drone = 0x40, - - [Name("WeapPlatform")] - [Name("WeapPlatforms")] - [Name("WeapPlat")] - [Name("WeapPlats")] - [Name("WeaponPlatforms")] - [CanonicalName("Weapon Platform")] - [Name("Weapon Platforms")] - WeaponPlatform = 0x80, - - [Name("Any")] - All = Ship | Base | Fighter | Satellite | Mine | Troop | Drone | WeaponPlatform, - - Invalid = 0x1000, - } +using System; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Enumerations +{ + /// + /// Vehicle types. Used for restricting component placement. + /// + [Flags] + public enum VehicleTypes + { + None = 0x0, + + [Name("Ships")] + Ship = 0x1, + + [Name("Bases")] + Base = 0x2, + + [Name("Fighters")] + [Name("Ftr")] + Fighter = 0x4, + + [Name("Satellites")] + [Name("Sat")] + Satellite = 0x8, + + [Name("Mines")] + Mine = 0x10, + + [Name("Troops")] + [Name("Troop")] + [Name("Trp")] + Troop = 0x20, + + [Name("Drones")] + Drone = 0x40, + + [Name("WeapPlatform")] + [Name("WeapPlatforms")] + [Name("WeapPlat")] + [Name("WeapPlats")] + [Name("WeaponPlatforms")] + [CanonicalName("Weapon Platform")] + [Name("Weapon Platforms")] + WeaponPlatform = 0x80, + + [Name("Any")] + All = Ship | Base | Fighter | Satellite | Mine | Troop | Drone | WeaponPlatform, + + Invalid = 0x1000, + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/Visibility.cs b/FrEee/Enumerations/Visibility.cs similarity index 88% rename from FrEee/Game/Enumerations/Visibility.cs rename to FrEee/Enumerations/Visibility.cs index 0003be2d5..30731888e 100644 --- a/FrEee/Game/Enumerations/Visibility.cs +++ b/FrEee/Enumerations/Visibility.cs @@ -1,33 +1,33 @@ -namespace FrEee.Game.Enumerations -{ - /// - /// Visibility of space objects. - /// - public enum Visibility - { - /// - /// Object was never visible. - /// - Unknown = 0, - - /// - /// Object was once visible but is now invisible. - /// - Fogged, - - /// - /// Object is currently visible. - /// - Visible, - - /// - /// Object is currently visible and scanned. - /// - Scanned, - - /// - /// Object is owned by the empire. - /// - Owned - } +namespace FrEee.Enumerations +{ + /// + /// Visibility of space objects. + /// + public enum Visibility + { + /// + /// Object was never visible. + /// + Unknown = 0, + + /// + /// Object was once visible but is now invisible. + /// + Fogged, + + /// + /// Object is currently visible. + /// + Visible, + + /// + /// Object is currently visible and scanned. + /// + Scanned, + + /// + /// Object is owned by the empire. + /// + Owned + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/WeaponTargets.cs b/FrEee/Enumerations/WeaponTargets.cs similarity index 86% rename from FrEee/Game/Enumerations/WeaponTargets.cs rename to FrEee/Enumerations/WeaponTargets.cs index f8f2c31f2..f8c09dafd 100644 --- a/FrEee/Game/Enumerations/WeaponTargets.cs +++ b/FrEee/Enumerations/WeaponTargets.cs @@ -1,43 +1,43 @@ -using FrEee.Utility; -using System; - -namespace FrEee.Game.Enumerations -{ - /// - /// Used to limit what a weapon can fire at. - /// - [Flags] - public enum WeaponTargets - { - None = 0x0, - - // NOTE - SE4 uses Ships as the target type for bases as well - [Name("Ships")] - Ship = 0x1, - - //[Name("Bases")] - //Base = 0x2, - - [Name("Fighters")] - [Name("Ftr")] - Fighter = 0x4, - - [Name("Satellites")] - [Name("Sat")] - Satellite = 0x8, - - [Name("Drones")] - Drone = 0x40, - - [Name("Planets")] - Planet = 0x100, - - [Name("Seekers")] - Seeker = 0x200, - - [Name("Any")] - All = Ship | /*Base |*/ Fighter | Satellite | Drone | Planet | Seeker, - - Invalid = 0x400, - } +using FrEee.Utility; using FrEee.Serialization; +using System; + +namespace FrEee.Enumerations +{ + /// + /// Used to limit what a weapon can fire at. + /// + [Flags] + public enum WeaponTargets + { + None = 0x0, + + // NOTE - SE4 uses Ships as the target type for bases as well + [Name("Ships")] + Ship = 0x1, + + //[Name("Bases")] + //Base = 0x2, + + [Name("Fighters")] + [Name("Ftr")] + Fighter = 0x4, + + [Name("Satellites")] + [Name("Sat")] + Satellite = 0x8, + + [Name("Drones")] + Drone = 0x40, + + [Name("Planets")] + Planet = 0x100, + + [Name("Seekers")] + Seeker = 0x200, + + [Name("Any")] + All = Ship | /*Base |*/ Fighter | Satellite | Drone | Planet | Seeker, + + Invalid = 0x400, + } } \ No newline at end of file diff --git a/FrEee/Game/Enumerations/WeaponTypes.cs b/FrEee/Enumerations/WeaponTypes.cs similarity index 92% rename from FrEee/Game/Enumerations/WeaponTypes.cs rename to FrEee/Enumerations/WeaponTypes.cs index e1bfca86d..7d4eaedb3 100644 --- a/FrEee/Game/Enumerations/WeaponTypes.cs +++ b/FrEee/Enumerations/WeaponTypes.cs @@ -1,71 +1,71 @@ -using System; -using FrEee.Utility; - -namespace FrEee.Game.Enumerations -{ - /// - /// Types of weapons. - /// - [Flags] - public enum WeaponTypes - { - /// - /// Not a weapon. - /// - [CanonicalName("Not a Weapon")] - [Name("Not A Weapon")] - [Name("None")] - NotAWeapon = 0x1, - - /// - /// Direct fire weapon. - /// - [CanonicalName("Direct Fire")] - [Name("Direct-Fire")] - DirectFire = 0x2, - - /// - /// Seeking weapon. - /// - Seeking = 0x4, - - /// - /// Explodes when ramming an enemy. - /// - Warhead = 0x8, - - /// - /// Weapon which fires automatically at incoming targets like a direct fire weapon. - /// - [CanonicalName("Direct Fire Point Defense")] - [Name("Direct-Fire Point-Defense")] - [Name("Point-Defense")] - [Name("Point Defense")] - DirectFirePointDefense = 0x10, - - /// - /// Weapon which fires automatically at incoming targets like a seeking weapon. - /// - [CanonicalName("Seeking Point Defense")] - [Name("Seeking Point-Defense")] - SeekingPointDefense = 0x20, - - /// - /// Explodes when ramming an enemy or when being rammed. - /// - [CanonicalName("Warhead Point Defense")] - [Name("Warhead Point-Defense")] - WarheadPointDefense = 0x40, - - /// - /// All types of weapons. Not nonweapons. - /// - [Name("Any")] - All = DirectFire | Seeking | DirectFirePointDefense | SeekingPointDefense | WarheadPointDefense, - - /// - /// Any component, including nonweapons. - /// - AnyComponent = All | NotAWeapon, - } +using System; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Enumerations +{ + /// + /// Types of weapons. + /// + [Flags] + public enum WeaponTypes + { + /// + /// Not a weapon. + /// + [CanonicalName("Not a Weapon")] + [Name("Not A Weapon")] + [Name("None")] + NotAWeapon = 0x1, + + /// + /// Direct fire weapon. + /// + [CanonicalName("Direct Fire")] + [Name("Direct-Fire")] + DirectFire = 0x2, + + /// + /// Seeking weapon. + /// + Seeking = 0x4, + + /// + /// Explodes when ramming an enemy. + /// + Warhead = 0x8, + + /// + /// Weapon which fires automatically at incoming targets like a direct fire weapon. + /// + [CanonicalName("Direct Fire Point Defense")] + [Name("Direct-Fire Point-Defense")] + [Name("Point-Defense")] + [Name("Point Defense")] + DirectFirePointDefense = 0x10, + + /// + /// Weapon which fires automatically at incoming targets like a seeking weapon. + /// + [CanonicalName("Seeking Point Defense")] + [Name("Seeking Point-Defense")] + SeekingPointDefense = 0x20, + + /// + /// Explodes when ramming an enemy or when being rammed. + /// + [CanonicalName("Warhead Point Defense")] + [Name("Warhead Point-Defense")] + WarheadPointDefense = 0x40, + + /// + /// All types of weapons. Not nonweapons. + /// + [Name("Any")] + All = DirectFire | Seeking | DirectFirePointDefense | SeekingPointDefense | WarheadPointDefense, + + /// + /// Any component, including nonweapons. + /// + AnyComponent = All | NotAWeapon, + } } \ No newline at end of file diff --git a/FrEee/Utility/Extensions/AbilityExtensions.cs b/FrEee/Extensions/AbilityExtensions.cs similarity index 95% rename from FrEee/Utility/Extensions/AbilityExtensions.cs rename to FrEee/Extensions/AbilityExtensions.cs index 5d75bf6c2..46ca88570 100644 --- a/FrEee/Utility/Extensions/AbilityExtensions.cs +++ b/FrEee/Extensions/AbilityExtensions.cs @@ -1,501 +1,501 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Civilization.Diplomacy.Clauses; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Extensions -{ - /// - /// Extensions relating to abilities. - /// - public static class AbilityExtensions - { - /// - /// All abilities belonging to an object. - /// - /// - /// - public static IEnumerable Abilities(this IAbilityObject obj, Func sourceFilter = null) - { - if (obj == null) - return Enumerable.Empty(); - - if (sourceFilter == null && Galaxy.Current != null && Galaxy.Current.IsAbilityCacheEnabled) - { - // use the ability cache - if (Galaxy.Current.AbilityCache[obj] == null) - Galaxy.Current.AbilityCache[obj] = obj.UnstackedAbilities(true, sourceFilter).Stack(obj).ToArray(); - return Galaxy.Current.AbilityCache[obj]; - } - - return obj.UnstackedAbilities(true, sourceFilter).Stack(obj); - } - - public static ILookup AbilityTree(this IAbilityObject obj, Func sourceFilter = null) - { - return obj.UnstackedAbilities(true, sourceFilter).StackToTree(obj); - } - - /// - /// Gets any abilities that can be activated. - /// - /// - /// - public static IDictionary ActivatableAbilities(this Vehicle v) - { - var dict = new Dictionary(); - foreach (var a in v.Hull.Abilities) - { - if (a.Rule.IsActivatable) - dict.Add(a, v.Hull); - } - foreach (var c in v.Components.Where(c => !c.IsDestroyed)) - { - foreach (var a in c.Abilities) - { - if (a.Rule.IsActivatable) - dict.Add(a, c); - } - } - return dict; - } - - /// - /// Gets any abilities that can be activated. - /// - /// - /// - public static IDictionary ActivatableAbilities(this Planet p) - { - var dict = new Dictionary(); - if (p.Colony == null) - return dict; - foreach (var f in p.Colony.Facilities.Where(f => !f.IsDestroyed)) - { - foreach (var a in f.Abilities) - { - if (a.Rule.IsActivatable) - dict.Add(a, f); - } - } - return dict; - } - - /// - /// Gets any abilities that can be activated. - /// - /// - /// - public static IDictionary ActivatableAbilities(this IAbilityObject o) - { - if (o is Vehicle) - return ((Vehicle)o).ActivatableAbilities(); - if (o is Planet) - return ((Planet)o).ActivatableAbilities(); - - var dict = new Dictionary(); - foreach (var a in o.Abilities()) - { - if (a.Rule.IsActivatable) - dict.Add(a, o); - } - return dict; - } - - public static Ability AddAbility(this IAbilityContainer obj, string abilityName, params object[] vals) - { - return obj.AddAbility(Mod.Current.AbilityRules.Single(r => r.Name == abilityName || r.Aliases.Contains(abilityName)), vals); - } - - public static Ability AddAbility(this IAbilityContainer obj, AbilityRule rule, params object[] vals) - { - var a = new Ability(obj, rule, null, vals); - obj.Abilities.Add(a); - return a; - } - - /// - /// Abilities inherited from ancestor objects. - /// - /// - /// - /// - public static IEnumerable AncestorAbilities(this IAbilityObject obj, Func? sourceFilter = null) - { - var abils = new List(); - foreach (var p in obj.Ancestors(sourceFilter).ExceptSingle(null)) - abils.AddRange(p.IntrinsicAbilities); - return abils.Where(a => a.Rule == null || a.Rule.CanTarget(obj.AbilityTarget)); - } - - public static IEnumerable Ancestors(this IAbilityObject obj, Func? sourceFilter = null) - { - if (obj == null) - yield break; - // TODO - filter out duplicate ancestors - foreach (var p in obj.Parents.ExceptSingle(null)) - { - if (p != null && (sourceFilter == null || sourceFilter(p))) - { - yield return p; - foreach (var x in p.Ancestors(sourceFilter)) - yield return x; - } - } - } - - /// - /// Consumes supplies if possible. - /// - /// The ability consuming supplies. - /// true if successful or unnecessary, otherwise false - public static bool BurnSupplies(this Ability a) - { - if (a.Container is Component) - return (a.Container as Component).BurnSupplies(); - else - return true; // other ability containers don't use supplies - } - - public static void ClearAbilityCache(this IAbilityObject o) - { - Galaxy.Current.AbilityCache.Remove(o); - } - - /// - /// Abilities passed up from descendant objects. - /// - /// - /// - /// - public static IEnumerable DescendantAbilities(this IAbilityObject obj, Func? sourceFilter = null) - { - var abils = new List(); - foreach (var c in obj.Descendants(sourceFilter)) - abils.AddRange(c.IntrinsicAbilities); - return abils.Where(a => a.Rule == null || a.Rule.CanTarget(obj.AbilityTarget)); - } - - public static IEnumerable Descendants(this IAbilityObject obj, Func? sourceFilter = null) - { - // we can't use a HashSet here because e.g. ships can have multiples of the same engine template installed - List result = new(); - if (obj != null) - { - foreach (var c in obj.Children) - { - if (c is not null && (sourceFilter is null || sourceFilter(c))) - { - result.Add(c); - foreach (var x in c.Descendants(sourceFilter)) - result.Add(x); - } - } - } - return result; - } - - public static IEnumerable EmpireAbilities(this ICommonAbilityObject obj, Empire emp, Func sourceFilter = null) - { - if (obj == null) - return Enumerable.Empty(); - - if (sourceFilter == null) - { - var subobjs = obj.GetContainedAbilityObjects(emp); - Func> getabils = () => - subobjs.SelectMany(o => o.Abilities()).Where(a => a.Rule.CanTarget(obj.AbilityTarget)); - if (Galaxy.Current.IsAbilityCacheEnabled) - { - var tuple = Tuple.Create(obj, emp); - if (Galaxy.Current.CommonAbilityCache[tuple] == null) - Galaxy.Current.CommonAbilityCache[tuple] = getabils(); - return Galaxy.Current.CommonAbilityCache[tuple]; - } - else - return getabils(); - } - else - return obj.GetContainedAbilityObjects(emp).Where(o => sourceFilter(o)).SelectMany(o => o.Abilities()).Where(a => a.Rule.CanTarget(obj.AbilityTarget)); - } - - /// - /// Finds empire-common abilities inherited by an object (e.g. empire abilities of a sector in which a ship resides). - /// - /// - /// - /// - public static IEnumerable EmpireCommonAbilities(this IAbilityObject obj, Func sourceFilter = null) - { - // Unowned objects cannot empire common abilities. - var ownable = obj as IOwnableAbilityObject; - if (ownable == null || ownable.Owner == null) - yield break; - - // Where are these abilities coming from? - // Right now they can only come from ancestors, since sectors and star systems are the only common ability objects. - // TODO - Would it make sense for them to come from descendants? What kind of common ability object could be used as a descendant of an owned object? - var ancestors = obj.Ancestors(sourceFilter).OfType(); - - // What abilities do we have? - foreach (var ancestor in ancestors) - { - foreach (var abil in ancestor.EmpireAbilities(ownable.Owner, sourceFilter)) - yield return abil; - } - } - - private static IEnumerable FindSharedAbilities(this IOwnableAbilityObject obj, ShareAbilityClause clause) - { - if (obj == null) - yield break; - - var rule = clause.AbilityRule; - if (rule.CanTarget(obj.AbilityTarget)) - { - if (rule.CanTarget(AbilityTargets.Sector) && obj is ILocated) - { - var sector = ((ILocated)obj).Sector; - foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) - { - foreach (var abil in sector.EmpireAbilities(emp)) - { - if (rule == abil.Rule) - yield return abil; - } - } - } - else if (rule.CanTarget(AbilityTargets.StarSystem) && obj is ILocated) - { - var sys = ((ILocated)obj).StarSystem; - foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) - { - foreach (var abil in sys.EmpireAbilities(emp)) - { - if (rule == abil.Rule) - yield return abil; - } - } - } - else if (rule.CanTarget(AbilityTargets.Galaxy)) - { - foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) - { - foreach (var abil in Galaxy.Current.EmpireAbilities(emp)) - { - if (rule == abil.Rule) - yield return abil; - } - } - } - } - } - - /// - /// Aggregates abilities for an empire's space objects. - /// - /// - /// - /// - /// - /// - public static string GetEmpireAbilityValue(this ICommonAbilityObject obj, Empire emp, string name, int index = 1, Func filter = null) - { - if (obj == null) - return null; - - if (filter == null && Galaxy.Current.IsAbilityCacheEnabled) - { - // use the cache - var cached = Galaxy.Current.CommonAbilityCache[Tuple.Create(obj, emp)]; - if (cached != null) - { - if (cached.Any()) - return cached.Where(x => x.Rule.Matches(name)).Stack(obj).FirstOrDefault()?.Values[index - 1]; - else - return null; - } - } - - IEnumerable abils; - var subabils = obj.GetContainedAbilityObjects(emp).SelectMany(o => o.UnstackedAbilities(true).Where(a => a.Rule.Name == name)); - if (obj is IAbilityObject) - abils = ((IAbilityObject)obj).Abilities().Where(a => a.Rule != null && a.Rule.Name == name).Concat(subabils).Stack(obj); - else - abils = subabils; - abils = abils.Where(a => a.Rule != null && a.Rule.Matches(name) && a.Rule.CanTarget(obj.AbilityTarget) && (filter == null || filter(a))); - string result; - if (!abils.Any()) - result = null; - else - result = abils.First().Values[index - 1]; - - // cache abilities if we can - if (filter == null && Galaxy.Current.IsAbilityCacheEnabled) - Galaxy.Current.CommonAbilityCache[Tuple.Create(obj, emp)] = abils.ToArray(); - - return result; - } - - /// - /// Gets an ability value. - /// If the stacking rule in the mod is DoNotStack, an arbitrary matching ability will be chosen. - /// If there are no values, null will be returned. - /// - /// The name of the ability. - /// The object from which to get the value. - /// The ability value index (usually 1 or 2). - /// A filter for the abilities. For instance, you might want to filter by the ability grouping rule's value. - /// The ability value. - public static string GetAbilityValue(this IAbilityObject obj, string name, int index = 1, bool includeShared = true, bool includeEmpireCommon = true, Func filter = null) - { - if (obj == null) - return null; - - var abils = obj.Abilities(); - if (includeShared) - abils = abils.Union(obj.SharedAbilities()); - if (includeEmpireCommon) - abils = abils.Union(obj.EmpireCommonAbilities()); - - abils = abils.Where(a => a.Rule != null && a.Rule.Matches(name) && a.Rule.CanTarget(obj.AbilityTarget) && (filter == null || filter(a))); - abils = abils.Stack(obj); - if (!abils.Any()) - return null; - return abils.First().Values[index - 1]; - } - - public static string GetAbilityValue(this IEnumerable objs, string name, IAbilityObject stackTo, int index = 1, bool includeShared = true, bool includeEmpireCommon = true, Func filter = null) - { - var tuples = objs.Squash(o => o.Abilities()); - if (includeShared) - tuples = tuples.Union(objs.Squash(o => o.SharedAbilities())); - if (includeEmpireCommon) - tuples = tuples.Union(objs.Squash(o => o.EmpireCommonAbilities())); - var abils = tuples.GroupBy(t => new { Rule = t.Item2.Rule, Object = t.Item1 }).Where(g => g.Key.Rule.Matches(name) && g.Key.Rule.CanTarget(g.Key.Object.AbilityTarget)).SelectMany(x => x).Select(t => t.Item2).Where(a => filter == null || filter(a)).Stack(stackTo); - if (!abils.Any()) - return null; - return abils.First().Values[index - 1]; - } - - /// - /// Gets abilities that have been shared to an object. - /// - /// - /// - public static IEnumerable SharedAbilities(this IAbilityObject obj, Func? sourceFilter = null) - { - // Unowned objects cannot have abilities shared to them. - var ownable = obj as IOwnableAbilityObject; - if (ownable == null || ownable.Owner == null) - yield break; - - // update cache if necessary - foreach (var clause in ownable.Owner.ReceivedTreatyClauses.Flatten().OfType()) - { - var tuple = Tuple.Create(ownable, clause.Owner); - if (Empire.Current == null || !Galaxy.Current.SharedAbilityCache.ContainsKey(tuple)) - Galaxy.Current.SharedAbilityCache[tuple] = FindSharedAbilities(ownable, clause).ToArray(); - } - - // get cached abilities - foreach (var keyTuple in Galaxy.Current.SharedAbilityCache.Keys.Where(k => k.Item1 == ownable && (sourceFilter == null || sourceFilter(k.Item2)))) - { - foreach (var abil in Galaxy.Current.SharedAbilityCache[keyTuple]) - yield return abil; - } - } - - /// - /// Gets abilities that have been shared to an object. - /// - /// - /// - public static IEnumerable SharedAbilities(this ICommonAbilityObject obj, Empire empire, Func sourceFilter = null) - { - if (obj == null) - yield break; - if (empire == null) - yield break; - - foreach (var clause in empire.ReceivedTreatyClauses.Flatten().OfType()) - { - var rule = clause.AbilityRule; - if (clause.AbilityRule.CanTarget(obj.AbilityTarget)) - { - if (rule.CanTarget(AbilityTargets.Sector) && obj is ILocated) - { - var sector = ((ILocated)obj).Sector; - foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) - { - foreach (var abil in sector.EmpireAbilities(emp, sourceFilter)) - { - if (clause.AbilityRule == abil.Rule) - yield return abil; - } - } - } - else if (rule.CanTarget(AbilityTargets.StarSystem) && (obj is StarSystem || obj is ILocated)) - { - var sys = ((ILocated)obj).StarSystem; - foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) - { - foreach (var abil in sys.EmpireAbilities(emp, sourceFilter)) - { - if (clause.AbilityRule == abil.Rule) - yield return abil; - } - } - } - else if (rule.CanTarget(AbilityTargets.Galaxy)) - { - foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) - { - foreach (var abil in Galaxy.Current.EmpireAbilities(emp, sourceFilter)) - { - if (clause.AbilityRule == abil.Rule) - yield return abil; - } - } - } - } - } - } - - /// - /// All abilities belonging to an object, before stacking. - /// - /// - /// - /// - public static IEnumerable UnstackedAbilities(this IAbilityObject obj, bool includeShared, Func? sourceFilter = null) - { - if (obj == null) - return Enumerable.Empty(); - - IEnumerable result; - var descendantAbilities = obj.DescendantAbilities(sourceFilter); - var ancestorAbilities = obj.AncestorAbilities(sourceFilter); - var sharedAbilities = obj.SharedAbilities(sourceFilter); - if (sourceFilter == null || sourceFilter(obj)) - result = obj.IntrinsicAbilities.Concat(descendantAbilities).Concat(ancestorAbilities); - else - result = descendantAbilities.Concat(ancestorAbilities); - - if (includeShared) - result = result.Concat(sharedAbilities); - - return result; - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Civilization.Diplomacy.Clauses; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Extensions +{ + /// + /// Extensions relating to abilities. + /// + public static class AbilityExtensions + { + /// + /// All abilities belonging to an object. + /// + /// + /// + public static IEnumerable Abilities(this IAbilityObject obj, Func sourceFilter = null) + { + if (obj == null) + return Enumerable.Empty(); + + if (sourceFilter == null && Galaxy.Current != null && Galaxy.Current.IsAbilityCacheEnabled) + { + // use the ability cache + if (Galaxy.Current.AbilityCache[obj] == null) + Galaxy.Current.AbilityCache[obj] = obj.UnstackedAbilities(true, sourceFilter).Stack(obj).ToArray(); + return Galaxy.Current.AbilityCache[obj]; + } + + return obj.UnstackedAbilities(true, sourceFilter).Stack(obj); + } + + public static ILookup AbilityTree(this IAbilityObject obj, Func sourceFilter = null) + { + return obj.UnstackedAbilities(true, sourceFilter).StackToTree(obj); + } + + /// + /// Gets any abilities that can be activated. + /// + /// + /// + public static IDictionary ActivatableAbilities(this Vehicle v) + { + var dict = new Dictionary(); + foreach (var a in v.Hull.Abilities) + { + if (a.Rule.IsActivatable) + dict.Add(a, v.Hull); + } + foreach (var c in v.Components.Where(c => !c.IsDestroyed)) + { + foreach (var a in c.Abilities) + { + if (a.Rule.IsActivatable) + dict.Add(a, c); + } + } + return dict; + } + + /// + /// Gets any abilities that can be activated. + /// + /// + /// + public static IDictionary ActivatableAbilities(this Planet p) + { + var dict = new Dictionary(); + if (p.Colony == null) + return dict; + foreach (var f in p.Colony.Facilities.Where(f => !f.IsDestroyed)) + { + foreach (var a in f.Abilities) + { + if (a.Rule.IsActivatable) + dict.Add(a, f); + } + } + return dict; + } + + /// + /// Gets any abilities that can be activated. + /// + /// + /// + public static IDictionary ActivatableAbilities(this IAbilityObject o) + { + if (o is Vehicle) + return ((Vehicle)o).ActivatableAbilities(); + if (o is Planet) + return ((Planet)o).ActivatableAbilities(); + + var dict = new Dictionary(); + foreach (var a in o.Abilities()) + { + if (a.Rule.IsActivatable) + dict.Add(a, o); + } + return dict; + } + + public static Ability AddAbility(this IAbilityContainer obj, string abilityName, params object[] vals) + { + return obj.AddAbility(Mod.Current.AbilityRules.Single(r => r.Name == abilityName || r.Aliases.Contains(abilityName)), vals); + } + + public static Ability AddAbility(this IAbilityContainer obj, AbilityRule rule, params object[] vals) + { + var a = new Ability(obj, rule, null, vals); + obj.Abilities.Add(a); + return a; + } + + /// + /// Abilities inherited from ancestor objects. + /// + /// + /// + /// + public static IEnumerable AncestorAbilities(this IAbilityObject obj, Func? sourceFilter = null) + { + var abils = new List(); + foreach (var p in obj.Ancestors(sourceFilter).ExceptSingle(null)) + abils.AddRange(p.IntrinsicAbilities); + return abils.Where(a => a.Rule == null || a.Rule.CanTarget(obj.AbilityTarget)); + } + + public static IEnumerable Ancestors(this IAbilityObject obj, Func? sourceFilter = null) + { + if (obj == null) + yield break; + // TODO - filter out duplicate ancestors + foreach (var p in obj.Parents.ExceptSingle(null)) + { + if (p != null && (sourceFilter == null || sourceFilter(p))) + { + yield return p; + foreach (var x in p.Ancestors(sourceFilter)) + yield return x; + } + } + } + + /// + /// Consumes supplies if possible. + /// + /// The ability consuming supplies. + /// true if successful or unnecessary, otherwise false + public static bool BurnSupplies(this Ability a) + { + if (a.Container is Component) + return (a.Container as Component).BurnSupplies(); + else + return true; // other ability containers don't use supplies + } + + public static void ClearAbilityCache(this IAbilityObject o) + { + Galaxy.Current.AbilityCache.Remove(o); + } + + /// + /// Abilities passed up from descendant objects. + /// + /// + /// + /// + public static IEnumerable DescendantAbilities(this IAbilityObject obj, Func? sourceFilter = null) + { + var abils = new List(); + foreach (var c in obj.Descendants(sourceFilter)) + abils.AddRange(c.IntrinsicAbilities); + return abils.Where(a => a.Rule == null || a.Rule.CanTarget(obj.AbilityTarget)); + } + + public static IEnumerable Descendants(this IAbilityObject obj, Func? sourceFilter = null) + { + // we can't use a HashSet here because e.g. ships can have multiples of the same engine template installed + List result = new(); + if (obj != null) + { + foreach (var c in obj.Children) + { + if (c is not null && (sourceFilter is null || sourceFilter(c))) + { + result.Add(c); + foreach (var x in c.Descendants(sourceFilter)) + result.Add(x); + } + } + } + return result; + } + + public static IEnumerable EmpireAbilities(this ICommonAbilityObject obj, Empire emp, Func sourceFilter = null) + { + if (obj == null) + return Enumerable.Empty(); + + if (sourceFilter == null) + { + var subobjs = obj.GetContainedAbilityObjects(emp); + Func> getabils = () => + subobjs.SelectMany(o => o.Abilities()).Where(a => a.Rule.CanTarget(obj.AbilityTarget)); + if (Galaxy.Current.IsAbilityCacheEnabled) + { + var tuple = Tuple.Create(obj, emp); + if (Galaxy.Current.CommonAbilityCache[tuple] == null) + Galaxy.Current.CommonAbilityCache[tuple] = getabils(); + return Galaxy.Current.CommonAbilityCache[tuple]; + } + else + return getabils(); + } + else + return obj.GetContainedAbilityObjects(emp).Where(o => sourceFilter(o)).SelectMany(o => o.Abilities()).Where(a => a.Rule.CanTarget(obj.AbilityTarget)); + } + + /// + /// Finds empire-common abilities inherited by an object (e.g. empire abilities of a sector in which a ship resides). + /// + /// + /// + /// + public static IEnumerable EmpireCommonAbilities(this IAbilityObject obj, Func sourceFilter = null) + { + // Unowned objects cannot empire common abilities. + var ownable = obj as IOwnableAbilityObject; + if (ownable == null || ownable.Owner == null) + yield break; + + // Where are these abilities coming from? + // Right now they can only come from ancestors, since sectors and star systems are the only common ability objects. + // TODO - Would it make sense for them to come from descendants? What kind of common ability object could be used as a descendant of an owned object? + var ancestors = obj.Ancestors(sourceFilter).OfType(); + + // What abilities do we have? + foreach (var ancestor in ancestors) + { + foreach (var abil in ancestor.EmpireAbilities(ownable.Owner, sourceFilter)) + yield return abil; + } + } + + private static IEnumerable FindSharedAbilities(this IOwnableAbilityObject obj, ShareAbilityClause clause) + { + if (obj == null) + yield break; + + var rule = clause.AbilityRule; + if (rule.CanTarget(obj.AbilityTarget)) + { + if (rule.CanTarget(AbilityTargets.Sector) && obj is ILocated) + { + var sector = ((ILocated)obj).Sector; + foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) + { + foreach (var abil in sector.EmpireAbilities(emp)) + { + if (rule == abil.Rule) + yield return abil; + } + } + } + else if (rule.CanTarget(AbilityTargets.StarSystem) && obj is ILocated) + { + var sys = ((ILocated)obj).StarSystem; + foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) + { + foreach (var abil in sys.EmpireAbilities(emp)) + { + if (rule == abil.Rule) + yield return abil; + } + } + } + else if (rule.CanTarget(AbilityTargets.Galaxy)) + { + foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) + { + foreach (var abil in Galaxy.Current.EmpireAbilities(emp)) + { + if (rule == abil.Rule) + yield return abil; + } + } + } + } + } + + /// + /// Aggregates abilities for an empire's space objects. + /// + /// + /// + /// + /// + /// + public static string GetEmpireAbilityValue(this ICommonAbilityObject obj, Empire emp, string name, int index = 1, Func filter = null) + { + if (obj == null) + return null; + + if (filter == null && Galaxy.Current.IsAbilityCacheEnabled) + { + // use the cache + var cached = Galaxy.Current.CommonAbilityCache[Tuple.Create(obj, emp)]; + if (cached != null) + { + if (cached.Any()) + return cached.Where(x => x.Rule.Matches(name)).Stack(obj).FirstOrDefault()?.Values[index - 1]; + else + return null; + } + } + + IEnumerable abils; + var subabils = obj.GetContainedAbilityObjects(emp).SelectMany(o => o.UnstackedAbilities(true).Where(a => a.Rule.Name == name)); + if (obj is IAbilityObject) + abils = ((IAbilityObject)obj).Abilities().Where(a => a.Rule != null && a.Rule.Name == name).Concat(subabils).Stack(obj); + else + abils = subabils; + abils = abils.Where(a => a.Rule != null && a.Rule.Matches(name) && a.Rule.CanTarget(obj.AbilityTarget) && (filter == null || filter(a))); + string result; + if (!abils.Any()) + result = null; + else + result = abils.First().Values[index - 1]; + + // cache abilities if we can + if (filter == null && Galaxy.Current.IsAbilityCacheEnabled) + Galaxy.Current.CommonAbilityCache[Tuple.Create(obj, emp)] = abils.ToArray(); + + return result; + } + + /// + /// Gets an ability value. + /// If the stacking rule in the mod is DoNotStack, an arbitrary matching ability will be chosen. + /// If there are no values, null will be returned. + /// + /// The name of the ability. + /// The object from which to get the value. + /// The ability value index (usually 1 or 2). + /// A filter for the abilities. For instance, you might want to filter by the ability grouping rule's value. + /// The ability value. + public static string GetAbilityValue(this IAbilityObject obj, string name, int index = 1, bool includeShared = true, bool includeEmpireCommon = true, Func filter = null) + { + if (obj == null) + return null; + + var abils = obj.Abilities(); + if (includeShared) + abils = abils.Union(obj.SharedAbilities()); + if (includeEmpireCommon) + abils = abils.Union(obj.EmpireCommonAbilities()); + + abils = abils.Where(a => a.Rule != null && a.Rule.Matches(name) && a.Rule.CanTarget(obj.AbilityTarget) && (filter == null || filter(a))); + abils = abils.Stack(obj); + if (!abils.Any()) + return null; + return abils.First().Values[index - 1]; + } + + public static string GetAbilityValue(this IEnumerable objs, string name, IAbilityObject stackTo, int index = 1, bool includeShared = true, bool includeEmpireCommon = true, Func filter = null) + { + var tuples = objs.Squash(o => o.Abilities()); + if (includeShared) + tuples = tuples.Union(objs.Squash(o => o.SharedAbilities())); + if (includeEmpireCommon) + tuples = tuples.Union(objs.Squash(o => o.EmpireCommonAbilities())); + var abils = tuples.GroupBy(t => new { Rule = t.Item2.Rule, Object = t.Item1 }).Where(g => g.Key.Rule.Matches(name) && g.Key.Rule.CanTarget(g.Key.Object.AbilityTarget)).SelectMany(x => x).Select(t => t.Item2).Where(a => filter == null || filter(a)).Stack(stackTo); + if (!abils.Any()) + return null; + return abils.First().Values[index - 1]; + } + + /// + /// Gets abilities that have been shared to an object. + /// + /// + /// + public static IEnumerable SharedAbilities(this IAbilityObject obj, Func? sourceFilter = null) + { + // Unowned objects cannot have abilities shared to them. + var ownable = obj as IOwnableAbilityObject; + if (ownable == null || ownable.Owner == null) + yield break; + + // update cache if necessary + foreach (var clause in ownable.Owner.ReceivedTreatyClauses.Flatten().OfType()) + { + var tuple = Tuple.Create(ownable, clause.Owner); + if (Empire.Current == null || !Galaxy.Current.SharedAbilityCache.ContainsKey(tuple)) + Galaxy.Current.SharedAbilityCache[tuple] = FindSharedAbilities(ownable, clause).ToArray(); + } + + // get cached abilities + foreach (var keyTuple in Galaxy.Current.SharedAbilityCache.Keys.Where(k => k.Item1 == ownable && (sourceFilter == null || sourceFilter(k.Item2)))) + { + foreach (var abil in Galaxy.Current.SharedAbilityCache[keyTuple]) + yield return abil; + } + } + + /// + /// Gets abilities that have been shared to an object. + /// + /// + /// + public static IEnumerable SharedAbilities(this ICommonAbilityObject obj, Empire empire, Func sourceFilter = null) + { + if (obj == null) + yield break; + if (empire == null) + yield break; + + foreach (var clause in empire.ReceivedTreatyClauses.Flatten().OfType()) + { + var rule = clause.AbilityRule; + if (clause.AbilityRule.CanTarget(obj.AbilityTarget)) + { + if (rule.CanTarget(AbilityTargets.Sector) && obj is ILocated) + { + var sector = ((ILocated)obj).Sector; + foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) + { + foreach (var abil in sector.EmpireAbilities(emp, sourceFilter)) + { + if (clause.AbilityRule == abil.Rule) + yield return abil; + } + } + } + else if (rule.CanTarget(AbilityTargets.StarSystem) && (obj is StarSystem || obj is ILocated)) + { + var sys = ((ILocated)obj).StarSystem; + foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) + { + foreach (var abil in sys.EmpireAbilities(emp, sourceFilter)) + { + if (clause.AbilityRule == abil.Rule) + yield return abil; + } + } + } + else if (rule.CanTarget(AbilityTargets.Galaxy)) + { + foreach (var emp in Galaxy.Current.Empires.Where(emp => emp != null)) + { + foreach (var abil in Galaxy.Current.EmpireAbilities(emp, sourceFilter)) + { + if (clause.AbilityRule == abil.Rule) + yield return abil; + } + } + } + } + } + } + + /// + /// All abilities belonging to an object, before stacking. + /// + /// + /// + /// + public static IEnumerable UnstackedAbilities(this IAbilityObject obj, bool includeShared, Func? sourceFilter = null) + { + if (obj == null) + return Enumerable.Empty(); + + IEnumerable result; + var descendantAbilities = obj.DescendantAbilities(sourceFilter); + var ancestorAbilities = obj.AncestorAbilities(sourceFilter); + var sharedAbilities = obj.SharedAbilities(sourceFilter); + if (sourceFilter == null || sourceFilter(obj)) + result = obj.IntrinsicAbilities.Concat(descendantAbilities).Concat(ancestorAbilities); + else + result = descendantAbilities.Concat(ancestorAbilities); + + if (includeShared) + result = result.Concat(sharedAbilities); + + return result; + } + } +} diff --git a/FrEee/Utility/Extensions/ChecksExtensions.cs b/FrEee/Extensions/ChecksExtensions.cs similarity index 96% rename from FrEee/Utility/Extensions/ChecksExtensions.cs rename to FrEee/Extensions/ChecksExtensions.cs index 8a5450153..639d26cec 100644 --- a/FrEee/Utility/Extensions/ChecksExtensions.cs +++ b/FrEee/Extensions/ChecksExtensions.cs @@ -1,473 +1,474 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Modding.Interfaces; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Drawing; -using System.Dynamic; -using System.Linq; -using System.Reflection; - -namespace FrEee.Utility.Extensions -{ - public static class ChecksExtensions - { - private static SafeDictionary> attributeCache = new SafeDictionary>(); - - private static SafeDictionary> interfaceCache = new SafeDictionary>(); - - private static SafeDictionary> memberCache = new SafeDictionary>(); - - /// - /// Checks for attributes in a class or its interfaces. - /// - /// - /// - /// - public static IEnumerable GetAttributes(this MemberInfo mi) where T : Attribute - { - if (attributeCache[mi] == null) - attributeCache[mi] = Attribute.GetCustomAttributes(mi).ToArray(); - var atts = attributeCache[mi].OfType(); - foreach (var att in atts) - yield return att; - if (interfaceCache[mi.DeclaringType] == null) - interfaceCache[mi.DeclaringType] = mi.DeclaringType.GetInterfaces(); - foreach (var i in interfaceCache[mi.DeclaringType]) - { - if (memberCache[i] == null) - memberCache[i] = i.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).ToArray(); // TODO - refactor into method - var mi2 = memberCache[i].SingleOrDefault(x => x.MemberType == mi.MemberType && x.Name == mi.Name); - if (mi2 != null) - { - foreach (var att2 in mi2.GetAttributes()) - yield return att2; - } - } - } - - /// - /// Determines if an object has a specified ability. - /// - /// - /// - /// - public static bool HasAbility(this IAbilityObject obj, string abilityName, bool includeShared = true) - { - IEnumerable abils; - if (includeShared && obj is IOwnableAbilityObject) - abils = obj.UnstackedAbilities(true).Union(obj.SharedAbilities()); - else - abils = obj.UnstackedAbilities(true); - return abils.Any(abil => abil.Rule != null && abil.Rule.Matches(abilityName)); - } - - /// - /// Determines if a common ability object has a specified ability for an empire. - /// - /// - /// - /// - public static bool HasAbility(this ICommonAbilityObject obj, string abilityName, Empire emp, bool includeShared = true) - { - IEnumerable abils; - if (includeShared) - abils = obj.EmpireAbilities(emp).Union(obj.SharedAbilities(emp)); - else - abils = obj.EmpireAbilities(emp); - return abils.Any(abil => abil.Rule != null && abil.Rule.Matches(abilityName)); - } - - /// - /// Checks for attributes in a class or its interfaces. - /// - /// - /// - /// - public static bool HasAttribute(this MemberInfo mi) - { - return mi.HasAttribute(typeof(T)); - } - - /// - /// Checks for attributes in a class or its interfaces. - /// - /// - /// - /// - public static bool HasAttribute(this MemberInfo mi, Type attributeType, bool checkInterfaces = true) - { - if (attributeCache[mi] == null) - attributeCache[mi] = Attribute.GetCustomAttributes(mi).ToArray(); - if (attributeCache[mi].Where(a => attributeType.IsAssignableFrom(a.GetType())).Any()) - return true; - var dt = mi is Type ? mi as Type : mi.DeclaringType; - if (checkInterfaces) - { - if (interfaceCache[dt] == null) - interfaceCache[dt] = dt.GetInterfaces(); - foreach (var i in interfaceCache[dt]) - { - if (memberCache[i] == null) - memberCache[i] = i.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).ToArray(); // TODO - refactor into method - if (memberCache[i].Any(m => m.Name == mi.Name && m.MemberType == mi.MemberType && m.HasAttribute(attributeType, false))) // no need to check interfaces of interfaces, they're already listed by GetInterfaces - return true; - } - } - return false; - } - - public static bool HasProperty(this ExpandoObject obj, string propertyName) - { - return obj.GetType().GetProperty(propertyName) != null; - } - - /// - /// Does this object's ID match what the galaxy says it is? - /// - /// - /// - public static bool HasValidID(this IReferrable r) - { - return Galaxy.Current.referrables.ContainsKey(r.ID) && Galaxy.Current.referrables[r.ID] == r; - } - - /// - /// Is this type safe to pass from the client to the server? - /// Primitives, strings, points and colors are client safe. - /// So are types implementing IPromotable. - /// - /// - /// - public static bool IsClientSafe(this Type t) - { - return - t.IsPrimitive || - t == typeof(string) || - t == typeof(Point) || - t == typeof(Color) || - typeof(IEnumerable).IsAssignableFrom(t) || - typeof(IEnumerable).IsAssignableFrom(t) || - typeof(IPromotable).IsAssignableFrom(t) || - t.BaseType != null && t.BaseType.IsClientSafe() || - t.GetInterfaces().Any(i => i.IsClientSafe()); - } - - public static bool IsDirectFire(this WeaponTypes wt) - { - return wt == WeaponTypes.DirectFire || wt == WeaponTypes.DirectFirePointDefense; - } - - /// - /// Tests for divisibility. - /// - /// - /// - /// - /// - public static bool IsDivisibleBy(this int dividend, int divisor) - { - return dividend % divisor == 0; - } - - /// - /// Is this space object hidden from view of an empire due to cloaking? - /// Space objects are hidden from view if they have at least one cloaking ability, and - /// all cloaking abilities they possess outrank the appropriate sensors possessed by the empire in the system. - /// However a space object must possess at least one cloaking ability to actually be cloaked. - /// - /// - /// Unlike in SE4, where cloaks must outrank sensors in five specific sight types, - /// in FrEee, sight types are just custom strings in the data files, so cloaks must only outrank sensors - /// in sight types that the viewing empire actually possesses in the system. - /// Thus, a level 2 temporal cloak will hide you from enemy sight on its own, even if you don't have a - /// level 2 psychic cloak or a level 2 foobar cloak or whatever. However if the enemy has a level 2 temporal - /// sensor, or a level 1 sensor of any type but temporal, then they can see you. - /// - /// - /// - /// - public static bool IsHiddenFrom(this ISpaceObject sobj, Empire emp) - { - var sys = sobj.StarSystem; - var sec = sobj.Sector; - var sensors = sys.EmpireAbilities(emp).Where(a => a.Rule.Name == "Sensor Level"); - var cloaks = sobj.Abilities().Where(a => a.Rule.Name == "Cloak Level"); - var joined = from sensor in sensors - join cloak in cloaks on sensor.Value1.Value equals cloak.Value1.Value into gj - from subcloak in gj.DefaultIfEmpty() - select new - { - SightType = sensor.Value1.Value, - SensorLevel = sensor.Value2.Value.ToInt(), - CloakLevel = subcloak == null ? 0 : subcloak.Value2.Value.ToInt(), - }; - - int obscurationLevel = 0; - if (sobj.CanBeObscured) - { - if (sobj.StarSystem.Name == "Citronelle") - { - - } - var so = sys.GetEmpireAbilityValue(sobj.Owner, "System - Sight Obscuration"); - obscurationLevel = new[] - { - sys.GetAbilityValue("System - Sight Obscuration"), - so, - sec.GetAbilityValue("Sector - Sight Obscuration"), - sec.GetEmpireAbilityValue(sobj.Owner, "Sector - Sight Obscuration"), - }.Max(a => a.ToInt()); - } - return (cloaks.Any() || obscurationLevel > 0) && joined.All(j => j.CloakLevel > j.SensorLevel || obscurationLevel > j.SensorLevel); - } - - /// - /// Is this order a new order added this turn, or one the server already knows about? - /// - /// - /// - public static bool IsNew(this IOrder order) - { - return Galaxy.Current.Referrables.OfType().Where(cmd => cmd.Order == order).Any(); - } - - public static bool IsPointDefense(this WeaponTypes wt) - { - return wt == WeaponTypes.DirectFirePointDefense || wt == WeaponTypes.SeekingPointDefense || wt == WeaponTypes.WarheadPointDefense; - } - - public static bool IsScalar(this Type t) - { - return t.IsPrimitive || t.IsEnum || t == typeof(string); - } - - public static bool IsSeeking(this WeaponTypes wt) - { - return wt == WeaponTypes.Seeking || wt == WeaponTypes.SeekingPointDefense; - } - - public static void IssueOrder(this IOrderable obj, IOrder order) - { - if (obj.Owner != Empire.Current) - throw new Exception("Cannot issue orders to another empire's objects."); - Empire.Current.IssueOrder(obj, order); - } - - public static bool IsValid(this IErrorProne obj) - { - return !obj.Errors.Any(); - } - - public static bool IsWarhead(this WeaponTypes wt) - { - return wt == WeaponTypes.Warhead || wt == WeaponTypes.WarheadPointDefense; - } - - public static bool StillExists(this T old, IEnumerable oldItems, IEnumerable nuItems) - where T : IModObject - { - var match = nuItems.FindByModID(old.ModID); - if (match != null) - return true; - match = nuItems.FindByTypeNameIndex(old.GetType(), old.Name, oldItems.GetIndex(old)); - return match != null; - } - - /// - /// Slower implementation of ContainsKey for dictionaries, for use in Equals/GetHashCode debugging - /// - /// The type of the key. - /// The type of the value. - /// The dictionary. - /// The key. - /// - public static bool TestContainsKey(this IDictionary dict, TKey key) - { - var hash = EqualityComparer.Default.GetHashCode(key); - return dict.Any( - kvp => hash == EqualityComparer.Default.GetHashCode(kvp.Key) - - && EqualityComparer.Default.Equals(kvp.Key, key) - ); - } - - public static bool UpgradesTo(this T self, T other) where T : IUpgradeable - { - return self.NewerVersions.Contains(other); - } - - /// - /// Determines if this object is a memory of a known object. - /// - /// The object to check. - /// true if it is a memory of a known object, otherwise false. - public static bool IsMemoryOfKnownObject(this ISpaceObject sobj) - { - return sobj.IsMemory && Empire.Current == null && (sobj.ID == 0 || Galaxy.Current.referrables.ContainsKey(sobj.ID)); - } - - /// - /// Determines the level of visibility of a space object to an empire. - ///
- /// If you only need to verify that a space object has at least a certain level of visibility, - /// it is less expensive to call . - ///
- /// The space object to check. - /// The empire to check against. - /// The visibility level. - internal static Visibility CheckSpaceObjectVisibility(this ISpaceObject sobj, Empire emp) - { - bool hasMemory = false; - if (sobj.IsMemory) - { - var mowner = sobj.MemoryOwner(); - if (mowner == emp || mowner == null) - return Visibility.Fogged; - else - return Visibility.Unknown; // can't see other players' memories - } - else - { - var mem = sobj.FindMemory(emp); - if (mem != null) - hasMemory = true; - } - - if (emp == sobj.Owner) - return Visibility.Owned; - - // You can always scan space objects you are in combat with. - // But only their state at the time they were in combat; not for the rest of the turn! - // TODO - what about glassed planets, they have no owner... - if (Galaxy.Current.Battles.Any(b => - (b.Combatants.OfType().Contains(sobj) - || b.StartCombatants.Values.OfType().Contains(sobj) - || b.EndCombatants.Values.OfType().Contains(sobj)) - && b.Combatants.Any(c => c.Owner == emp))) - return Visibility.Scanned; - - // do we have anything that can see it? - var sys = sobj.StarSystem; - if (sys == null) - return Visibility.Unknown; - var seers = sys.FindSpaceObjects(s => s.Owner == emp && !s.IsMemory); - if (!seers.Any() || sobj.IsHiddenFrom(emp)) - { - if (Galaxy.Current.OmniscientView && sobj.StarSystem.ExploredByEmpires.Contains(emp)) - return Visibility.Visible; - if (emp.AllSystemsExploredFromStart) - return Visibility.Fogged; - var known = emp.Memory[sobj.ID]; - if (known != null && sobj.GetType() == known.GetType()) - return Visibility.Fogged; - else if (Galaxy.Current.Battles.Any(b => b.Combatants.Any(c => c.ID == sobj.ID) && b.Combatants.Any(c => c.Owner == emp))) - return Visibility.Fogged; - else if (hasMemory) - return Visibility.Fogged; - else - return Visibility.Unknown; - } - if (!sobj.HasAbility("Scanner Jammer")) - { - var scanners = seers.Where(s => - s.HasAbility("Long Range Scanner") && s.GetAbilityValue("Long Range Scanner").ToInt() >= s.Sector.Coordinates.EightWayDistance(sobj.FindSector().Coordinates) - || s.HasAbility("Long Range Scanner - System")); - if (scanners.Any()) - return Visibility.Scanned; - } - return Visibility.Visible; - } - - /// - /// Checks for a specific visibility level of a space object for an empire. - /// If the object has that level of visibility or higher, we return true. - /// - /// - /// This allows us to short circuit the more expensive scanner code. - /// See also parallel code at - /// - /// The space object to check. - /// The empire to check against. - /// The requested visibility level. - /// true if the space object has at least the requested visibility level, otherwise false. - public static bool HasVisibility(this ISpaceObject sobj, Empire emp, Visibility desiredVisibility) - { - bool hasMemory = false; - if (sobj.IsMemory) - { - var mowner = sobj.MemoryOwner(); - if (mowner == emp || mowner == null) - return Visibility.Fogged >= desiredVisibility; - else - return Visibility.Unknown >= desiredVisibility; // can't see other players' memories - } - else - { - var mem = sobj.FindMemory(emp); - if (mem != null) - hasMemory = true; - } - - if (emp == sobj.Owner) - return Visibility.Owned >= desiredVisibility; - - // You can always scan space objects you are in combat with. - // But only their state at the time they were in combat; not for the rest of the turn! - // TODO - what about glassed planets, they have no owner... - if (Galaxy.Current.Battles.Any(b => - (b.Combatants.OfType().Contains(sobj) - || b.StartCombatants.Values.OfType().Contains(sobj) - || b.EndCombatants.Values.OfType().Contains(sobj)) - && b.Combatants.Any(c => c.Owner == emp))) - return Visibility.Scanned >= desiredVisibility; - - // do we have anything that can see it? - var sys = sobj.StarSystem; - if (sys == null) - return Visibility.Unknown >= desiredVisibility; - var seers = sys.FindSpaceObjects(s => s.Owner == emp && !s.IsMemory); - if (!seers.Any() || sobj.IsHiddenFrom(emp)) - { - if (Galaxy.Current.OmniscientView && sobj.StarSystem.ExploredByEmpires.Contains(emp)) - return Visibility.Visible >= desiredVisibility; - if (emp.AllSystemsExploredFromStart) - return Visibility.Fogged >= desiredVisibility; - var known = emp.Memory[sobj.ID]; - if (known != null && sobj.GetType() == known.GetType()) - return Visibility.Fogged >= desiredVisibility; - else if (Galaxy.Current.Battles.Any(b => b.Combatants.Any(c => c.ID == sobj.ID) && b.Combatants.Any(c => c.Owner == emp))) - return Visibility.Fogged >= desiredVisibility; - else if (hasMemory) - return Visibility.Fogged >= desiredVisibility; - else - return Visibility.Unknown >= desiredVisibility; - } - - // short circuit scanner code: we now know that the object is either visible or scanned - // so if we only care if it's visible or less, we can skip the scanner check. - if (Visibility.Visible >= desiredVisibility) - return true; - - if (!sobj.HasAbility("Scanner Jammer")) - { - var scanners = seers.Where(s => - s.HasAbility("Long Range Scanner") && s.GetAbilityValue("Long Range Scanner").ToInt() >= s.Sector.Coordinates.EightWayDistance(sobj.FindSector().Coordinates) - || s.HasAbility("Long Range Scanner - System")); - if (scanners.Any()) - return Visibility.Scanned >= desiredVisibility; - } - - // we know that the requested visibility level is greater than "visible" - // and the object has a scanner jammer - // therefore it can't be scanned, and we already know it's not owned, we checked that up top - // so we can just return false because the requested visibility (scanned or owned) can't be met - return false; - } - } -} \ No newline at end of file +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Modding.Interfaces; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Drawing; +using System.Dynamic; +using System.Linq; +using System.Reflection; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Extensions +{ + public static class ChecksExtensions + { + private static SafeDictionary> attributeCache = new SafeDictionary>(); + + private static SafeDictionary> interfaceCache = new SafeDictionary>(); + + private static SafeDictionary> memberCache = new SafeDictionary>(); + + /// + /// Checks for attributes in a class or its interfaces. + /// + /// + /// + /// + public static IEnumerable GetAttributes(this MemberInfo mi) where T : Attribute + { + if (attributeCache[mi] == null) + attributeCache[mi] = Attribute.GetCustomAttributes(mi).ToArray(); + var atts = attributeCache[mi].OfType(); + foreach (var att in atts) + yield return att; + if (interfaceCache[mi.DeclaringType] == null) + interfaceCache[mi.DeclaringType] = mi.DeclaringType.GetInterfaces(); + foreach (var i in interfaceCache[mi.DeclaringType]) + { + if (memberCache[i] == null) + memberCache[i] = i.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).ToArray(); // TODO - refactor into method + var mi2 = memberCache[i].SingleOrDefault(x => x.MemberType == mi.MemberType && x.Name == mi.Name); + if (mi2 != null) + { + foreach (var att2 in mi2.GetAttributes()) + yield return att2; + } + } + } + + /// + /// Determines if an object has a specified ability. + /// + /// + /// + /// + public static bool HasAbility(this IAbilityObject obj, string abilityName, bool includeShared = true) + { + IEnumerable abils; + if (includeShared && obj is IOwnableAbilityObject) + abils = obj.UnstackedAbilities(true).Union(obj.SharedAbilities()); + else + abils = obj.UnstackedAbilities(true); + return abils.Any(abil => abil.Rule != null && abil.Rule.Matches(abilityName)); + } + + /// + /// Determines if a common ability object has a specified ability for an empire. + /// + /// + /// + /// + public static bool HasAbility(this ICommonAbilityObject obj, string abilityName, Empire emp, bool includeShared = true) + { + IEnumerable abils; + if (includeShared) + abils = obj.EmpireAbilities(emp).Union(obj.SharedAbilities(emp)); + else + abils = obj.EmpireAbilities(emp); + return abils.Any(abil => abil.Rule != null && abil.Rule.Matches(abilityName)); + } + + /// + /// Checks for attributes in a class or its interfaces. + /// + /// + /// + /// + public static bool HasAttribute(this MemberInfo mi) + { + return mi.HasAttribute(typeof(T)); + } + + /// + /// Checks for attributes in a class or its interfaces. + /// + /// + /// + /// + public static bool HasAttribute(this MemberInfo mi, Type attributeType, bool checkInterfaces = true) + { + if (attributeCache[mi] == null) + attributeCache[mi] = Attribute.GetCustomAttributes(mi).ToArray(); + if (attributeCache[mi].Where(a => attributeType.IsAssignableFrom(a.GetType())).Any()) + return true; + var dt = mi is Type ? mi as Type : mi.DeclaringType; + if (checkInterfaces) + { + if (interfaceCache[dt] == null) + interfaceCache[dt] = dt.GetInterfaces(); + foreach (var i in interfaceCache[dt]) + { + if (memberCache[i] == null) + memberCache[i] = i.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).ToArray(); // TODO - refactor into method + if (memberCache[i].Any(m => m.Name == mi.Name && m.MemberType == mi.MemberType && m.HasAttribute(attributeType, false))) // no need to check interfaces of interfaces, they're already listed by GetInterfaces + return true; + } + } + return false; + } + + public static bool HasProperty(this ExpandoObject obj, string propertyName) + { + return obj.GetType().GetProperty(propertyName) != null; + } + + /// + /// Does this object's ID match what the galaxy says it is? + /// + /// + /// + public static bool HasValidID(this IReferrable r) + { + return Galaxy.Current.referrables.ContainsKey(r.ID) && Galaxy.Current.referrables[r.ID] == r; + } + + /// + /// Is this type safe to pass from the client to the server? + /// Primitives, strings, points and colors are client safe. + /// So are types implementing IPromotable. + /// + /// + /// + public static bool IsClientSafe(this Type t) + { + return + t.IsPrimitive || + t == typeof(string) || + t == typeof(Point) || + t == typeof(Color) || + typeof(IEnumerable).IsAssignableFrom(t) || + typeof(IEnumerable).IsAssignableFrom(t) || + typeof(IPromotable).IsAssignableFrom(t) || + t.BaseType != null && t.BaseType.IsClientSafe() || + t.GetInterfaces().Any(i => i.IsClientSafe()); + } + + public static bool IsDirectFire(this WeaponTypes wt) + { + return wt == WeaponTypes.DirectFire || wt == WeaponTypes.DirectFirePointDefense; + } + + /// + /// Tests for divisibility. + /// + /// + /// + /// + /// + public static bool IsDivisibleBy(this int dividend, int divisor) + { + return dividend % divisor == 0; + } + + /// + /// Is this space object hidden from view of an empire due to cloaking? + /// Space objects are hidden from view if they have at least one cloaking ability, and + /// all cloaking abilities they possess outrank the appropriate sensors possessed by the empire in the system. + /// However a space object must possess at least one cloaking ability to actually be cloaked. + /// + /// + /// Unlike in SE4, where cloaks must outrank sensors in five specific sight types, + /// in FrEee, sight types are just custom strings in the data files, so cloaks must only outrank sensors + /// in sight types that the viewing empire actually possesses in the system. + /// Thus, a level 2 temporal cloak will hide you from enemy sight on its own, even if you don't have a + /// level 2 psychic cloak or a level 2 foobar cloak or whatever. However if the enemy has a level 2 temporal + /// sensor, or a level 1 sensor of any type but temporal, then they can see you. + /// + /// + /// + /// + public static bool IsHiddenFrom(this ISpaceObject sobj, Empire emp) + { + var sys = sobj.StarSystem; + var sec = sobj.Sector; + var sensors = sys.EmpireAbilities(emp).Where(a => a.Rule.Name == "Sensor Level"); + var cloaks = sobj.Abilities().Where(a => a.Rule.Name == "Cloak Level"); + var joined = from sensor in sensors + join cloak in cloaks on sensor.Value1.Value equals cloak.Value1.Value into gj + from subcloak in gj.DefaultIfEmpty() + select new + { + SightType = sensor.Value1.Value, + SensorLevel = sensor.Value2.Value.ToInt(), + CloakLevel = subcloak == null ? 0 : subcloak.Value2.Value.ToInt(), + }; + + int obscurationLevel = 0; + if (sobj.CanBeObscured) + { + if (sobj.StarSystem.Name == "Citronelle") + { + + } + var so = sys.GetEmpireAbilityValue(sobj.Owner, "System - Sight Obscuration"); + obscurationLevel = new[] + { + sys.GetAbilityValue("System - Sight Obscuration"), + so, + sec.GetAbilityValue("Sector - Sight Obscuration"), + sec.GetEmpireAbilityValue(sobj.Owner, "Sector - Sight Obscuration"), + }.Max(a => a.ToInt()); + } + return (cloaks.Any() || obscurationLevel > 0) && joined.All(j => j.CloakLevel > j.SensorLevel || obscurationLevel > j.SensorLevel); + } + + /// + /// Is this order a new order added this turn, or one the server already knows about? + /// + /// + /// + public static bool IsNew(this IOrder order) + { + return Galaxy.Current.Referrables.OfType().Where(cmd => cmd.Order == order).Any(); + } + + public static bool IsPointDefense(this WeaponTypes wt) + { + return wt == WeaponTypes.DirectFirePointDefense || wt == WeaponTypes.SeekingPointDefense || wt == WeaponTypes.WarheadPointDefense; + } + + public static bool IsScalar(this Type t) + { + return t.IsPrimitive || t.IsEnum || t == typeof(string); + } + + public static bool IsSeeking(this WeaponTypes wt) + { + return wt == WeaponTypes.Seeking || wt == WeaponTypes.SeekingPointDefense; + } + + public static void IssueOrder(this IOrderable obj, IOrder order) + { + if (obj.Owner != Empire.Current) + throw new Exception("Cannot issue orders to another empire's objects."); + Empire.Current.IssueOrder(obj, order); + } + + public static bool IsValid(this IErrorProne obj) + { + return !obj.Errors.Any(); + } + + public static bool IsWarhead(this WeaponTypes wt) + { + return wt == WeaponTypes.Warhead || wt == WeaponTypes.WarheadPointDefense; + } + + public static bool StillExists(this T old, IEnumerable oldItems, IEnumerable nuItems) + where T : IModObject + { + var match = nuItems.FindByModID(old.ModID); + if (match != null) + return true; + match = nuItems.FindByTypeNameIndex(old.GetType(), old.Name, oldItems.GetIndex(old)); + return match != null; + } + + /// + /// Slower implementation of ContainsKey for dictionaries, for use in Equals/GetHashCode debugging + /// + /// The type of the key. + /// The type of the value. + /// The dictionary. + /// The key. + /// + public static bool TestContainsKey(this IDictionary dict, TKey key) + { + var hash = EqualityComparer.Default.GetHashCode(key); + return dict.Any( + kvp => hash == EqualityComparer.Default.GetHashCode(kvp.Key) + + && EqualityComparer.Default.Equals(kvp.Key, key) + ); + } + + public static bool UpgradesTo(this T self, T other) where T : IUpgradeable + { + return self.NewerVersions.Contains(other); + } + + /// + /// Determines if this object is a memory of a known object. + /// + /// The object to check. + /// true if it is a memory of a known object, otherwise false. + public static bool IsMemoryOfKnownObject(this ISpaceObject sobj) + { + return sobj.IsMemory && Empire.Current == null && (sobj.ID == 0 || Galaxy.Current.referrables.ContainsKey(sobj.ID)); + } + + /// + /// Determines the level of visibility of a space object to an empire. + ///
+ /// If you only need to verify that a space object has at least a certain level of visibility, + /// it is less expensive to call . + ///
+ /// The space object to check. + /// The empire to check against. + /// The visibility level. + internal static Visibility CheckSpaceObjectVisibility(this ISpaceObject sobj, Empire emp) + { + bool hasMemory = false; + if (sobj.IsMemory) + { + var mowner = sobj.MemoryOwner(); + if (mowner == emp || mowner == null) + return Visibility.Fogged; + else + return Visibility.Unknown; // can't see other players' memories + } + else + { + var mem = sobj.FindMemory(emp); + if (mem != null) + hasMemory = true; + } + + if (emp == sobj.Owner) + return Visibility.Owned; + + // You can always scan space objects you are in combat with. + // But only their state at the time they were in combat; not for the rest of the turn! + // TODO - what about glassed planets, they have no owner... + if (Galaxy.Current.Battles.Any(b => + (b.Combatants.OfType().Contains(sobj) + || b.StartCombatants.Values.OfType().Contains(sobj) + || b.EndCombatants.Values.OfType().Contains(sobj)) + && b.Combatants.Any(c => c.Owner == emp))) + return Visibility.Scanned; + + // do we have anything that can see it? + var sys = sobj.StarSystem; + if (sys == null) + return Visibility.Unknown; + var seers = sys.FindSpaceObjects(s => s.Owner == emp && !s.IsMemory); + if (!seers.Any() || sobj.IsHiddenFrom(emp)) + { + if (Galaxy.Current.OmniscientView && sobj.StarSystem.ExploredByEmpires.Contains(emp)) + return Visibility.Visible; + if (emp.AllSystemsExploredFromStart) + return Visibility.Fogged; + var known = emp.Memory[sobj.ID]; + if (known != null && sobj.GetType() == known.GetType()) + return Visibility.Fogged; + else if (Galaxy.Current.Battles.Any(b => b.Combatants.Any(c => c.ID == sobj.ID) && b.Combatants.Any(c => c.Owner == emp))) + return Visibility.Fogged; + else if (hasMemory) + return Visibility.Fogged; + else + return Visibility.Unknown; + } + if (!sobj.HasAbility("Scanner Jammer")) + { + var scanners = seers.Where(s => + s.HasAbility("Long Range Scanner") && s.GetAbilityValue("Long Range Scanner").ToInt() >= s.Sector.Coordinates.EightWayDistance(sobj.FindSector().Coordinates) + || s.HasAbility("Long Range Scanner - System")); + if (scanners.Any()) + return Visibility.Scanned; + } + return Visibility.Visible; + } + + /// + /// Checks for a specific visibility level of a space object for an empire. + /// If the object has that level of visibility or higher, we return true. + /// + /// + /// This allows us to short circuit the more expensive scanner code. + /// See also parallel code at + /// + /// The space object to check. + /// The empire to check against. + /// The requested visibility level. + /// true if the space object has at least the requested visibility level, otherwise false. + public static bool HasVisibility(this ISpaceObject sobj, Empire emp, Visibility desiredVisibility) + { + bool hasMemory = false; + if (sobj.IsMemory) + { + var mowner = sobj.MemoryOwner(); + if (mowner == emp || mowner == null) + return Visibility.Fogged >= desiredVisibility; + else + return Visibility.Unknown >= desiredVisibility; // can't see other players' memories + } + else + { + var mem = sobj.FindMemory(emp); + if (mem != null) + hasMemory = true; + } + + if (emp == sobj.Owner) + return Visibility.Owned >= desiredVisibility; + + // You can always scan space objects you are in combat with. + // But only their state at the time they were in combat; not for the rest of the turn! + // TODO - what about glassed planets, they have no owner... + if (Galaxy.Current.Battles.Any(b => + (b.Combatants.OfType().Contains(sobj) + || b.StartCombatants.Values.OfType().Contains(sobj) + || b.EndCombatants.Values.OfType().Contains(sobj)) + && b.Combatants.Any(c => c.Owner == emp))) + return Visibility.Scanned >= desiredVisibility; + + // do we have anything that can see it? + var sys = sobj.StarSystem; + if (sys == null) + return Visibility.Unknown >= desiredVisibility; + var seers = sys.FindSpaceObjects(s => s.Owner == emp && !s.IsMemory); + if (!seers.Any() || sobj.IsHiddenFrom(emp)) + { + if (Galaxy.Current.OmniscientView && sobj.StarSystem.ExploredByEmpires.Contains(emp)) + return Visibility.Visible >= desiredVisibility; + if (emp.AllSystemsExploredFromStart) + return Visibility.Fogged >= desiredVisibility; + var known = emp.Memory[sobj.ID]; + if (known != null && sobj.GetType() == known.GetType()) + return Visibility.Fogged >= desiredVisibility; + else if (Galaxy.Current.Battles.Any(b => b.Combatants.Any(c => c.ID == sobj.ID) && b.Combatants.Any(c => c.Owner == emp))) + return Visibility.Fogged >= desiredVisibility; + else if (hasMemory) + return Visibility.Fogged >= desiredVisibility; + else + return Visibility.Unknown >= desiredVisibility; + } + + // short circuit scanner code: we now know that the object is either visible or scanned + // so if we only care if it's visible or less, we can skip the scanner check. + if (Visibility.Visible >= desiredVisibility) + return true; + + if (!sobj.HasAbility("Scanner Jammer")) + { + var scanners = seers.Where(s => + s.HasAbility("Long Range Scanner") && s.GetAbilityValue("Long Range Scanner").ToInt() >= s.Sector.Coordinates.EightWayDistance(sobj.FindSector().Coordinates) + || s.HasAbility("Long Range Scanner - System")); + if (scanners.Any()) + return Visibility.Scanned >= desiredVisibility; + } + + // we know that the requested visibility level is greater than "visible" + // and the object has a scanner jammer + // therefore it can't be scanned, and we already know it's not owned, we checked that up top + // so we can just return false because the requested visibility (scanned or owned) can't be met + return false; + } + } +} diff --git a/FrEee/Utility/Extensions/CommonExtensions.cs b/FrEee/Extensions/CommonExtensions.cs similarity index 96% rename from FrEee/Utility/Extensions/CommonExtensions.cs rename to FrEee/Extensions/CommonExtensions.cs index c25a36fb2..6d50a2d93 100644 --- a/FrEee/Utility/Extensions/CommonExtensions.cs +++ b/FrEee/Extensions/CommonExtensions.cs @@ -1,1954 +1,1956 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; -using System.Runtime.Serialization; -using System.Text; -using System.Threading.Tasks; -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Combat.Grid; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Modding.Interfaces; - -namespace FrEee.Utility.Extensions -{ - public static class CommonExtensions - { - private static SafeDictionary defaultValueCache = new SafeDictionary(); - - private static List mappedTypes = new List(); - - /// - /// Casts an object to a type. Returns null if the type is wrong. - /// - /// - /// - /// - public static T As(this object o, bool throwExceptionIfWrongType = false) - where T : class - { - return o as T; - } - - /// - /// Builds a delegate to wrap a MethodInfo. - /// http://stackoverflow.com/questions/13041674/create-func-or-action-for-any-method-using-reflection-in-c - /// - /// - /// - /// - /// - public static T BuildDelegate(this MethodInfo method, params object[] missingParamValues) - { - var queueMissingParams = new Queue(missingParamValues); - - var dgtMi = typeof(T).GetMethod("Invoke"); - var dgtRet = dgtMi.ReturnType; - var dgtParams = dgtMi.GetParameters(); - - var paramsOfDelegate = dgtParams - .Select(tp => Expression.Parameter(tp.ParameterType, tp.Name)) - .ToArray(); - - var methodParams = method.GetParameters(); - - if (method.IsStatic) - { - var paramsToPass = methodParams - .Select((p, i) => CreateParam(paramsOfDelegate, i, p, queueMissingParams)) - .ToArray(); - - var expr = Expression.Lambda( - Expression.Call(method, paramsToPass), - paramsOfDelegate); - - return expr.Compile(); - } - else - { - var paramThis = Expression.Convert(paramsOfDelegate[0], method.DeclaringType); - - var paramsToPass = methodParams - .Select((p, i) => CreateParam(paramsOfDelegate, i + 1, p, queueMissingParams)) - .ToArray(); - - var expr = Expression.Lambda( - Expression.Call(paramThis, method, paramsToPass), - paramsOfDelegate); - - return expr.Compile(); - } - } - - public static Delegate BuildDelegate(this MethodInfo method, params object[] missingParamValues) - { - var parms = method.GetParameters(); - var parmTypes = parms.Select(p => p.ParameterType).ToArray(); - var delegateType = method.ReturnType == typeof(void) ? MakeActionType(parmTypes) : MakeFuncType(parmTypes, method.ReturnType); - var builder = typeof(CommonExtensions).GetMethods().Single(m => m.Name == "BuildDelegate" && m.GetGenericArguments().Length == 1).MakeGenericMethod(delegateType); - return (Delegate)builder.Invoke(null, new object[] { method, missingParamValues }); - } - - public static Formula BuildMultiConditionalLessThanOrEqual(this IDictionary thresholds, object context, string variableName, TValue defaultValue) - where TValue : IConvertible, IComparable, IComparable - { - var sorted = new SortedDictionary(thresholds); - var formula = "***"; - foreach (var kvp in sorted) - formula = formula.Replace("***", kvp.Value.ToStringInvariant() + " if " + variableName + " <= " + kvp.Key + " else (***)"); - formula = formula.Replace("***", defaultValue.ToStringInvariant()); - return new ComputedFormula(formula, context, true); - } - - /// - /// Consumes supplies if possible. - /// - /// The supplies to consume. - /// true if successful or unnecessary, otherwise false - public static bool BurnSupplies(this IMobileSpaceObject sobj, int supplies) - { - if (sobj.HasInfiniteSupplies) - return true; // no need to burn - else if (sobj.SupplyRemaining < supplies) - return false; // not enough - else - { - sobj.SupplyRemaining -= supplies; - return true; - } - } - - /// - /// Consumes supplies if possible. - /// - /// The component consuming supplies. - /// true if successful or unnecessary, otherwise false - public static bool BurnSupplies(this Component comp) - { - if (comp.Container is IMobileSpaceObject) - return (comp.Container as IMobileSpaceObject).BurnSupplies(comp.Template.SupplyUsage); - else - return true; // other component containers don't use supplies - } - - public static int CargoStorageFree(this ICargoContainer cc) - { - return cc.CargoStorage - (cc.Cargo?.Size ?? 0); - } - - /// - /// Checks a command to make sure it doesn't contain any objects that are not client safe. - /// - /// - public static void CheckForClientSafety(this ICommand cmd) - { - var vals = cmd.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Where(f => !f.GetCustomAttributes(true).OfType().Any() && f.GetGetMethod(true) != null && f.GetSetMethod(true) != null).Select(prop => new { Name = prop.Name, Value = prop.GetValue(cmd, new object[0]) }); - var badVals = vals.Where(val => val.Value != null && !val.Value.GetType().IsClientSafe()); - if (badVals.Any()) - throw new Exception(cmd + " contained a non-client-safe type " + badVals.First().Value.GetType() + " in property " + badVals.First().Name); - } - - public static PictorialLogMessage CreateLogMessage(this T context, string text,LogMessageType logMessageType, int? turnNumber = null) - { - if (turnNumber == null) - return new PictorialLogMessage(text, context, logMessageType); - else - return new PictorialLogMessage(text, turnNumber.Value, context, logMessageType); - } - - public static void DealWithMines(this ISpaceObject sobj) - { - if (sobj is IDamageable && sobj is IOwnable) - { - var owner = sobj.Owner; - var d = (IDamageable)sobj; - var sector = sobj.Sector; - if (sector == null) - return; - - // shuffle up the mines so they hit in a random order - var mines = sector.SpaceObjects.OfType().Concat(sector.SpaceObjects.OfType().SelectMany(f => f.LeafVehicles.OfType())).Where(m => m.IsHostileTo(sobj.Owner)).Shuffle().ToList(); - - // for log messages - var totalDamage = 0; - var minesSwept = new SafeDictionary(); - var minesDetonated = new SafeDictionary(); - var minesAttacking = new SafeDictionary(); - - // can we sweep any? - int sweeping; - if (sobj is Fleet f2) - sweeping = f2.LeafVehicles.Sum(v => v.GetAbilityValue("Mine Sweeping").ToInt()); - else - sweeping = sobj.GetAbilityValue("Mine Sweeping").ToInt(); - - // go through the minefield! - while (mines.Any() && !d.IsDestroyed) - { - var mine = mines.First(); - if (sweeping > 0) - { - // sweep a mine - sweeping--; - minesSwept[mine.Owner]++; - mine.Dispose(); - } - else - { - // bang/boom! - bool detonate = false; - foreach (var weapon in mine.Weapons) - { - var shot = new Shot(mine, weapon, d, 0); - var damage = weapon.Template.GetWeaponDamage(1); - var hit = new Hit(shot, d, damage); - var leftoverDamage = d.TakeDamage(hit); - totalDamage += damage - leftoverDamage; - if (weapon.Template.ComponentTemplate.WeaponInfo.IsWarhead) - detonate = true; // warheads go boom, other weapons don't - } - if (detonate) - { - minesDetonated[mine.Owner]++; - mine.Dispose(); - } - else - minesAttacking[mine.Owner]++; - } - - // each mine can only activate or be swept once - mines.Remove(mine); - } - - if (sobj is Fleet ff) - ff.Validate(); - - - // logging! - if (minesDetonated.Any() || minesSwept.Any() || minesAttacking.Any()) - owner.Log.Add(sobj.CreateLogMessage(sobj + " encountered a mine field at " + sector + " and took " + totalDamage + " points of damage, sweeping " + minesSwept.Sum(kvp => kvp.Value) + " mines.", LogMessageType.Generic)); - foreach (var emp in minesSwept.Keys.Union(minesDetonated.Keys).Union(minesAttacking.Keys)) - emp.Log.Add(sobj.CreateLogMessage(sobj + " encountered our mine field at " + sector + ". " + minesDetonated[emp] + " of our mines detonated, " + minesAttacking[emp] + " others fired weapons, and " + minesSwept[emp] + " were swept. " + sector.SpaceObjects.OfType().Where(m => m.Owner == emp).Count() + " mines remain in the sector.", LogMessageType.Generic)); - } - } - - /// - /// Returns a custom value if the specified value is null or the wrong type. - /// Otherwise returns the value itself. - /// - /// - /// - /// - /// - public static T Default(this object value, T def = default(T), bool throwIfWrongType = false) - { - if (throwIfWrongType && !(value is T)) - throw new InvalidCastException($"Cannot convert {value} to type {typeof(T)}."); - return value == null || !(value is T) ? def : (T)value; - } - - /// - /// Returns a custom value if the specified value is equal to the default value for its type. - /// Otherwise returns the value itself. - /// - /// - /// - /// - /// - public static T DefaultTo(this T value, T def) - { - return value.Equals(default(T)) ? def : value; - } - - /// - /// Programmatic equivalent of the default operator. - /// - /// - /// - public static object DefaultValue(this Type t) - { - if (defaultValueCache[t] == null) - defaultValueCache[t] = typeof(CommonExtensions).GetMethod("GetDefaultGeneric", BindingFlags.NonPublic | BindingFlags.Static).MakeGenericMethod(t).Invoke(null, null); - return defaultValueCache[t]; - } - - /// - /// Disposes of all objects in an enumerated list that meet a specified condition (or all items if condition is null). - /// Does not clear the list; if the list is a collection, you can do this yourself. - /// - /// - /// - /// - public static void DisposeAll(this IEnumerable list, Func condition = null) where T : IDisposable - { - foreach (var d in list.Where(d => condition == null || condition(d)).ToArray()) - d.Dispose(); - } - - public static void DisposeAndLog(this IFoggable obj, string message = null, params Empire[] empiresToSkipMessage) - { - if (Empire.Current == null) - { - foreach (var emp in Galaxy.Current.Empires) - { - if (obj.CheckVisibility(emp) >= Visibility.Visible) - { - if (message != null && !empiresToSkipMessage.Contains(emp)) - emp.RecordLog(obj, message, LogMessageType.Generic); - } - } - } - obj.Dispose(); - } - - /// - /// Copies an image and draws planet population bars on it. - /// - /// The image. - /// The planet whose population bars should be drawn. - /// The copied image with the population bars. - public static Image DrawPopulationBars(this Image image, Planet planet) - { - var img2 = (Image)image.Clone(); - planet.DrawPopulationBars(img2); - return img2; - } - - /// - /// Computes the distance between two points along a grid with eight-way movement. - /// - /// - /// - /// - public static int EightWayDistance(this Point p, Point target) - { - var dx = Math.Abs(target.X - p.X); - var dy = Math.Abs(target.Y - p.Y); - return Math.Max(dx, dy); - } - - public static bool ExecuteMobileSpaceObjectOrders(this T o) - where T : IMobileSpaceObject - { - bool didStuff = false; - - if (o.AreOrdersOnHold) - return didStuff; - - if (o is Fleet f && !f.Vehicles.ExceptSingle(null).Any()) - o.Dispose(); - var runOrders = new List(); - while (!o.IsDisposed && !o.IsDestroyed && o.Orders.Any() && (o.TimeToNextMove <= 1e-15 || !o.Orders.First().ConsumesMovement)) - { - var order = o.Orders.First(); - order.Execute(o); - runOrders.Add(order); - if (order.IsComplete && o.Orders.Contains(order)) - { - o.RemoveOrder(o.Orders.First()); - if (o.AreRepeatOrdersEnabled) - { - order.IsComplete = false; - o.AddOrder(order); - if (runOrders.Count == o.Orders.Count()) - break; // don't get in an infinite loop of repeating orders - } - } - didStuff = true; - } - if (Galaxy.Current.NextTickSize == double.PositiveInfinity) - o.TimeToNextMove = 0; - else - o.TimeToNextMove -= Galaxy.Current.NextTickSize; - return didStuff; - } - - /// - /// Finds the last sector in a space object's path, or if it has no movement-type orders, its current sector. - /// - /// - /// - public static Sector FinalSector(this T sobj) - where T : IMobileSpaceObject - { - var path = sobj.Path(); - if (path == null || !path.Any()) - return sobj.Sector; - return path.Last(); - } - - /// - /// Finds the cargo container which contains this unit. - /// - /// - public static ICargoContainer FindContainer(this IUnit unit) - { - var containers = Galaxy.Current.FindSpaceObjects().Where(cc => !(cc is Fleet) && cc.Cargo != null && cc.Cargo.Units.Contains(unit)); - if (!containers.Any()) - { - if (unit is IMobileSpaceObject) - { - var v = (IMobileSpaceObject)unit; - return v.Sector; - } - else - return null; // unit is in limbo... - } - if (containers.Count() > 1) - throw new Exception("Unit is in multiple cargo containers?!"); - return containers.Single(); - } - - /// - /// Finds the coordinates of a space object within its star system. - /// - /// - /// - public static Point FindCoordinates(this ISpaceObject sobj) - { - return sobj.FindStarSystem().FindCoordinates(sobj); - } - - public static T FindMemory(this T f, Empire emp) where T : IFoggable, IReferrable - { - if (f == null) - return default(T); - if (emp == null) - return f; // host can see everything - return (T)emp.Memory[f.ID]; - } - - /// - /// Finds the original object of a memory, if it is known. - /// - /// - /// - /// - public static IFoggable FindOriginalObject(this IFoggable f, Empire emp) - { - // not a memory? it is its own real object - if (!(f.IsMemory)) - return f; - - // look for the real object - if (emp.Memory.Any(kvp => kvp.Value == f)) - return (IFoggable)Galaxy.Current.referrables[emp.Memory.Single(kvp => kvp.Value == f).Key]; - - // nothing found? - return null; - } - - /// - /// Finds a property on a type, base type, or interface. - /// - /// - /// - /// - public static PropertyInfo FindProperty(this Type type, string propName) - { - var p = type.GetProperty(propName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - if (p != null) - return p.DeclaringType.GetProperty(propName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - var b = type.BaseType; - if (b != null) - { - var bp = b.FindProperty(propName); - if (bp != null) - return bp.DeclaringType.GetProperty(propName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - } - foreach (var i in type.GetInterfaces()) - { - var ip = i.FindProperty(propName); - if (ip != null) - return ip.DeclaringType.GetProperty(propName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); - } - return null; - } - - /// - /// Finds the sector containing a space object. - /// - /// - /// - public static Sector FindSector(this ISpaceObject sobj) - { - var sys = sobj.FindStarSystem(); - if (sys == null) - return null; - // TODO - this might be kind of slow; might want a reverse memory lookup - return new Sector(sys, sys.SpaceObjectLocations.Single(l => l.Item == sobj).Location); - } - - /// - /// Finds the star system containing a space object. - /// - /// - /// - public static StarSystem FindStarSystem(this ISpaceObject sobj) - { - var loc = Galaxy.Current.StarSystemLocations.SingleOrDefault(l => l.Item.Contains(sobj)); - /*if (loc == null) - { - // search memories too - // TODO - this might be kind of slow; might want a reverse memory lookup - loc = Galaxy.Current.StarSystemLocations.SingleOrDefault(l => l.Item.FindSpaceObjects().Any(s => Galaxy.Current.Empires.ExceptSingle(null).Any(e => e.Memory[s.ID] == sobj))); - }*/ - if (loc == null) - return null; - return loc.Item; - } - - /// - /// Gets points both on the border and in the interior of a rectangle. - /// - /// - /// - public static IEnumerable GetAllPoints(this Rectangle r) - { - for (var x = r.Left; x <= r.Right; x++) - { - for (var y = r.Top; y <= r.Bottom; y++) - yield return new Point(x, y); - } - } - - /// - /// Gets the points on the border of a rectangle. - /// - /// - /// - public static IEnumerable GetBorderPoints(this Rectangle r) - { - for (var x = r.Left; x <= r.Right; x++) - { - if (x == r.Left || x == r.Right) - { - // get left and right sides - for (var y = r.Top; y <= r.Bottom; y++) - yield return new Point(x, y); - } - else - { - // just get top and bottom - yield return new Point(x, r.Top); - if (r.Top != r.Bottom) - yield return new Point(x, r.Bottom); - } - } - } - - /// - /// Gets the canonical name for a property, class, etc. - /// This is taken from the [CanonicalName] attribute if present, otherwise the name of the item itself. - /// - /// - /// - public static string GetCanonicalName(this MemberInfo m) - { - // TODO - use most derived class's attribute? - var name = m.GetAttributes().Select(a => a.Name).SingleOrDefault(); - if (name == null) - return m.Name; - return name; - } - - /// - /// Gets a property value from an object using reflection. - /// If the property does not exist or the property value is not IComparable, returns an empty string. - /// - /// - /// - /// - public static IComparable GetComparablePropertyValue(this object o, string propertyName) - { - var pval = GetPropertyValue(o, propertyName); - if (pval == null || !(pval is IComparable)) - return ""; - return (IComparable)pval; - } - - public static SafeDictionary GetData(this object o, ObjectGraphContext context) - { - // serialize object type and field count - if (o is IDataObject) - { - // use data object code! :D - var dobj = (IDataObject)o; - return dobj.Data; - } - else if (o != null) - { - // use reflection :( - var dict = new SafeDictionary(); - var props = ObjectGraphContext.GetKnownProperties(o.GetType()).Values.Where(p => !p.GetValue(o, null).SafeEquals(p.PropertyType.DefaultValue())); - foreach (var p in props) - dict[p.Name] = p.GetValue(o); - return dict; - } - else - return new SafeDictionary(); - } - - /// - /// Gets points in the interior of a rectangle. - /// - /// - /// - public static IEnumerable GetInteriorPoints(this Rectangle r) - { - for (var x = r.Left + 1; x < r.Right; x++) - { - for (var y = r.Top + 1; y < r.Bottom; y++) - yield return new Point(x, y); - } - } - - /// - /// Gets all names for a property, class, etc. including custom names and the actual item name. - /// - /// - /// - public static IEnumerable GetNames(this MemberInfo m) - { - return m.GetAttributes().Select(a => a.Name).UnionSingle(m.Name); - } - - /// - /// Gets a property value from an object using reflection. - /// If the property does not exist, returns null. - /// - /// - /// - /// - public static object GetPropertyValue(this object o, string propertyName) - { - if (o == null) - return null; - var prop = o.GetType().GetProperty(propertyName); - if (prop == null) - return null; - return prop.GetValue(o, new object[0]); - } - - /// - /// Returns an object's hash code, or 0 for null. - /// - /// - public static int GetSafeHashCode(this object o) - { - return o == null ? 0 : o.GetHashCode(); - } - - public static Type GetVehicleType(this VehicleTypes vt) - { - switch (vt) - { - case VehicleTypes.Ship: - return typeof(Ship); - - case VehicleTypes.Base: - return typeof(Base); - - case VehicleTypes.Fighter: - return typeof(Fighter); - - case VehicleTypes.Troop: - return typeof(Troop); - - case VehicleTypes.Mine: - return typeof(Mine); - - case VehicleTypes.Satellite: - return typeof(Satellite); - - case VehicleTypes.Drone: - return typeof(Drone); - - case VehicleTypes.WeaponPlatform: - return typeof(WeaponPlatform); - - default: - throw new Exception("No type is available for vehicle type " + vt); - } - } - - /// - /// All income provided by an object. - /// - /// - /// - public static ResourceQuantity GrossIncome(this IIncomeProducer o) - { - return o.StandardIncome() + o.RemoteMiningIncome() + o.RawResourceIncome(); - } - - public static object Instantiate(this Type type, params object[] args) - { - if (type.Name == "Battle") - return typeof(SpaceBattle).Instantiate(); // HACK - old savegame compatibility - if (type.GetConstructors().Where(c => c.GetParameters().Length == (args == null ? 0 : args.Length)).Any()) - return Activator.CreateInstance(type, args); - else - return FormatterServices.GetSafeUninitializedObject(type); - } - - public static T Instantiate(params object[] args) - { - return (T)typeof(T).Instantiate(args); - } - - public static bool IsUnlocked(this IUnlockable u) - { - return u.UnlockRequirements.All(r => r.IsMetBy(Empire.Current)); - } - - /// - /// Limits a value to a range. - /// Throws an exception if min is bigger than max. - /// - /// - /// - /// - /// - public static int LimitToRange(this int value, int min, int max) - { - if (min > max) - throw new ArgumentOutOfRangeException("Min is {0} and can't be larger than max which is {1}!".F(min, max)); - if (value > max) - value = max; - if (value < min) - value = min; - return value; - } - - /// - /// Limits a value to a range. - /// Throws an exception if min is bigger than max. - /// - /// - /// - /// - /// - public static double LimitToRange(this double value, double min, double max) - { - if (min > max) - throw new ArgumentOutOfRangeException("Min is {0} and can't be larger than max which is {1}!".F(min, max)); - if (value > max) - value = max; - if (value < min) - value = min; - return value; - } - - /// - /// Logs an exception in fatalerrorlog.txt. Overwrites the old fatalerrorlog.txt. - /// - /// - public static void LogFatal(this Exception ex) - { - var sw = new StreamWriter("fatalerrorlog.txt"); - sw.WriteLine(ex.GetType().Name + " occurred at " + DateTime.Now + ":"); - sw.WriteLine(ex.ToString()); - sw.Close(); - } - - /// - /// Appends the exception to the end of errorlog.txt. - /// - /// - public static void Log(this Exception ex) - { - var sw = new StreamWriter("errorlog.txt", true); - sw.WriteLine(ex.GetType().Name + " occurred at " + DateTime.Now + ":"); - sw.WriteLine(ex.ToString()); - sw.WriteLine(); - sw.Close(); - } - - /// - /// Logs an error in the AI of the given empire to disk. - /// - /// - /// - public static void LogAIMessage(this Empire empire, string message) - { - var sw = new StreamWriter($"{empire.AI.Name}.log", true); - sw.WriteLine($"{DateTime.UtcNow} ({Galaxy.Current.Name}-{empire.ID}):{message}"); - sw.Close(); - } - - - public static Type MakeActionType(this IEnumerable parmTypes) - { - if (parmTypes.Count() == 0) - return typeof(Action); - if (parmTypes.Count() == 1) - return typeof(Action<>).MakeGenericType(parmTypes.ToArray()); - if (parmTypes.Count() == 2) - return typeof(Action<,>).MakeGenericType(parmTypes.ToArray()); - if (parmTypes.Count() == 3) - return typeof(Action<,,>).MakeGenericType(parmTypes.ToArray()); - if (parmTypes.Count() == 4) - return typeof(Action<,,,>).MakeGenericType(parmTypes.ToArray()); - if (parmTypes.Count() == 5) - return typeof(Action<,,,,>).MakeGenericType(parmTypes.ToArray()); - if (parmTypes.Count() == 6) - return typeof(Action<,,,,,>).MakeGenericType(parmTypes.ToArray()); - // TODO - more parms - throw new Exception("MakeActionType currently supports only 0-6 parameters."); - } - - public static Type MakeFuncType(this IEnumerable parmTypes, Type returnType) - { - var types = parmTypes.Concat(returnType.SingleItem()); - if (parmTypes.Count() == 0) - return typeof(Func<>).MakeGenericType(types.ToArray()); - if (parmTypes.Count() == 1) - return typeof(Func<,>).MakeGenericType(types.ToArray()); - if (parmTypes.Count() == 2) - return typeof(Func<,,>).MakeGenericType(types.ToArray()); - if (parmTypes.Count() == 3) - return typeof(Func<,,,>).MakeGenericType(types.ToArray()); - if (parmTypes.Count() == 4) - return typeof(Func<,,,,>).MakeGenericType(types.ToArray()); - if (parmTypes.Count() == 5) - return typeof(Func<,,,,,>).MakeGenericType(types.ToArray()); - if (parmTypes.Count() == 6) - return typeof(Func<,,,,,,>).MakeGenericType(types.ToArray()); - // TODO - more parms - throw new Exception("MakeFuncType currently supports only -16 parameters."); - } - - /// - /// Computes the Manhattan (4-way grid) distance between two points. - /// - /// - /// - /// - public static int ManhattanDistance(this Point p, Point target) - { - return Math.Abs(target.X - p.X) + Math.Abs(target.Y - p.Y); - } - - /// - /// Who does a memory belong to? - /// - /// The memory. - /// Empire to which the memory belongs (null if not memory). - public static Empire MemoryOwner(this IFoggable f) - { - if (!f.IsMemory) - return null; - return Galaxy.Current.Empires.ExceptSingle(null).SingleOrDefault(x => x.Memory.Values.Contains(f)); - } - - public static ILookup MyLookup(this IEnumerable> dict) - where TEnumerable : IEnumerable - { - var list = new List>(); - foreach (var kvp in dict) - { - foreach (var item in kvp.Value) - list.Add(new KeyValuePair(kvp.Key, item)); - } - return list.ToLookup(kvp => kvp.Key, kvp => kvp.Value); - } - - /// - /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. - /// - public static string NameFor(this IBattle b, Empire emp) - { - return b.ResultFor(emp).Capitalize() + " at " + b.Sector; - } - - /// - /// Makes sure there aren't more supplies than we can store, or fewer than zero - /// - /// Leftover supplies (or a negative number if somehow we got negative supplies in this vehicle) - public static int NormalizeSupplies(this IMobileSpaceObject sobj) - { - if (sobj.SupplyRemaining > sobj.SupplyStorage) - { - var leftover = sobj.SupplyRemaining - sobj.SupplyStorage; - sobj.SupplyRemaining = sobj.SupplyStorage; - return leftover; - } - if (sobj.SupplyRemaining < 0) - { - var deficit = sobj.SupplyRemaining; - sobj.SupplyRemaining = 0; - return deficit; - } - return 0; - } - - /// - /// Parses a string using the type's static Parse method. - /// - /// - /// - /// - public static T Parse(this string s) - { - var parser = typeof(T).GetMethod("Parse", BindingFlags.Static); - var expr = Expression.Call(parser); - return (T)expr.Method.Invoke(null, new object[] { s }); - } - - /// - /// Computes the path that this space object is ordered to follow. - /// - /// - /// - /// - public static IEnumerable Path(this IMobileSpaceObject sobj) - { - // TODO - cache paths and only recalculate them when the orders change - var last = sobj.Sector; - foreach (var order in sobj.Orders) - { - if (order is IMovementOrder) - { - var o = (IMovementOrder)order; - foreach (var s in o.Pathfind(sobj, last)) - yield return s; - last = o.Destination; - } - } - } - - public static void Place(this IUnit unit, ISpaceObject target) - { - if (target is ICargoContainer) - { - var container = (ICargoContainer)target; - var cargo = container.Cargo; - if (cargo.Size + unit.Design.Hull.Size <= container.CargoStorage) - { - cargo.Units.Add(unit); - return; - } - } - foreach (var container in target.Sector.SpaceObjects.OfType().Where(cc => cc.Owner == unit.Owner)) - { - var cargo = container.Cargo; - if (cargo.Size + unit.Design.Hull.Size <= container.CargoStorage) - { - cargo.Units.Add(unit); - return; - } - } - unit.Owner.Log.Add(unit.CreateLogMessage(unit + " was lost due to insufficient cargo space at " + target + ".", LogMessageType.Warning)); - } - - /// - /// Raises an event, but doesn't do anything if the event handler is null. - /// - /// - /// - /// - public static void Raise(this EventHandler evt, object sender, TArgs e) where TArgs : EventArgs - { - if (evt != null) - evt(sender, e); - } - - /// - /// Raw resource income which is not affected by any modifiers. - /// - /// - /// - public static ResourceQuantity RawResourceIncome(this IIncomeProducer o) - { - var rawResourceIncome = new ResourceQuantity(); - foreach (var resource in Resource.All) - { - var rule = Mod.Current.AbilityRules.SingleOrDefault(r => r.Matches("Generate Points " + resource)); - if (rule != null) - { - var amount = o.GetAbilityValue(rule.Name).ToInt(); - rawResourceIncome += resource * amount; - } - } - return rawResourceIncome; - } - - /// - /// Reads characters until the specified character is found or end of stream. - /// Returns all characters read except the specified character. - /// - /// - /// - /// - public static string ReadTo(this TextReader r, char c, StringBuilder log) - { - var sb = new StringBuilder(); - int data = 0; - bool escaping = false; - do - { - data = r.Read(); - if (data <= 0) - break; // end of stream - else if (escaping) - { - // in an escape sequence - sb.Append((char)data); - if (log != null) - log.Append((char)data); - escaping = false; - } - /*else if (quoting) - { - // in quotes - sb.Append((char)data); - if (log != null) - log.Append((char)data); - if (data == '"') - quoting = false; - }*/ - else if (data == c) - break; // found match - else if (data == '\\') - escaping = true; // begin escape sequence - /*else if (data == '"') - { - sb.Append((char)data); - quoting = true; // begin quoted string - }*/ - else - { - // regular data - sb.Append((char)data); - if (log != null) - log.Append((char)data); - } - } while (true); - if (data == c && log != null) - log.Append(c); - return sb.ToString(); - } - - /// - /// Reads characters until the specified character is found at the end of the line or end of stream. - /// Returns all characters read except the specified character. - /// - /// - /// - /// - public static string ReadToEndOfLine(this TextReader r, char c, StringBuilder log) - { - var sb = new StringBuilder(); - string data = ""; - do - { - data = r.ReadLine(); - log?.Append(data); - sb.Append(data); - if (data.EndsWith(c.ToString())) - break; - } while (true); - return sb.ToString().Substring(0, Math.Max(0, sb.Length - 1)); // trim off the semicolon - } - - /// - /// Generates new IDs for this object (unless skipRoot is true) and all subordinate objects. - /// TODO - take into account DoNotAssignIDAttribute - /// - /// - public static void ReassignAllIDs(this IReferrable obj, bool skipRoot = false) - { - var parser = new ObjectGraphParser(); - var canCopy = new System.Collections.Generic.Stack(); // stack of bools indicating which objects in the current hierarchy path we can copy - canCopy.Push(true); - parser.Property += (pname, o, val) => - { - var prop = o.GetType().FindProperty(pname); - var shouldRecurse = !prop.CanCopyFully(); - if (shouldRecurse) - canCopy.Push(shouldRecurse); - return shouldRecurse; - }; - parser.Item += (o) => - { - // can always serialize collection items - canCopy.Push(true); - }; - parser.StartObject += (o) => - { - var doit = canCopy.All(b => b) && (!skipRoot || o != obj); - if (doit && o is IReferrable) - { - var r = (IReferrable)o; - r.ReassignID(); - } - }; - parser.EndObject += (o) => - { - canCopy.Pop(); - }; - parser.Null += (o) => - { - canCopy.Pop(); - }; - parser.KnownObject += (o) => - { - canCopy.Pop(); - }; - parser.Parse(obj); - } - - /// - /// Reassigns the ID of an object, overwriting any existing ID. - /// - /// - public static void ReassignID(this IReferrable r) - { - r.ID = 0; - Galaxy.Current.AssignID(r); - } - - public static TRef Refer(this T t) where TRef : IReference - { - return (TRef)typeof(TRef).Instantiate(t); - } - - public static GalaxyReference ReferViaGalaxy(this T t) - where T : IReferrable - { - if (t == null) - return null; - return new GalaxyReference(t); - } - - public static ModReference ReferViaMod(this T t) where T : IModObject - { - if (t == null) - return null; - return new ModReference(t); - } - - /// - /// Refills the space object's movement points. - /// - public static void RefillMovement(this IMobileSpaceObject sobj) - { - sobj.MovementRemaining = sobj.StrategicSpeed; - sobj.TimeToNextMove = sobj.TimePerMove; - } - - public static void RefreshDijkstraMap(this IMobileSpaceObject sobj) - { - // create new map if necessary - if (sobj.DijkstraMap == null) - sobj.DijkstraMap = new Dictionary, ISet>>(); - - // prune old nodes - var start = sobj.Sector; - foreach (var n in sobj.DijkstraMap.Keys.OrderBy(n => n.Cost).ToArray()) - { - if ((n.PreviousNode == null || !sobj.DijkstraMap.ContainsKey(n.PreviousNode)) && n.Location != start) - { - // already went here or it was an aborted path - // delete the node (and this will mark for deletion all its children that we're not at) - sobj.DijkstraMap.Remove(n); - if (n.Location == start) - { - foreach (var n2 in sobj.DijkstraMap.Keys) - n2.Cost -= 1; - } - } - } - - // add new nodes - int minCost = 0; - foreach (var order in sobj.Orders) - { - var last = start; - if (order is IMovementOrder) - { - var o = (IMovementOrder)order; - foreach (var kvp in o.CreateDijkstraMap(sobj, last)) - { - kvp.Key.Cost += minCost; - sobj.DijkstraMap.Add(kvp); - } - // account for cost of previous orders - minCost = sobj.DijkstraMap.Keys.MaxOrDefault(n => n.MinimumCostRemaining); - last = o.Destination; - } - } - } - - /// - /// Income produced by this object's remote mining abilities. - /// Modified by racial aptitudes. - /// Not affected by lack of spaceports. - /// - /// - /// - public static ResourceQuantity RemoteMiningIncome(this IIncomeProducer o) - { - return o.Owner.RemoteMiners.Where(m => m.Key.Item1 == o).Sum(m => m.Value); - } - - /// - /// Removes an order from some object. - /// If the order was just added by the player this turn, simply deletes it. - /// If not, also creates a RemoveOrderCommand to remove it on the server, and adds that command to the empire's commands. - /// Intended only for client side use. - /// - /// The type of orderable object. - /// The object from which to remove an order. - /// The order to remove. - /// The remove-order command created, if any. - public static RemoveOrderCommand RemoveOrderClientSide(this IOrderable obj, IOrder order) - { - if (Empire.Current == null) - throw new InvalidOperationException("RemoveOrderClientSide is intended for client side use."); - var addCmd = Empire.Current.Commands.OfType().SingleOrDefault(c => c.Order == order); - if (addCmd == null) - { - // not a newly added order, so create a remove command to take it off the server - var remCmd = new RemoveOrderCommand(obj, order); - Empire.Current.Commands.Add(remCmd); - obj.RemoveOrder(order); - return remCmd; - } - else - { - // a newly added order, so just get rid of the add command - Empire.Current.Commands.Remove(addCmd); - obj.RemoveOrder(order); - return null; - } - } - - /// - /// Resizes an image. The image should be square. - /// - /// - /// - /// - public static Image Resize(this Image image, int size) - { - if (image == null) - return null; - if (size == 0) - return null; - var result = new Bitmap(size, size, PixelFormat.Format32bppArgb); - var g = Graphics.FromImage(result); - g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; - g.DrawImage(image, 0, 0, size, size); - return result; - } - - /// - /// The result (victory/defeat/stalemate) for a given empire. - /// If empire or its allies are not involved or no empire specified, just say "battle". - /// - /// - /// - public static string ResultFor(this IBattle b, Empire emp) - { - if (emp == null) - return "battle"; // no empire specified - if (!b.Empires.Contains(emp) && !b.Empires.Any(e => e.IsAllyOf(emp, b.StarSystem))) - return "battle"; // empire/allies not involved - var survivors = b.Combatants.Where(c => c.IsAlive); - var ourSurvivors = survivors.Where(c => c.Owner == emp); - var allySurvivors = survivors.Where(c => c.Owner.IsAllyOf(emp, b.StarSystem)); - var friendlySurvivors = ourSurvivors.Concat(allySurvivors); - var enemySurvivors = survivors.Where(c => c.Owner.IsEnemyOf(emp, b.StarSystem)); - if (friendlySurvivors.Any() && enemySurvivors.Any()) - return "stalemate"; - if (friendlySurvivors.Any()) - return "victory"; - if (enemySurvivors.Any()) - return "defeat"; - return "Pyrrhic victory"; // mutual annihilation! - } - - public static IEnumerable RunTasks(this IEnumerable> ops) - { - return ops.SpawnTasksAsync().Result; - } - - public static IEnumerable RunTasks(this IEnumerable objs, Func op) - { - return objs.SpawnTasksAsync(op).Result; - } - - public static void SafeDispose(this IDisposable d) - { - if (d != null) - d.Dispose(); - } - - /// - /// Equals method that doesn't throw an exception when objects are null. - /// Null is not equal to anything else, except other nulls. - /// - /// - /// - /// - public static bool SafeEquals(this object o1, object o2) - { - if (o1 == null && o2 == null) - return true; - if (o1 == null || o2 == null) - return false; - return o1.Equals(o2); - } - - public static bool SafeSequenceEqual(this IEnumerable e1, IEnumerable e2) - { - if (e1.SafeEquals(null) && e2.SafeEquals(null)) - return true; - if (e1.SafeEquals(null) || e2.SafeEquals(null)) - return false; - return e1.SequenceEqual(e2); - } - - public static void SetData(this object o, SafeDictionary dict, ObjectGraphContext context) - { - if (context == null) - context = new ObjectGraphContext(); - if (o is IDataObject) - { - // use data object code! :D - var dobj = (IDataObject)o; - dobj.Data = dict; - } - else if (o != null) - { - // use reflection :( - foreach (var kvp in dict) - { - var pname = kvp.Key; - var val = kvp.Value; - var prop = ObjectGraphContext.GetKnownProperties(o.GetType())[pname]; - if (prop != null) - { - try - { - context.SetObjectProperty(o, prop, val); - } - catch (NullReferenceException) - { - if (o == null && prop == null) - Console.Error.WriteLine($"Attempted to set unknown property {pname} on a null object."); - else if (o == null) - Console.Error.WriteLine($"Attempted to set property {pname} on a null object."); - else if (prop == null) - Console.Error.WriteLine($"Attempted to set unknown property {pname} on {o}."); - else - throw; - } - catch (InvalidCastException) - { - Console.Error.WriteLine($"Could not set property {pname} of object {o} of type {o.GetType()} to value {val} of type {val.GetType()}."); - throw; - } - } - else - Console.Error.WriteLine($"Found unknown property {pname} in serialized data for object type {o.GetType()}."); - } - } - else - throw new NullReferenceException("Can't set data on a null object."); - } - - /// - /// Sets a property value on an object using reflection. - /// - /// - /// - /// - public static void SetPropertyValue(this object o, string propertyName, object value) - { - o.GetType().GetProperty(propertyName).SetValue(o, value, new object[0]); - } - - /// - /// Spawns multiple tasks to return an enumeration of items. - /// - /// - /// - /// - /// - public static async Task> SpawnTasksAsync(this IEnumerable> ops) - { - // Enumerate the tasks we need to do and start them - var tasks = ops.Select(op => Task.Factory.StartNew(op)); - - // Wait for them to complete - return await Task.WhenAll(tasks); - } - - /// - /// Spawns multiple tasks to return an enumeration of items. - /// - /// - /// - /// - /// - public static async Task> SpawnTasksAsync(this IEnumerable objs, Func op) - { - return await objs.Select(obj => new Func(() => op(obj))).SpawnTasksAsync(); - } - - /// - /// Spawns multiple tasks to perform a bunch of actions. - /// - /// - /// - /// - /// - public static async Task SpawnTasksAsync(this IEnumerable ops) - { - // Enumerate the tasks we need to do and start them - var tasks = ops.Select(op => Task.Factory.StartNew(op)); - - // Wait for them to complete - await Task.WhenAll(tasks); - } - - /// - /// Spawns multiple tasks to perform a bunch of actions. - /// - /// - /// - /// - /// - public static async Task SpawnTasksAsync(this IEnumerable objs, Action op) - { - await objs.Select(obj => new Action(() => op(obj))).SpawnTasksAsync(); - } - - /// - /// Standard income provided by mining, research, and intelligence. - /// Affected by racial aptitudes, happiness, planet value, lack of spaceport, that sort of thing. - /// - /// - /// - public static ResourceQuantity StandardIncome(this IIncomeProducer o) - { - var income = new ResourceQuantity(); - var ratio = 1.0; - if (!o.StarSystem.HasAbility(o.Owner, "Spaceport")) - ratio = o.MerchantsRatio; - var prefix = "Resource Generation - "; - var pcts = o.StandardIncomePercentages; - foreach (var abil in o.Abilities().Where(abil => abil.Rule.Name.StartsWith(prefix))) - { - var resource = Resource.Find(abil.Rule.Name.Substring(prefix.Length)); - var amount = abil.Value1.ToInt(); - - if (resource.HasValue) - amount = Galaxy.Current.StandardMiningModel.GetRate(amount, o.ResourceValue[resource], pcts[resource] / 100d); - - income.Add(resource, amount); - } - prefix = "Point Generation - "; - foreach (var abil in o.Abilities().Where(abil => abil.Rule.Name.StartsWith(prefix))) - { - var resource = Resource.Find(abil.Rule.Name.Substring(prefix.Length)); - var amount = abil.Value1.ToInt() * pcts[resource] / 100; - - income.Add(resource, amount); - } - - return income * ratio; - } - - /// - /// Finds all subfleets (recursively, including this fleet) that have any child space objects that are not fleets. - /// - /// - /// - public static IEnumerable SubfleetsWithNonFleetChildren(this Fleet rootFleet) - { - if (rootFleet.Vehicles.Any(sobj => !(sobj is Fleet))) - yield return rootFleet; - foreach (var subfleet in rootFleet.Vehicles.OfType()) - { - foreach (var subsub in subfleet.SubfleetsWithNonFleetChildren()) - yield return subsub; - } - } - - /// - /// Inflicts damage on an object. - /// - /// Leftover damage. - public static int TakeDamage(this IDamageable d, DamageType dt, int damage, PRNG dice = null) - { - return d.TakeDamage(new Hit(dt, damage, d), dice); - } - - /// - /// Inflicts damage on an object. - /// - /// Leftover damage. - public static int TakeDamage(this IDamageable d, string damageTypeName, int damage, PRNG dice = null) - { - return d.TakeDamage(Mod.Current.DamageTypes.FindByName(damageTypeName), damage, dice); - } - - /// - /// Inflicts normal damage on an object out of the blue. - /// - /// The object which should take damage. - /// The amount of normal damage to inflict. - /// Leftover damage. - public static int TakeNormalDamage(this IDamageable d, int dmg, PRNG dice = null) - { - return d.TakeDamage("Normal", dmg, dice); - } - - public static int TakeShieldDamage(this IDamageable d, Hit hit, int damage, PRNG dice = null) - { - // TODO - make sure we have components that are not immune to the damage type so we don't get stuck in an infinite loop - int shieldDmg = 0; - var dt = hit.Shot?.DamageType ?? DamageType.Normal; - int normalShieldPiercing = dt.NormalShieldPiercing.Evaluate(hit); - int phasedShieldPiercing = dt.PhasedShieldPiercing.Evaluate(hit); - double normalSDF = dt.NormalShieldDamage.Evaluate(hit).Percent(); - double phasedSDF = dt.PhasedShieldDamage.Evaluate(hit).Percent(); - - // how much damage pierced the shields? - double piercedShields = 0; - - if (d.NormalShields > 0) - { - var dmg = (int)Math.Min(damage * normalSDF, d.NormalShields); - piercedShields += damage * normalShieldPiercing.Percent(); - d.NormalShields -= dmg; - if (normalSDF != 0) - damage -= (int)Math.Ceiling(dmg / normalSDF); - shieldDmg += dmg; - } - if (d.PhasedShields > 0) - { - var dmg = (int)Math.Min(damage * phasedSDF, d.PhasedShields); - piercedShields += damage * phasedShieldPiercing.Percent(); - d.PhasedShields -= dmg; - if (phasedSDF != 0) - damage -= (int)Math.Ceiling(dmg / phasedSDF); - shieldDmg += dmg; - } - - return damage; - } - - /// - /// Multiplies an integer by a scale factor and rounds it. - /// - /// - /// - /// - public static int TimesAndRound(this int i, double d) - { - return (int)Math.Round(i * d); - } - - /// - /// Transfers items from this cargo container to another cargo container. - /// - public static void TransferCargo(this ICargoContainer src, CargoDelta delta, ICargoContainer dest, Empire emp, bool overrideFreeSpace = false) - { - // if destination is null, we are transferring to/from space - if (dest == null) - dest = src.Sector; - if (src == null) - src = dest.Sector; - - // transfer per-race population - foreach (var kvp in delta.RacePopulation) - { - var amount = long.MaxValue; - - // limit by desired amount to transfer - if (kvp.Value != null) - amount = Math.Min(amount, kvp.Value.Value); - // limit by amount available - amount = Math.Min(amount, src.AllPopulation[kvp.Key]); - if (!overrideFreeSpace) - { - // limit by amount of free space - amount = Math.Min(amount, dest.PopulationStorageFree + (long)((dest.CargoStorage - dest.Cargo.Size) / Mod.Current.Settings.PopulationSize)); - } - - amount -= src.RemovePopulation(kvp.Key, amount); - dest.AddPopulation(kvp.Key, amount); - - if (amount < kvp.Value) - emp.Log.Add(src.CreateLogMessage(src + " could transfer only " + amount.ToUnitString(true) + " of the desired " + kvp.Value.ToUnitString(true) + " " + kvp.Key + " population to " + dest + " due to lack of population available or lack of storage space.", LogMessageType.Warning)); - } - - // transfer any-population - var anyPopLeft = delta.AnyPopulation; - foreach (var kvp in src.AllPopulation.ToArray()) - { - // how much population to transfer for this race? - var amount = long.MaxValue; - - // limit by desired amount to transfer - amount = Math.Min(amount, anyPopLeft); - // limit by amount available - amount = Math.Min(amount, kvp.Value); - // limit by amount of free space - amount = Math.Min(amount, dest.PopulationStorageFree + (long)((dest.CargoStorage - dest.Cargo.Size) / Mod.Current.Settings.PopulationSize)); - - // transfer population from source to destination - amount -= src.RemovePopulation(kvp.Key, amount); - dest.AddPopulation(kvp.Key, amount); - - // log warnings - if (amount < anyPopLeft) - emp.Log.Add(src.CreateLogMessage(src + " could transfer only " + amount.ToUnitString(true) + " of the desired " + kvp.Value.ToUnitString(true) + " general population to " + dest + " due to lack of population available or lack of storage space.", LogMessageType.Warning)); - - // done transferring population - if (amount == 0) - continue; - } - - // transfer all-population - if (delta.AllPopulation) - { - foreach (var kvp in src.AllPopulation.ToArray()) - { - // how much population to transfer for this race? - var amount = long.MaxValue; - - // limit by amount available - amount = Math.Min(amount, kvp.Value); - // limit by amount of free space - amount = Math.Min(amount, dest.PopulationStorageFree + (long)((dest.CargoStorage - dest.Cargo.Size) / Mod.Current.Settings.PopulationSize)); - - // transfer population from source to destination - amount -= src.RemovePopulation(kvp.Key, amount); - amount += dest.AddPopulation(kvp.Key, amount); - - // put any population that didn't fit back on the source - src.AddPopulation(kvp.Key, amount); - - // log warnings - if (amount < anyPopLeft) - emp.Log.Add(src.CreateLogMessage(src + " could transfer only " + amount.ToUnitString(true) + " of the desired " + kvp.Value.ToUnitString(true) + " general population to " + dest + " due to lack of population available or lack of storage space.", LogMessageType.Warning)); - - // no population to transfer - if (amount == 0) - continue; - } - } - - // clear population that was emptied out - foreach (var race in src.Cargo.Population.Where(kvp => kvp.Value <= 0).Select(kvp => kvp.Key).ToArray()) - src.Cargo.Population.Remove(race); - if (src is Planet) - { - var p = (Planet)src; - if (p.Colony != null) - { - foreach (var race in p.Colony.Population.Where(kvp => kvp.Value <= 0).Select(kvp => kvp.Key).ToArray()) - p.Colony.Population.Remove(race); - } - } - - // transfer specific units - foreach (var unit in delta.Units) - { - if (src.Cargo.Units.Contains(unit)) - TryTransferUnit(unit, src, dest, emp); - else - LogUnitTransferFailedNotPresent(unit, src, dest, emp); - } - - // transfer unit tonnage by design - foreach (var kvp in delta.UnitDesignTonnage) - { - int transferred = 0; - while (kvp.Value == null || transferred <= kvp.Value - kvp.Key.Hull.Size) - { - var unit = src.AllUnits.FirstOrDefault(u => u.Design == kvp.Key); - if (unit == null && kvp.Value != null) - { - // if it's not a "transfer all" order, we can log the lack of available units - if (kvp.Value != null) - LogUnitTransferFailed(kvp.Key, src, dest, transferred, kvp.Value.Value, emp); - - break; - } - if (dest.CargoStorageFree() < kvp.Key.Hull.Size) - { - LogUnitTransferFailedNoStorage(unit, src, dest, emp); - break; - } - if (transferred + kvp.Key.Hull.Size > kvp.Value) - break; // next unit would be too much - if (unit != null) - { - src.RemoveUnit(unit); - dest.AddUnit(unit); - transferred += kvp.Key.Hull.Size; - } - else - break; - } - } - - // transfer unit tonnage by role - foreach (var kvp in delta.UnitRoleTonnage) - { - int transferred = 0; - var available = src.AllUnits.Where(u => u.Design.Role == kvp.Key); - while (kvp.Value == null || transferred <= kvp.Value - available.MinOrDefault(u => u.Design.Hull.Size)) - { - if (!available.Any()) - { - // if it's not a "transfer all" order, we can log the lack of available units - if (kvp.Value != null) - LogUnitTransferFailed(kvp.Key, src, dest, transferred, kvp.Value.Value, emp); - - break; - } - var unit = available.FirstOrDefault(u => u.Design.Hull.Size <= dest.CargoStorageFree() && kvp.Value == null || u.Design.Hull.Size <= kvp.Value - transferred); - if (unit != null) - { - src.RemoveUnit(unit); - dest.AddUnit(unit); - available = src.AllUnits.Where(u => u.Design.Role == kvp.Key); - transferred += unit.Design.Hull.Size; - } - else - break; - } - } - - // transfer unit tonnage by hull type - foreach (var kvp in delta.UnitTypeTonnage) - { - int transferred = 0; - var available = src.AllUnits.Where(u => u.Design.VehicleType == kvp.Key); - while (kvp.Value == null || transferred <= kvp.Value - available.MinOrDefault(u => u.Design.Hull.Size)) - { - if (!available.Any()) - { - // if it's not a "transfer all" order, we can log the lack of available units - if (kvp.Value != null) - LogUnitTransferFailed(kvp.Key, src, dest, transferred, kvp.Value.Value, emp); - - break; - } - var unit = available.FirstOrDefault(u => u.Design.Hull.Size <= dest.CargoStorageFree() && kvp.Value == null || u.Design.Hull.Size <= kvp.Value - transferred); - if (unit != null) - { - src.RemoveUnit(unit); - dest.AddUnit(unit); - available = src.AllUnits.Where(u => u.Design.VehicleType == kvp.Key); - transferred += unit.Design.Hull.Size; - } - else - break; - } - } - } - - /// - /// Updates the memory sight cache of any empires that can see this object. - /// Only makes sense on the host view, so if this is called elsewhere, nothing happens. - /// - /// The object whose cache to update. - /// A message to display to any empire that can see this event happen. - /// Empires to which we don't need to send a message. - /// - public static void UpdateEmpireMemories(this T obj, string message = null, params Empire[] empiresToSkipMessage) - where T : IFoggable, IReferrable, IOwnable - { - if (Empire.Current == null) - { - foreach (var emp in Galaxy.Current.Empires) - { - var sys = (obj as ILocated)?.StarSystem; - if (obj.CheckVisibility(emp) >= Visibility.Visible) - { - emp.UpdateMemory(obj); - if (message != null && !empiresToSkipMessage.Contains(emp)) - emp.RecordLog(obj, message, LogMessageType.Generic); - } - } - } - } - - /// - /// Returns "us" if the empire is the current empire, otherwise "the " followed by the empire name. - /// - /// - /// - public static string UsOrName(this Empire emp, bool capitalize = false) - { - if (emp == Empire.Current) - return "us"; - return "the " + emp.Name; - } - - /// - /// Returns "We" if the empire is the current empire, otherwise "The " followed by the empire name. - /// - /// - /// - public static string WeOrName(this Empire emp, bool capitalize = true) - { - if (emp == Empire.Current) - return "We"; - return "The " + emp.Name; - } - - private static Expression CreateParam(ParameterExpression[] paramsOfDelegate, int i, ParameterInfo callParamType, Queue queueMissingParams) - { - if (i < paramsOfDelegate.Length) - return Expression.Convert(paramsOfDelegate[i], callParamType.ParameterType); - - if (queueMissingParams.Count > 0) - return Expression.Constant(queueMissingParams.Dequeue()); - - if (callParamType.ParameterType.IsValueType) - return Expression.Constant(Activator.CreateInstance(callParamType.ParameterType)); - - return Expression.Constant(null); - } - - private static T GetDefaultGeneric() - { - return default(T); - } - - private static void LogUnitTransferFailed(IDesign design, ICargoContainer src, ICargoContainer dest, int actualTonnage, int desiredTonnage, Empire emp) - { - emp.Log.Add(src.CreateLogMessage("Only " + actualTonnage.Kilotons() + " of " + desiredTonnage.Kilotons() + " worth of " + design + " class " + design.VehicleTypeName + "s could be transferred from " + src + " to " + dest + " because there are not enough in " + src + "'s cargo or " + dest + "'s cargo is full.", LogMessageType.Warning)); - } - - private static void LogUnitTransferFailed(string role, ICargoContainer src, ICargoContainer dest, int actualTonnage, int desiredTonnage, Empire emp) - { - emp.Log.Add(src.CreateLogMessage("Only " + actualTonnage.Kilotons() + " of " + desiredTonnage.Kilotons() + " worth of " + role + " units could be transferred from " + src + " to " + dest + " because there are not enough in " + src + "'s cargo or " + dest + "'s cargo is full.", LogMessageType.Warning)); - } - - private static void LogUnitTransferFailed(VehicleTypes vt, ICargoContainer src, ICargoContainer dest, int actualTonnage, int desiredTonnage, Empire emp) - { - emp.Log.Add(src.CreateLogMessage("Only " + actualTonnage.Kilotons() + " of " + desiredTonnage.Kilotons() + " worth of " + vt.ToSpacedString().ToLower() + "s could be transferred from " + src + " to " + dest + " because there are not enough in " + src + "'s cargo or " + dest + "'s cargo is full.", LogMessageType.Warning)); - } - - private static void LogUnitTransferFailedHostile(IUnit unit, ICargoContainer src, ICargoContainer dest, Empire emp) - { - emp.Log.Add(src.CreateLogMessage(unit + " could not be transferred from " + src + " to " + dest + " because " + unit + " is hostile.", LogMessageType.Warning)); - } - - private static void LogUnitTransferFailedNoStorage(IUnit unit, ICargoContainer src, ICargoContainer dest, Empire emp) - { - emp.Log.Add(src.CreateLogMessage(unit + " could not be transferred from " + src + " to " + dest + " because " + dest + "'s cargo is full.", LogMessageType.Warning)); - } - - private static void LogUnitTransferFailedNotPresent(IUnit unit, ICargoContainer src, ICargoContainer dest, Empire emp) - { - emp.Log.Add(src.CreateLogMessage(unit + " could not be transferred from " + src + " to " + dest + " because it is not in " + src + "'s cargo.", LogMessageType.Warning)); - } - - private static void TryTransferUnit(IUnit unit, ICargoContainer src, ICargoContainer dest, Empire emp) - { - if (unit.IsHostileTo(emp)) - LogUnitTransferFailedHostile(unit, src, dest, emp); - if (dest.CargoStorageFree() >= unit.Design.Hull.Size) - { - src.RemoveUnit(unit); - dest.AddUnit(unit); - } - else - LogUnitTransferFailedNoStorage(unit, src, dest, emp); - } - - /*// based on http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/ - private static IMappingExpression IgnoreReadOnlyAndNonSerializableProperties(this IMappingExpression expression) - { - var type = typeof(T); - var existingMaps = Mapper.GetAllTypeMaps().First(x => x.SourceType.IsAssignableFrom(type) - && x.DestinationType.IsAssignableFrom(type)); - foreach (var property in existingMaps.GetPropertyMaps().Where(pm => - { - var prop = (PropertyInfo)pm.DestinationProperty.MemberInfo; - var realprop = prop.DeclaringType.GetProperty(prop.Name); - return realprop.GetSetMethod(true) == null || realprop.GetCustomAttributes(true).OfType().Any(); - })) - expression.ForMember(property.DestinationProperty.Name, opt => opt.Ignore()); - return expression; - } - - private static IMappingExpression IgnoreIDProperty(this IMappingExpression expression) - where T : IReferrable - { - var type = typeof(T); - var existingMaps = Mapper.GetAllTypeMaps().First(x => x.SourceType.Equals(type) - && x.DestinationType.Equals(type)); - foreach (var property in existingMaps.GetPropertyMaps().Where(pm => ((PropertyInfo)pm.DestinationProperty.MemberInfo).Name == "ID")) - expression.ForMember(property.DestinationProperty.Name, opt => opt.Ignore()); - return expression; - }*/ - /*/// - /// XXX don't use this function, it seems to skip some of the tasks - /// - /// The ops. - public static void RunTasks(this IEnumerable ops) - { - // http://stackoverflow.com/a/19193473/1159763 - // for some reason we can't just say ops.SpawnTasksAsync().Wait() as this causes a hang - var runSync = Task.Factory.StartNew(new Func(async () => - { - await ops.SpawnTasksAsync(); - })).Unwrap(); - runSync.Wait(); - } - - /// - /// XXX don't use this function, it seems to skip some of the tasks - /// - /// The type of the in. - /// The objs. - /// The op. - public static void RunTasks(this IEnumerable objs, Action op) - { - // http://stackoverflow.com/a/19193473/1159763 - // for some reason we can't just say objs.SpawnTasksAsync(op).Wait() as this causes a hang - var runSync = Task.Factory.StartNew(new Func(async () => - { - await objs.SpawnTasksAsync(op); - })).Unwrap(); - runSync.Wait(); - }*/ - - public static void RecordLog(this T t, string text, LogMessageType logMessageType) where T : IOwnable - { - t.Owner.RecordLog(t, text, logMessageType); - } - } - - public enum IDCopyBehavior - { - PreserveSource, - PreserveDestination, - Regenerate - } -} +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text; +using System.Threading.Tasks; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Combat.Grid; +using FrEee.Objects.Commands; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Serialization; + +namespace FrEee.Extensions +{ + public static class CommonExtensions + { + private static SafeDictionary defaultValueCache = new SafeDictionary(); + + private static List mappedTypes = new List(); + + /// + /// Casts an object to a type. Returns null if the type is wrong. + /// + /// + /// + /// + public static T As(this object o, bool throwExceptionIfWrongType = false) + where T : class + { + return o as T; + } + + /// + /// Builds a delegate to wrap a MethodInfo. + /// http://stackoverflow.com/questions/13041674/create-func-or-action-for-any-method-using-reflection-in-c + /// + /// + /// + /// + /// + public static T BuildDelegate(this MethodInfo method, params object[] missingParamValues) + { + var queueMissingParams = new Queue(missingParamValues); + + var dgtMi = typeof(T).GetMethod("Invoke"); + var dgtRet = dgtMi.ReturnType; + var dgtParams = dgtMi.GetParameters(); + + var paramsOfDelegate = dgtParams + .Select(tp => Expression.Parameter(tp.ParameterType, tp.Name)) + .ToArray(); + + var methodParams = method.GetParameters(); + + if (method.IsStatic) + { + var paramsToPass = methodParams + .Select((p, i) => CreateParam(paramsOfDelegate, i, p, queueMissingParams)) + .ToArray(); + + var expr = Expression.Lambda( + Expression.Call(method, paramsToPass), + paramsOfDelegate); + + return expr.Compile(); + } + else + { + var paramThis = Expression.Convert(paramsOfDelegate[0], method.DeclaringType); + + var paramsToPass = methodParams + .Select((p, i) => CreateParam(paramsOfDelegate, i + 1, p, queueMissingParams)) + .ToArray(); + + var expr = Expression.Lambda( + Expression.Call(paramThis, method, paramsToPass), + paramsOfDelegate); + + return expr.Compile(); + } + } + + public static Delegate BuildDelegate(this MethodInfo method, params object[] missingParamValues) + { + var parms = method.GetParameters(); + var parmTypes = parms.Select(p => p.ParameterType).ToArray(); + var delegateType = method.ReturnType == typeof(void) ? MakeActionType(parmTypes) : MakeFuncType(parmTypes, method.ReturnType); + var builder = typeof(CommonExtensions).GetMethods().Single(m => m.Name == "BuildDelegate" && m.GetGenericArguments().Length == 1).MakeGenericMethod(delegateType); + return (Delegate)builder.Invoke(null, new object[] { method, missingParamValues }); + } + + public static Formula BuildMultiConditionalLessThanOrEqual(this IDictionary thresholds, object context, string variableName, TValue defaultValue) + where TValue : IConvertible, IComparable, IComparable + { + var sorted = new SortedDictionary(thresholds); + var formula = "***"; + foreach (var kvp in sorted) + formula = formula.Replace("***", kvp.Value.ToStringInvariant() + " if " + variableName + " <= " + kvp.Key + " else (***)"); + formula = formula.Replace("***", defaultValue.ToStringInvariant()); + return new ComputedFormula(formula, context, true); + } + + /// + /// Consumes supplies if possible. + /// + /// The supplies to consume. + /// true if successful or unnecessary, otherwise false + public static bool BurnSupplies(this IMobileSpaceObject sobj, int supplies) + { + if (sobj.HasInfiniteSupplies) + return true; // no need to burn + else if (sobj.SupplyRemaining < supplies) + return false; // not enough + else + { + sobj.SupplyRemaining -= supplies; + return true; + } + } + + /// + /// Consumes supplies if possible. + /// + /// The component consuming supplies. + /// true if successful or unnecessary, otherwise false + public static bool BurnSupplies(this Component comp) + { + if (comp.Container is IMobileSpaceObject) + return (comp.Container as IMobileSpaceObject).BurnSupplies(comp.Template.SupplyUsage); + else + return true; // other component containers don't use supplies + } + + public static int CargoStorageFree(this ICargoContainer cc) + { + return cc.CargoStorage - (cc.Cargo?.Size ?? 0); + } + + /// + /// Checks a command to make sure it doesn't contain any objects that are not client safe. + /// + /// + public static void CheckForClientSafety(this ICommand cmd) + { + var vals = cmd.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Where(f => !f.GetCustomAttributes(true).OfType().Any() && f.GetGetMethod(true) != null && f.GetSetMethod(true) != null).Select(prop => new { Name = prop.Name, Value = prop.GetValue(cmd, new object[0]) }); + var badVals = vals.Where(val => val.Value != null && !val.Value.GetType().IsClientSafe()); + if (badVals.Any()) + throw new Exception(cmd + " contained a non-client-safe type " + badVals.First().Value.GetType() + " in property " + badVals.First().Name); + } + + public static PictorialLogMessage CreateLogMessage(this T context, string text,LogMessageType logMessageType, int? turnNumber = null) + { + if (turnNumber == null) + return new PictorialLogMessage(text, context, logMessageType); + else + return new PictorialLogMessage(text, turnNumber.Value, context, logMessageType); + } + + public static void DealWithMines(this ISpaceObject sobj) + { + if (sobj is IDamageable && sobj is IOwnable) + { + var owner = sobj.Owner; + var d = (IDamageable)sobj; + var sector = sobj.Sector; + if (sector == null) + return; + + // shuffle up the mines so they hit in a random order + var mines = sector.SpaceObjects.OfType().Concat(sector.SpaceObjects.OfType().SelectMany(f => f.LeafVehicles.OfType())).Where(m => m.IsHostileTo(sobj.Owner)).Shuffle().ToList(); + + // for log messages + var totalDamage = 0; + var minesSwept = new SafeDictionary(); + var minesDetonated = new SafeDictionary(); + var minesAttacking = new SafeDictionary(); + + // can we sweep any? + int sweeping; + if (sobj is Fleet f2) + sweeping = f2.LeafVehicles.Sum(v => v.GetAbilityValue("Mine Sweeping").ToInt()); + else + sweeping = sobj.GetAbilityValue("Mine Sweeping").ToInt(); + + // go through the minefield! + while (mines.Any() && !d.IsDestroyed) + { + var mine = mines.First(); + if (sweeping > 0) + { + // sweep a mine + sweeping--; + minesSwept[mine.Owner]++; + mine.Dispose(); + } + else + { + // bang/boom! + bool detonate = false; + foreach (var weapon in mine.Weapons) + { + var shot = new Shot(mine, weapon, d, 0); + var damage = weapon.Template.GetWeaponDamage(1); + var hit = new Hit(shot, d, damage); + var leftoverDamage = d.TakeDamage(hit); + totalDamage += damage - leftoverDamage; + if (weapon.Template.ComponentTemplate.WeaponInfo.IsWarhead) + detonate = true; // warheads go boom, other weapons don't + } + if (detonate) + { + minesDetonated[mine.Owner]++; + mine.Dispose(); + } + else + minesAttacking[mine.Owner]++; + } + + // each mine can only activate or be swept once + mines.Remove(mine); + } + + if (sobj is Fleet ff) + ff.Validate(); + + + // logging! + if (minesDetonated.Any() || minesSwept.Any() || minesAttacking.Any()) + owner.Log.Add(sobj.CreateLogMessage(sobj + " encountered a mine field at " + sector + " and took " + totalDamage + " points of damage, sweeping " + minesSwept.Sum(kvp => kvp.Value) + " mines.", LogMessageType.Generic)); + foreach (var emp in minesSwept.Keys.Union(minesDetonated.Keys).Union(minesAttacking.Keys)) + emp.Log.Add(sobj.CreateLogMessage(sobj + " encountered our mine field at " + sector + ". " + minesDetonated[emp] + " of our mines detonated, " + minesAttacking[emp] + " others fired weapons, and " + minesSwept[emp] + " were swept. " + sector.SpaceObjects.OfType().Where(m => m.Owner == emp).Count() + " mines remain in the sector.", LogMessageType.Generic)); + } + } + + /// + /// Returns a custom value if the specified value is null or the wrong type. + /// Otherwise returns the value itself. + /// + /// + /// + /// + /// + public static T Default(this object value, T def = default(T), bool throwIfWrongType = false) + { + if (throwIfWrongType && !(value is T)) + throw new InvalidCastException($"Cannot convert {value} to type {typeof(T)}."); + return value == null || !(value is T) ? def : (T)value; + } + + /// + /// Returns a custom value if the specified value is equal to the default value for its type. + /// Otherwise returns the value itself. + /// + /// + /// + /// + /// + public static T DefaultTo(this T value, T def) + { + return value.Equals(default(T)) ? def : value; + } + + /// + /// Programmatic equivalent of the default operator. + /// + /// + /// + public static object DefaultValue(this Type t) + { + if (defaultValueCache[t] == null) + defaultValueCache[t] = typeof(CommonExtensions).GetMethod("GetDefaultGeneric", BindingFlags.NonPublic | BindingFlags.Static).MakeGenericMethod(t).Invoke(null, null); + return defaultValueCache[t]; + } + + /// + /// Disposes of all objects in an enumerated list that meet a specified condition (or all items if condition is null). + /// Does not clear the list; if the list is a collection, you can do this yourself. + /// + /// + /// + /// + public static void DisposeAll(this IEnumerable list, Func condition = null) where T : IDisposable + { + foreach (var d in list.Where(d => condition == null || condition(d)).ToArray()) + d.Dispose(); + } + + public static void DisposeAndLog(this IFoggable obj, string message = null, params Empire[] empiresToSkipMessage) + { + if (Empire.Current == null) + { + foreach (var emp in Galaxy.Current.Empires) + { + if (obj.CheckVisibility(emp) >= Visibility.Visible) + { + if (message != null && !empiresToSkipMessage.Contains(emp)) + emp.RecordLog(obj, message, LogMessageType.Generic); + } + } + } + obj.Dispose(); + } + + /// + /// Copies an image and draws planet population bars on it. + /// + /// The image. + /// The planet whose population bars should be drawn. + /// The copied image with the population bars. + public static Image DrawPopulationBars(this Image image, Planet planet) + { + var img2 = (Image)image.Clone(); + planet.DrawPopulationBars(img2); + return img2; + } + + /// + /// Computes the distance between two points along a grid with eight-way movement. + /// + /// + /// + /// + public static int EightWayDistance(this Point p, Point target) + { + var dx = Math.Abs(target.X - p.X); + var dy = Math.Abs(target.Y - p.Y); + return Math.Max(dx, dy); + } + + public static bool ExecuteMobileSpaceObjectOrders(this T o) + where T : IMobileSpaceObject + { + bool didStuff = false; + + if (o.AreOrdersOnHold) + return didStuff; + + if (o is Fleet f && !f.Vehicles.ExceptSingle(null).Any()) + o.Dispose(); + var runOrders = new List(); + while (!o.IsDisposed && !o.IsDestroyed && o.Orders.Any() && (o.TimeToNextMove <= 1e-15 || !o.Orders.First().ConsumesMovement)) + { + var order = o.Orders.First(); + order.Execute(o); + runOrders.Add(order); + if (order.IsComplete && o.Orders.Contains(order)) + { + o.RemoveOrder(o.Orders.First()); + if (o.AreRepeatOrdersEnabled) + { + order.IsComplete = false; + o.AddOrder(order); + if (runOrders.Count == o.Orders.Count()) + break; // don't get in an infinite loop of repeating orders + } + } + didStuff = true; + } + if (Galaxy.Current.NextTickSize == double.PositiveInfinity) + o.TimeToNextMove = 0; + else + o.TimeToNextMove -= Galaxy.Current.NextTickSize; + return didStuff; + } + + /// + /// Finds the last sector in a space object's path, or if it has no movement-type orders, its current sector. + /// + /// + /// + public static Sector FinalSector(this T sobj) + where T : IMobileSpaceObject + { + var path = sobj.Path(); + if (path == null || !path.Any()) + return sobj.Sector; + return path.Last(); + } + + /// + /// Finds the cargo container which contains this unit. + /// + /// + public static ICargoContainer FindContainer(this IUnit unit) + { + var containers = Galaxy.Current.FindSpaceObjects().Where(cc => !(cc is Fleet) && cc.Cargo != null && cc.Cargo.Units.Contains(unit)); + if (!containers.Any()) + { + if (unit is IMobileSpaceObject) + { + var v = (IMobileSpaceObject)unit; + return v.Sector; + } + else + return null; // unit is in limbo... + } + if (containers.Count() > 1) + throw new Exception("Unit is in multiple cargo containers?!"); + return containers.Single(); + } + + /// + /// Finds the coordinates of a space object within its star system. + /// + /// + /// + public static Point FindCoordinates(this ISpaceObject sobj) + { + return sobj.FindStarSystem().FindCoordinates(sobj); + } + + public static T FindMemory(this T f, Empire emp) where T : IFoggable, IReferrable + { + if (f == null) + return default(T); + if (emp == null) + return f; // host can see everything + return (T)emp.Memory[f.ID]; + } + + /// + /// Finds the original object of a memory, if it is known. + /// + /// + /// + /// + public static IFoggable FindOriginalObject(this IFoggable f, Empire emp) + { + // not a memory? it is its own real object + if (!(f.IsMemory)) + return f; + + // look for the real object + if (emp.Memory.Any(kvp => kvp.Value == f)) + return (IFoggable)Galaxy.Current.referrables[emp.Memory.Single(kvp => kvp.Value == f).Key]; + + // nothing found? + return null; + } + + /// + /// Finds a property on a type, base type, or interface. + /// + /// + /// + /// + public static PropertyInfo FindProperty(this Type type, string propName) + { + var p = type.GetProperty(propName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + if (p != null) + return p.DeclaringType.GetProperty(propName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + var b = type.BaseType; + if (b != null) + { + var bp = b.FindProperty(propName); + if (bp != null) + return bp.DeclaringType.GetProperty(propName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + } + foreach (var i in type.GetInterfaces()) + { + var ip = i.FindProperty(propName); + if (ip != null) + return ip.DeclaringType.GetProperty(propName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + } + return null; + } + + /// + /// Finds the sector containing a space object. + /// + /// + /// + public static Sector FindSector(this ISpaceObject sobj) + { + var sys = sobj.FindStarSystem(); + if (sys == null) + return null; + // TODO - this might be kind of slow; might want a reverse memory lookup + return new Sector(sys, sys.SpaceObjectLocations.Single(l => l.Item == sobj).Location); + } + + /// + /// Finds the star system containing a space object. + /// + /// + /// + public static StarSystem FindStarSystem(this ISpaceObject sobj) + { + var loc = Galaxy.Current.StarSystemLocations.SingleOrDefault(l => l.Item.Contains(sobj)); + /*if (loc == null) + { + // search memories too + // TODO - this might be kind of slow; might want a reverse memory lookup + loc = Galaxy.Current.StarSystemLocations.SingleOrDefault(l => l.Item.FindSpaceObjects().Any(s => Galaxy.Current.Empires.ExceptSingle(null).Any(e => e.Memory[s.ID] == sobj))); + }*/ + if (loc == null) + return null; + return loc.Item; + } + + /// + /// Gets points both on the border and in the interior of a rectangle. + /// + /// + /// + public static IEnumerable GetAllPoints(this Rectangle r) + { + for (var x = r.Left; x <= r.Right; x++) + { + for (var y = r.Top; y <= r.Bottom; y++) + yield return new Point(x, y); + } + } + + /// + /// Gets the points on the border of a rectangle. + /// + /// + /// + public static IEnumerable GetBorderPoints(this Rectangle r) + { + for (var x = r.Left; x <= r.Right; x++) + { + if (x == r.Left || x == r.Right) + { + // get left and right sides + for (var y = r.Top; y <= r.Bottom; y++) + yield return new Point(x, y); + } + else + { + // just get top and bottom + yield return new Point(x, r.Top); + if (r.Top != r.Bottom) + yield return new Point(x, r.Bottom); + } + } + } + + /// + /// Gets the canonical name for a property, class, etc. + /// This is taken from the [CanonicalName] attribute if present, otherwise the name of the item itself. + /// + /// + /// + public static string GetCanonicalName(this MemberInfo m) + { + // TODO - use most derived class's attribute? + var name = m.GetAttributes().Select(a => a.Name).SingleOrDefault(); + if (name == null) + return m.Name; + return name; + } + + /// + /// Gets a property value from an object using reflection. + /// If the property does not exist or the property value is not IComparable, returns an empty string. + /// + /// + /// + /// + public static IComparable GetComparablePropertyValue(this object o, string propertyName) + { + var pval = GetPropertyValue(o, propertyName); + if (pval == null || !(pval is IComparable)) + return ""; + return (IComparable)pval; + } + + public static SafeDictionary GetData(this object o, ObjectGraphContext context) + { + // serialize object type and field count + if (o is IDataObject) + { + // use data object code! :D + var dobj = (IDataObject)o; + return dobj.Data; + } + else if (o != null) + { + // use reflection :( + var dict = new SafeDictionary(); + var props = ObjectGraphContext.GetKnownProperties(o.GetType()).Values.Where(p => !p.GetValue(o, null).SafeEquals(p.PropertyType.DefaultValue())); + foreach (var p in props) + dict[p.Name] = p.GetValue(o); + return dict; + } + else + return new SafeDictionary(); + } + + /// + /// Gets points in the interior of a rectangle. + /// + /// + /// + public static IEnumerable GetInteriorPoints(this Rectangle r) + { + for (var x = r.Left + 1; x < r.Right; x++) + { + for (var y = r.Top + 1; y < r.Bottom; y++) + yield return new Point(x, y); + } + } + + /// + /// Gets all names for a property, class, etc. including custom names and the actual item name. + /// + /// + /// + public static IEnumerable GetNames(this MemberInfo m) + { + return m.GetAttributes().Select(a => a.Name).UnionSingle(m.Name); + } + + /// + /// Gets a property value from an object using reflection. + /// If the property does not exist, returns null. + /// + /// + /// + /// + public static object GetPropertyValue(this object o, string propertyName) + { + if (o == null) + return null; + var prop = o.GetType().GetProperty(propertyName); + if (prop == null) + return null; + return prop.GetValue(o, new object[0]); + } + + /// + /// Returns an object's hash code, or 0 for null. + /// + /// + public static int GetSafeHashCode(this object o) + { + return o == null ? 0 : o.GetHashCode(); + } + + public static Type GetVehicleType(this VehicleTypes vt) + { + switch (vt) + { + case VehicleTypes.Ship: + return typeof(Ship); + + case VehicleTypes.Base: + return typeof(Base); + + case VehicleTypes.Fighter: + return typeof(Fighter); + + case VehicleTypes.Troop: + return typeof(Troop); + + case VehicleTypes.Mine: + return typeof(Mine); + + case VehicleTypes.Satellite: + return typeof(Satellite); + + case VehicleTypes.Drone: + return typeof(Drone); + + case VehicleTypes.WeaponPlatform: + return typeof(WeaponPlatform); + + default: + throw new Exception("No type is available for vehicle type " + vt); + } + } + + /// + /// All income provided by an object. + /// + /// + /// + public static ResourceQuantity GrossIncome(this IIncomeProducer o) + { + return o.StandardIncome() + o.RemoteMiningIncome() + o.RawResourceIncome(); + } + + public static object Instantiate(this Type type, params object[] args) + { + if (type.Name == "Battle") + return typeof(SpaceBattle).Instantiate(); // HACK - old savegame compatibility + if (type.GetConstructors().Where(c => c.GetParameters().Length == (args == null ? 0 : args.Length)).Any()) + return Activator.CreateInstance(type, args); + else + return FormatterServices.GetSafeUninitializedObject(type); + } + + public static T Instantiate(params object[] args) + { + return (T)typeof(T).Instantiate(args); + } + + public static bool IsUnlocked(this IUnlockable u) + { + return u.UnlockRequirements.All(r => r.IsMetBy(Empire.Current)); + } + + /// + /// Limits a value to a range. + /// Throws an exception if min is bigger than max. + /// + /// + /// + /// + /// + public static int LimitToRange(this int value, int min, int max) + { + if (min > max) + throw new ArgumentOutOfRangeException("Min is {0} and can't be larger than max which is {1}!".F(min, max)); + if (value > max) + value = max; + if (value < min) + value = min; + return value; + } + + /// + /// Limits a value to a range. + /// Throws an exception if min is bigger than max. + /// + /// + /// + /// + /// + public static double LimitToRange(this double value, double min, double max) + { + if (min > max) + throw new ArgumentOutOfRangeException("Min is {0} and can't be larger than max which is {1}!".F(min, max)); + if (value > max) + value = max; + if (value < min) + value = min; + return value; + } + + /// + /// Logs an exception in fatalerrorlog.txt. Overwrites the old fatalerrorlog.txt. + /// + /// + public static void LogFatal(this Exception ex) + { + var sw = new StreamWriter("fatalerrorlog.txt"); + sw.WriteLine(ex.GetType().Name + " occurred at " + DateTime.Now + ":"); + sw.WriteLine(ex.ToString()); + sw.Close(); + } + + /// + /// Appends the exception to the end of errorlog.txt. + /// + /// + public static void Log(this Exception ex) + { + var sw = new StreamWriter("errorlog.txt", true); + sw.WriteLine(ex.GetType().Name + " occurred at " + DateTime.Now + ":"); + sw.WriteLine(ex.ToString()); + sw.WriteLine(); + sw.Close(); + } + + /// + /// Logs an error in the AI of the given empire to disk. + /// + /// + /// + public static void LogAIMessage(this Empire empire, string message) + { + var sw = new StreamWriter($"{empire.AI.Name}.log", true); + sw.WriteLine($"{DateTime.UtcNow} ({Galaxy.Current.Name}-{empire.ID}):{message}"); + sw.Close(); + } + + + public static Type MakeActionType(this IEnumerable parmTypes) + { + if (parmTypes.Count() == 0) + return typeof(Action); + if (parmTypes.Count() == 1) + return typeof(Action<>).MakeGenericType(parmTypes.ToArray()); + if (parmTypes.Count() == 2) + return typeof(Action<,>).MakeGenericType(parmTypes.ToArray()); + if (parmTypes.Count() == 3) + return typeof(Action<,,>).MakeGenericType(parmTypes.ToArray()); + if (parmTypes.Count() == 4) + return typeof(Action<,,,>).MakeGenericType(parmTypes.ToArray()); + if (parmTypes.Count() == 5) + return typeof(Action<,,,,>).MakeGenericType(parmTypes.ToArray()); + if (parmTypes.Count() == 6) + return typeof(Action<,,,,,>).MakeGenericType(parmTypes.ToArray()); + // TODO - more parms + throw new Exception("MakeActionType currently supports only 0-6 parameters."); + } + + public static Type MakeFuncType(this IEnumerable parmTypes, Type returnType) + { + var types = parmTypes.Concat(returnType.SingleItem()); + if (parmTypes.Count() == 0) + return typeof(Func<>).MakeGenericType(types.ToArray()); + if (parmTypes.Count() == 1) + return typeof(Func<,>).MakeGenericType(types.ToArray()); + if (parmTypes.Count() == 2) + return typeof(Func<,,>).MakeGenericType(types.ToArray()); + if (parmTypes.Count() == 3) + return typeof(Func<,,,>).MakeGenericType(types.ToArray()); + if (parmTypes.Count() == 4) + return typeof(Func<,,,,>).MakeGenericType(types.ToArray()); + if (parmTypes.Count() == 5) + return typeof(Func<,,,,,>).MakeGenericType(types.ToArray()); + if (parmTypes.Count() == 6) + return typeof(Func<,,,,,,>).MakeGenericType(types.ToArray()); + // TODO - more parms + throw new Exception("MakeFuncType currently supports only -16 parameters."); + } + + /// + /// Computes the Manhattan (4-way grid) distance between two points. + /// + /// + /// + /// + public static int ManhattanDistance(this Point p, Point target) + { + return Math.Abs(target.X - p.X) + Math.Abs(target.Y - p.Y); + } + + /// + /// Who does a memory belong to? + /// + /// The memory. + /// Empire to which the memory belongs (null if not memory). + public static Empire MemoryOwner(this IFoggable f) + { + if (!f.IsMemory) + return null; + return Galaxy.Current.Empires.ExceptSingle(null).SingleOrDefault(x => x.Memory.Values.Contains(f)); + } + + public static ILookup MyLookup(this IEnumerable> dict) + where TEnumerable : IEnumerable + { + var list = new List>(); + foreach (var kvp in dict) + { + foreach (var item in kvp.Value) + list.Add(new KeyValuePair(kvp.Key, item)); + } + return list.ToLookup(kvp => kvp.Key, kvp => kvp.Value); + } + + /// + /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. + /// + public static string NameFor(this IBattle b, Empire emp) + { + return b.ResultFor(emp).Capitalize() + " at " + b.Sector; + } + + /// + /// Makes sure there aren't more supplies than we can store, or fewer than zero + /// + /// Leftover supplies (or a negative number if somehow we got negative supplies in this vehicle) + public static int NormalizeSupplies(this IMobileSpaceObject sobj) + { + if (sobj.SupplyRemaining > sobj.SupplyStorage) + { + var leftover = sobj.SupplyRemaining - sobj.SupplyStorage; + sobj.SupplyRemaining = sobj.SupplyStorage; + return leftover; + } + if (sobj.SupplyRemaining < 0) + { + var deficit = sobj.SupplyRemaining; + sobj.SupplyRemaining = 0; + return deficit; + } + return 0; + } + + /// + /// Parses a string using the type's static Parse method. + /// + /// + /// + /// + public static T Parse(this string s) + { + var parser = typeof(T).GetMethod("Parse", BindingFlags.Static); + var expr = Expression.Call(parser); + return (T)expr.Method.Invoke(null, new object[] { s }); + } + + /// + /// Computes the path that this space object is ordered to follow. + /// + /// + /// + /// + public static IEnumerable Path(this IMobileSpaceObject sobj) + { + // TODO - cache paths and only recalculate them when the orders change + var last = sobj.Sector; + foreach (var order in sobj.Orders) + { + if (order is IMovementOrder) + { + var o = (IMovementOrder)order; + foreach (var s in o.Pathfind(sobj, last)) + yield return s; + last = o.Destination; + } + } + } + + public static void Place(this IUnit unit, ISpaceObject target) + { + if (target is ICargoContainer) + { + var container = (ICargoContainer)target; + var cargo = container.Cargo; + if (cargo.Size + unit.Design.Hull.Size <= container.CargoStorage) + { + cargo.Units.Add(unit); + return; + } + } + foreach (var container in target.Sector.SpaceObjects.OfType().Where(cc => cc.Owner == unit.Owner)) + { + var cargo = container.Cargo; + if (cargo.Size + unit.Design.Hull.Size <= container.CargoStorage) + { + cargo.Units.Add(unit); + return; + } + } + unit.Owner.Log.Add(unit.CreateLogMessage(unit + " was lost due to insufficient cargo space at " + target + ".", LogMessageType.Warning)); + } + + /// + /// Raises an event, but doesn't do anything if the event handler is null. + /// + /// + /// + /// + public static void Raise(this EventHandler evt, object sender, TArgs e) where TArgs : EventArgs + { + if (evt != null) + evt(sender, e); + } + + /// + /// Raw resource income which is not affected by any modifiers. + /// + /// + /// + public static ResourceQuantity RawResourceIncome(this IIncomeProducer o) + { + var rawResourceIncome = new ResourceQuantity(); + foreach (var resource in Resource.All) + { + var rule = Mod.Current.AbilityRules.SingleOrDefault(r => r.Matches("Generate Points " + resource)); + if (rule != null) + { + var amount = o.GetAbilityValue(rule.Name).ToInt(); + rawResourceIncome += resource * amount; + } + } + return rawResourceIncome; + } + + /// + /// Reads characters until the specified character is found or end of stream. + /// Returns all characters read except the specified character. + /// + /// + /// + /// + public static string ReadTo(this TextReader r, char c, StringBuilder log) + { + var sb = new StringBuilder(); + int data = 0; + bool escaping = false; + do + { + data = r.Read(); + if (data <= 0) + break; // end of stream + else if (escaping) + { + // in an escape sequence + sb.Append((char)data); + if (log != null) + log.Append((char)data); + escaping = false; + } + /*else if (quoting) + { + // in quotes + sb.Append((char)data); + if (log != null) + log.Append((char)data); + if (data == '"') + quoting = false; + }*/ + else if (data == c) + break; // found match + else if (data == '\\') + escaping = true; // begin escape sequence + /*else if (data == '"') + { + sb.Append((char)data); + quoting = true; // begin quoted string + }*/ + else + { + // regular data + sb.Append((char)data); + if (log != null) + log.Append((char)data); + } + } while (true); + if (data == c && log != null) + log.Append(c); + return sb.ToString(); + } + + /// + /// Reads characters until the specified character is found at the end of the line or end of stream. + /// Returns all characters read except the specified character. + /// + /// + /// + /// + public static string ReadToEndOfLine(this TextReader r, char c, StringBuilder log) + { + var sb = new StringBuilder(); + string data = ""; + do + { + data = r.ReadLine(); + log?.Append(data); + sb.Append(data); + if (data.EndsWith(c.ToString())) + break; + } while (true); + return sb.ToString().Substring(0, Math.Max(0, sb.Length - 1)); // trim off the semicolon + } + + /// + /// Generates new IDs for this object (unless skipRoot is true) and all subordinate objects. + /// TODO - take into account DoNotAssignIDAttribute + /// + /// + public static void ReassignAllIDs(this IReferrable obj, bool skipRoot = false) + { + var parser = new ObjectGraphParser(); + var canCopy = new System.Collections.Generic.Stack(); // stack of bools indicating which objects in the current hierarchy path we can copy + canCopy.Push(true); + parser.Property += (pname, o, val) => + { + var prop = o.GetType().FindProperty(pname); + var shouldRecurse = !prop.CanCopyFully(); + if (shouldRecurse) + canCopy.Push(shouldRecurse); + return shouldRecurse; + }; + parser.Item += (o) => + { + // can always serialize collection items + canCopy.Push(true); + }; + parser.StartObject += (o) => + { + var doit = canCopy.All(b => b) && (!skipRoot || o != obj); + if (doit && o is IReferrable) + { + var r = (IReferrable)o; + r.ReassignID(); + } + }; + parser.EndObject += (o) => + { + canCopy.Pop(); + }; + parser.Null += (o) => + { + canCopy.Pop(); + }; + parser.KnownObject += (o) => + { + canCopy.Pop(); + }; + parser.Parse(obj); + } + + /// + /// Reassigns the ID of an object, overwriting any existing ID. + /// + /// + public static void ReassignID(this IReferrable r) + { + r.ID = 0; + Galaxy.Current.AssignID(r); + } + + public static TRef Refer(this T t) where TRef : IReference + { + return (TRef)typeof(TRef).Instantiate(t); + } + + public static GalaxyReference ReferViaGalaxy(this T t) + where T : IReferrable + { + if (t == null) + return null; + return new GalaxyReference(t); + } + + public static ModReference ReferViaMod(this T t) where T : IModObject + { + if (t == null) + return null; + return new ModReference(t); + } + + /// + /// Refills the space object's movement points. + /// + public static void RefillMovement(this IMobileSpaceObject sobj) + { + sobj.MovementRemaining = sobj.StrategicSpeed; + sobj.TimeToNextMove = sobj.TimePerMove; + } + + public static void RefreshDijkstraMap(this IMobileSpaceObject sobj) + { + // create new map if necessary + if (sobj.DijkstraMap == null) + sobj.DijkstraMap = new Dictionary, ISet>>(); + + // prune old nodes + var start = sobj.Sector; + foreach (var n in sobj.DijkstraMap.Keys.OrderBy(n => n.Cost).ToArray()) + { + if ((n.PreviousNode == null || !sobj.DijkstraMap.ContainsKey(n.PreviousNode)) && n.Location != start) + { + // already went here or it was an aborted path + // delete the node (and this will mark for deletion all its children that we're not at) + sobj.DijkstraMap.Remove(n); + if (n.Location == start) + { + foreach (var n2 in sobj.DijkstraMap.Keys) + n2.Cost -= 1; + } + } + } + + // add new nodes + int minCost = 0; + foreach (var order in sobj.Orders) + { + var last = start; + if (order is IMovementOrder) + { + var o = (IMovementOrder)order; + foreach (var kvp in o.CreateDijkstraMap(sobj, last)) + { + kvp.Key.Cost += minCost; + sobj.DijkstraMap.Add(kvp); + } + // account for cost of previous orders + minCost = sobj.DijkstraMap.Keys.MaxOrDefault(n => n.MinimumCostRemaining); + last = o.Destination; + } + } + } + + /// + /// Income produced by this object's remote mining abilities. + /// Modified by racial aptitudes. + /// Not affected by lack of spaceports. + /// + /// + /// + public static ResourceQuantity RemoteMiningIncome(this IIncomeProducer o) + { + return o.Owner.RemoteMiners.Where(m => m.Key.Item1 == o).Sum(m => m.Value); + } + + /// + /// Removes an order from some object. + /// If the order was just added by the player this turn, simply deletes it. + /// If not, also creates a RemoveOrderCommand to remove it on the server, and adds that command to the empire's commands. + /// Intended only for client side use. + /// + /// The type of orderable object. + /// The object from which to remove an order. + /// The order to remove. + /// The remove-order command created, if any. + public static RemoveOrderCommand RemoveOrderClientSide(this IOrderable obj, IOrder order) + { + if (Empire.Current == null) + throw new InvalidOperationException("RemoveOrderClientSide is intended for client side use."); + var addCmd = Empire.Current.Commands.OfType().SingleOrDefault(c => c.Order == order); + if (addCmd == null) + { + // not a newly added order, so create a remove command to take it off the server + var remCmd = new RemoveOrderCommand(obj, order); + Empire.Current.Commands.Add(remCmd); + obj.RemoveOrder(order); + return remCmd; + } + else + { + // a newly added order, so just get rid of the add command + Empire.Current.Commands.Remove(addCmd); + obj.RemoveOrder(order); + return null; + } + } + + /// + /// Resizes an image. The image should be square. + /// + /// + /// + /// + public static Image Resize(this Image image, int size) + { + if (image == null) + return null; + if (size == 0) + return null; + var result = new Bitmap(size, size, PixelFormat.Format32bppArgb); + var g = Graphics.FromImage(result); + g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; + g.DrawImage(image, 0, 0, size, size); + return result; + } + + /// + /// The result (victory/defeat/stalemate) for a given empire. + /// If empire or its allies are not involved or no empire specified, just say "battle". + /// + /// + /// + public static string ResultFor(this IBattle b, Empire emp) + { + if (emp == null) + return "battle"; // no empire specified + if (!b.Empires.Contains(emp) && !b.Empires.Any(e => e.IsAllyOf(emp, b.StarSystem))) + return "battle"; // empire/allies not involved + var survivors = b.Combatants.Where(c => c.IsAlive); + var ourSurvivors = survivors.Where(c => c.Owner == emp); + var allySurvivors = survivors.Where(c => c.Owner.IsAllyOf(emp, b.StarSystem)); + var friendlySurvivors = ourSurvivors.Concat(allySurvivors); + var enemySurvivors = survivors.Where(c => c.Owner.IsEnemyOf(emp, b.StarSystem)); + if (friendlySurvivors.Any() && enemySurvivors.Any()) + return "stalemate"; + if (friendlySurvivors.Any()) + return "victory"; + if (enemySurvivors.Any()) + return "defeat"; + return "Pyrrhic victory"; // mutual annihilation! + } + + public static IEnumerable RunTasks(this IEnumerable> ops) + { + return ops.SpawnTasksAsync().Result; + } + + public static IEnumerable RunTasks(this IEnumerable objs, Func op) + { + return objs.SpawnTasksAsync(op).Result; + } + + public static void SafeDispose(this IDisposable d) + { + if (d != null) + d.Dispose(); + } + + /// + /// Equals method that doesn't throw an exception when objects are null. + /// Null is not equal to anything else, except other nulls. + /// + /// + /// + /// + public static bool SafeEquals(this object o1, object o2) + { + if (o1 == null && o2 == null) + return true; + if (o1 == null || o2 == null) + return false; + return o1.Equals(o2); + } + + public static bool SafeSequenceEqual(this IEnumerable e1, IEnumerable e2) + { + if (e1.SafeEquals(null) && e2.SafeEquals(null)) + return true; + if (e1.SafeEquals(null) || e2.SafeEquals(null)) + return false; + return e1.SequenceEqual(e2); + } + + public static void SetData(this object o, SafeDictionary dict, ObjectGraphContext context) + { + if (context == null) + context = new ObjectGraphContext(); + if (o is IDataObject) + { + // use data object code! :D + var dobj = (IDataObject)o; + dobj.Data = dict; + } + else if (o != null) + { + // use reflection :( + foreach (var kvp in dict) + { + var pname = kvp.Key; + var val = kvp.Value; + var prop = ObjectGraphContext.GetKnownProperties(o.GetType())[pname]; + if (prop != null) + { + try + { + context.SetObjectProperty(o, prop, val); + } + catch (NullReferenceException) + { + if (o == null && prop == null) + Console.Error.WriteLine($"Attempted to set unknown property {pname} on a null object."); + else if (o == null) + Console.Error.WriteLine($"Attempted to set property {pname} on a null object."); + else if (prop == null) + Console.Error.WriteLine($"Attempted to set unknown property {pname} on {o}."); + else + throw; + } + catch (InvalidCastException) + { + Console.Error.WriteLine($"Could not set property {pname} of object {o} of type {o.GetType()} to value {val} of type {val.GetType()}."); + throw; + } + } + else + Console.Error.WriteLine($"Found unknown property {pname} in serialized data for object type {o.GetType()}."); + } + } + else + throw new NullReferenceException("Can't set data on a null object."); + } + + /// + /// Sets a property value on an object using reflection. + /// + /// + /// + /// + public static void SetPropertyValue(this object o, string propertyName, object value) + { + o.GetType().GetProperty(propertyName).SetValue(o, value, new object[0]); + } + + /// + /// Spawns multiple tasks to return an enumeration of items. + /// + /// + /// + /// + /// + public static async Task> SpawnTasksAsync(this IEnumerable> ops) + { + // Enumerate the tasks we need to do and start them + var tasks = ops.Select(op => Task.Factory.StartNew(op)); + + // Wait for them to complete + return await Task.WhenAll(tasks); + } + + /// + /// Spawns multiple tasks to return an enumeration of items. + /// + /// + /// + /// + /// + public static async Task> SpawnTasksAsync(this IEnumerable objs, Func op) + { + return await objs.Select(obj => new Func(() => op(obj))).SpawnTasksAsync(); + } + + /// + /// Spawns multiple tasks to perform a bunch of actions. + /// + /// + /// + /// + /// + public static async Task SpawnTasksAsync(this IEnumerable ops) + { + // Enumerate the tasks we need to do and start them + var tasks = ops.Select(op => Task.Factory.StartNew(op)); + + // Wait for them to complete + await Task.WhenAll(tasks); + } + + /// + /// Spawns multiple tasks to perform a bunch of actions. + /// + /// + /// + /// + /// + public static async Task SpawnTasksAsync(this IEnumerable objs, Action op) + { + await objs.Select(obj => new Action(() => op(obj))).SpawnTasksAsync(); + } + + /// + /// Standard income provided by mining, research, and intelligence. + /// Affected by racial aptitudes, happiness, planet value, lack of spaceport, that sort of thing. + /// + /// + /// + public static ResourceQuantity StandardIncome(this IIncomeProducer o) + { + var income = new ResourceQuantity(); + var ratio = 1.0; + if (!o.StarSystem.HasAbility(o.Owner, "Spaceport")) + ratio = o.MerchantsRatio; + var prefix = "Resource Generation - "; + var pcts = o.StandardIncomePercentages; + foreach (var abil in o.Abilities().Where(abil => abil.Rule.Name.StartsWith(prefix))) + { + var resource = Resource.Find(abil.Rule.Name.Substring(prefix.Length)); + var amount = abil.Value1.ToInt(); + + if (resource.HasValue) + amount = Galaxy.Current.StandardMiningModel.GetRate(amount, o.ResourceValue[resource], pcts[resource] / 100d); + + income.Add(resource, amount); + } + prefix = "Point Generation - "; + foreach (var abil in o.Abilities().Where(abil => abil.Rule.Name.StartsWith(prefix))) + { + var resource = Resource.Find(abil.Rule.Name.Substring(prefix.Length)); + var amount = abil.Value1.ToInt() * pcts[resource] / 100; + + income.Add(resource, amount); + } + + return income * ratio; + } + + /// + /// Finds all subfleets (recursively, including this fleet) that have any child space objects that are not fleets. + /// + /// + /// + public static IEnumerable SubfleetsWithNonFleetChildren(this Fleet rootFleet) + { + if (rootFleet.Vehicles.Any(sobj => !(sobj is Fleet))) + yield return rootFleet; + foreach (var subfleet in rootFleet.Vehicles.OfType()) + { + foreach (var subsub in subfleet.SubfleetsWithNonFleetChildren()) + yield return subsub; + } + } + + /// + /// Inflicts damage on an object. + /// + /// Leftover damage. + public static int TakeDamage(this IDamageable d, DamageType dt, int damage, PRNG dice = null) + { + return d.TakeDamage(new Hit(dt, damage, d), dice); + } + + /// + /// Inflicts damage on an object. + /// + /// Leftover damage. + public static int TakeDamage(this IDamageable d, string damageTypeName, int damage, PRNG dice = null) + { + return d.TakeDamage(Mod.Current.DamageTypes.FindByName(damageTypeName), damage, dice); + } + + /// + /// Inflicts normal damage on an object out of the blue. + /// + /// The object which should take damage. + /// The amount of normal damage to inflict. + /// Leftover damage. + public static int TakeNormalDamage(this IDamageable d, int dmg, PRNG dice = null) + { + return d.TakeDamage("Normal", dmg, dice); + } + + public static int TakeShieldDamage(this IDamageable d, Hit hit, int damage, PRNG dice = null) + { + // TODO - make sure we have components that are not immune to the damage type so we don't get stuck in an infinite loop + int shieldDmg = 0; + var dt = hit.Shot?.DamageType ?? DamageType.Normal; + int normalShieldPiercing = dt.NormalShieldPiercing.Evaluate(hit); + int phasedShieldPiercing = dt.PhasedShieldPiercing.Evaluate(hit); + double normalSDF = dt.NormalShieldDamage.Evaluate(hit).Percent(); + double phasedSDF = dt.PhasedShieldDamage.Evaluate(hit).Percent(); + + // how much damage pierced the shields? + double piercedShields = 0; + + if (d.NormalShields > 0) + { + var dmg = (int)Math.Min(damage * normalSDF, d.NormalShields); + piercedShields += damage * normalShieldPiercing.Percent(); + d.NormalShields -= dmg; + if (normalSDF != 0) + damage -= (int)Math.Ceiling(dmg / normalSDF); + shieldDmg += dmg; + } + if (d.PhasedShields > 0) + { + var dmg = (int)Math.Min(damage * phasedSDF, d.PhasedShields); + piercedShields += damage * phasedShieldPiercing.Percent(); + d.PhasedShields -= dmg; + if (phasedSDF != 0) + damage -= (int)Math.Ceiling(dmg / phasedSDF); + shieldDmg += dmg; + } + + return damage; + } + + /// + /// Multiplies an integer by a scale factor and rounds it. + /// + /// + /// + /// + public static int TimesAndRound(this int i, double d) + { + return (int)Math.Round(i * d); + } + + /// + /// Transfers items from this cargo container to another cargo container. + /// + public static void TransferCargo(this ICargoContainer src, CargoDelta delta, ICargoContainer dest, Empire emp, bool overrideFreeSpace = false) + { + // if destination is null, we are transferring to/from space + if (dest == null) + dest = src.Sector; + if (src == null) + src = dest.Sector; + + // transfer per-race population + foreach (var kvp in delta.RacePopulation) + { + var amount = long.MaxValue; + + // limit by desired amount to transfer + if (kvp.Value != null) + amount = Math.Min(amount, kvp.Value.Value); + // limit by amount available + amount = Math.Min(amount, src.AllPopulation[kvp.Key]); + if (!overrideFreeSpace) + { + // limit by amount of free space + amount = Math.Min(amount, dest.PopulationStorageFree + (long)((dest.CargoStorage - dest.Cargo.Size) / Mod.Current.Settings.PopulationSize)); + } + + amount -= src.RemovePopulation(kvp.Key, amount); + dest.AddPopulation(kvp.Key, amount); + + if (amount < kvp.Value) + emp.Log.Add(src.CreateLogMessage(src + " could transfer only " + amount.ToUnitString(true) + " of the desired " + kvp.Value.ToUnitString(true) + " " + kvp.Key + " population to " + dest + " due to lack of population available or lack of storage space.", LogMessageType.Warning)); + } + + // transfer any-population + var anyPopLeft = delta.AnyPopulation; + foreach (var kvp in src.AllPopulation.ToArray()) + { + // how much population to transfer for this race? + var amount = long.MaxValue; + + // limit by desired amount to transfer + amount = Math.Min(amount, anyPopLeft); + // limit by amount available + amount = Math.Min(amount, kvp.Value); + // limit by amount of free space + amount = Math.Min(amount, dest.PopulationStorageFree + (long)((dest.CargoStorage - dest.Cargo.Size) / Mod.Current.Settings.PopulationSize)); + + // transfer population from source to destination + amount -= src.RemovePopulation(kvp.Key, amount); + dest.AddPopulation(kvp.Key, amount); + + // log warnings + if (amount < anyPopLeft) + emp.Log.Add(src.CreateLogMessage(src + " could transfer only " + amount.ToUnitString(true) + " of the desired " + kvp.Value.ToUnitString(true) + " general population to " + dest + " due to lack of population available or lack of storage space.", LogMessageType.Warning)); + + // done transferring population + if (amount == 0) + continue; + } + + // transfer all-population + if (delta.AllPopulation) + { + foreach (var kvp in src.AllPopulation.ToArray()) + { + // how much population to transfer for this race? + var amount = long.MaxValue; + + // limit by amount available + amount = Math.Min(amount, kvp.Value); + // limit by amount of free space + amount = Math.Min(amount, dest.PopulationStorageFree + (long)((dest.CargoStorage - dest.Cargo.Size) / Mod.Current.Settings.PopulationSize)); + + // transfer population from source to destination + amount -= src.RemovePopulation(kvp.Key, amount); + amount += dest.AddPopulation(kvp.Key, amount); + + // put any population that didn't fit back on the source + src.AddPopulation(kvp.Key, amount); + + // log warnings + if (amount < anyPopLeft) + emp.Log.Add(src.CreateLogMessage(src + " could transfer only " + amount.ToUnitString(true) + " of the desired " + kvp.Value.ToUnitString(true) + " general population to " + dest + " due to lack of population available or lack of storage space.", LogMessageType.Warning)); + + // no population to transfer + if (amount == 0) + continue; + } + } + + // clear population that was emptied out + foreach (var race in src.Cargo.Population.Where(kvp => kvp.Value <= 0).Select(kvp => kvp.Key).ToArray()) + src.Cargo.Population.Remove(race); + if (src is Planet) + { + var p = (Planet)src; + if (p.Colony != null) + { + foreach (var race in p.Colony.Population.Where(kvp => kvp.Value <= 0).Select(kvp => kvp.Key).ToArray()) + p.Colony.Population.Remove(race); + } + } + + // transfer specific units + foreach (var unit in delta.Units) + { + if (src.Cargo.Units.Contains(unit)) + TryTransferUnit(unit, src, dest, emp); + else + LogUnitTransferFailedNotPresent(unit, src, dest, emp); + } + + // transfer unit tonnage by design + foreach (var kvp in delta.UnitDesignTonnage) + { + int transferred = 0; + while (kvp.Value == null || transferred <= kvp.Value - kvp.Key.Hull.Size) + { + var unit = src.AllUnits.FirstOrDefault(u => u.Design == kvp.Key); + if (unit == null && kvp.Value != null) + { + // if it's not a "transfer all" order, we can log the lack of available units + if (kvp.Value != null) + LogUnitTransferFailed(kvp.Key, src, dest, transferred, kvp.Value.Value, emp); + + break; + } + if (dest.CargoStorageFree() < kvp.Key.Hull.Size) + { + LogUnitTransferFailedNoStorage(unit, src, dest, emp); + break; + } + if (transferred + kvp.Key.Hull.Size > kvp.Value) + break; // next unit would be too much + if (unit != null) + { + src.RemoveUnit(unit); + dest.AddUnit(unit); + transferred += kvp.Key.Hull.Size; + } + else + break; + } + } + + // transfer unit tonnage by role + foreach (var kvp in delta.UnitRoleTonnage) + { + int transferred = 0; + var available = src.AllUnits.Where(u => u.Design.Role == kvp.Key); + while (kvp.Value == null || transferred <= kvp.Value - available.MinOrDefault(u => u.Design.Hull.Size)) + { + if (!available.Any()) + { + // if it's not a "transfer all" order, we can log the lack of available units + if (kvp.Value != null) + LogUnitTransferFailed(kvp.Key, src, dest, transferred, kvp.Value.Value, emp); + + break; + } + var unit = available.FirstOrDefault(u => u.Design.Hull.Size <= dest.CargoStorageFree() && kvp.Value == null || u.Design.Hull.Size <= kvp.Value - transferred); + if (unit != null) + { + src.RemoveUnit(unit); + dest.AddUnit(unit); + available = src.AllUnits.Where(u => u.Design.Role == kvp.Key); + transferred += unit.Design.Hull.Size; + } + else + break; + } + } + + // transfer unit tonnage by hull type + foreach (var kvp in delta.UnitTypeTonnage) + { + int transferred = 0; + var available = src.AllUnits.Where(u => u.Design.VehicleType == kvp.Key); + while (kvp.Value == null || transferred <= kvp.Value - available.MinOrDefault(u => u.Design.Hull.Size)) + { + if (!available.Any()) + { + // if it's not a "transfer all" order, we can log the lack of available units + if (kvp.Value != null) + LogUnitTransferFailed(kvp.Key, src, dest, transferred, kvp.Value.Value, emp); + + break; + } + var unit = available.FirstOrDefault(u => u.Design.Hull.Size <= dest.CargoStorageFree() && kvp.Value == null || u.Design.Hull.Size <= kvp.Value - transferred); + if (unit != null) + { + src.RemoveUnit(unit); + dest.AddUnit(unit); + available = src.AllUnits.Where(u => u.Design.VehicleType == kvp.Key); + transferred += unit.Design.Hull.Size; + } + else + break; + } + } + } + + /// + /// Updates the memory sight cache of any empires that can see this object. + /// Only makes sense on the host view, so if this is called elsewhere, nothing happens. + /// + /// The object whose cache to update. + /// A message to display to any empire that can see this event happen. + /// Empires to which we don't need to send a message. + /// + public static void UpdateEmpireMemories(this T obj, string message = null, params Empire[] empiresToSkipMessage) + where T : IFoggable, IReferrable, IOwnable + { + if (Empire.Current == null) + { + foreach (var emp in Galaxy.Current.Empires) + { + var sys = (obj as ILocated)?.StarSystem; + if (obj.CheckVisibility(emp) >= Visibility.Visible) + { + emp.UpdateMemory(obj); + if (message != null && !empiresToSkipMessage.Contains(emp)) + emp.RecordLog(obj, message, LogMessageType.Generic); + } + } + } + } + + /// + /// Returns "us" if the empire is the current empire, otherwise "the " followed by the empire name. + /// + /// + /// + public static string UsOrName(this Empire emp, bool capitalize = false) + { + if (emp == Empire.Current) + return "us"; + return "the " + emp.Name; + } + + /// + /// Returns "We" if the empire is the current empire, otherwise "The " followed by the empire name. + /// + /// + /// + public static string WeOrName(this Empire emp, bool capitalize = true) + { + if (emp == Empire.Current) + return "We"; + return "The " + emp.Name; + } + + private static Expression CreateParam(ParameterExpression[] paramsOfDelegate, int i, ParameterInfo callParamType, Queue queueMissingParams) + { + if (i < paramsOfDelegate.Length) + return Expression.Convert(paramsOfDelegate[i], callParamType.ParameterType); + + if (queueMissingParams.Count > 0) + return Expression.Constant(queueMissingParams.Dequeue()); + + if (callParamType.ParameterType.IsValueType) + return Expression.Constant(Activator.CreateInstance(callParamType.ParameterType)); + + return Expression.Constant(null); + } + + private static T GetDefaultGeneric() + { + return default(T); + } + + private static void LogUnitTransferFailed(IDesign design, ICargoContainer src, ICargoContainer dest, int actualTonnage, int desiredTonnage, Empire emp) + { + emp.Log.Add(src.CreateLogMessage("Only " + actualTonnage.Kilotons() + " of " + desiredTonnage.Kilotons() + " worth of " + design + " class " + design.VehicleTypeName + "s could be transferred from " + src + " to " + dest + " because there are not enough in " + src + "'s cargo or " + dest + "'s cargo is full.", LogMessageType.Warning)); + } + + private static void LogUnitTransferFailed(string role, ICargoContainer src, ICargoContainer dest, int actualTonnage, int desiredTonnage, Empire emp) + { + emp.Log.Add(src.CreateLogMessage("Only " + actualTonnage.Kilotons() + " of " + desiredTonnage.Kilotons() + " worth of " + role + " units could be transferred from " + src + " to " + dest + " because there are not enough in " + src + "'s cargo or " + dest + "'s cargo is full.", LogMessageType.Warning)); + } + + private static void LogUnitTransferFailed(VehicleTypes vt, ICargoContainer src, ICargoContainer dest, int actualTonnage, int desiredTonnage, Empire emp) + { + emp.Log.Add(src.CreateLogMessage("Only " + actualTonnage.Kilotons() + " of " + desiredTonnage.Kilotons() + " worth of " + vt.ToSpacedString().ToLower() + "s could be transferred from " + src + " to " + dest + " because there are not enough in " + src + "'s cargo or " + dest + "'s cargo is full.", LogMessageType.Warning)); + } + + private static void LogUnitTransferFailedHostile(IUnit unit, ICargoContainer src, ICargoContainer dest, Empire emp) + { + emp.Log.Add(src.CreateLogMessage(unit + " could not be transferred from " + src + " to " + dest + " because " + unit + " is hostile.", LogMessageType.Warning)); + } + + private static void LogUnitTransferFailedNoStorage(IUnit unit, ICargoContainer src, ICargoContainer dest, Empire emp) + { + emp.Log.Add(src.CreateLogMessage(unit + " could not be transferred from " + src + " to " + dest + " because " + dest + "'s cargo is full.", LogMessageType.Warning)); + } + + private static void LogUnitTransferFailedNotPresent(IUnit unit, ICargoContainer src, ICargoContainer dest, Empire emp) + { + emp.Log.Add(src.CreateLogMessage(unit + " could not be transferred from " + src + " to " + dest + " because it is not in " + src + "'s cargo.", LogMessageType.Warning)); + } + + private static void TryTransferUnit(IUnit unit, ICargoContainer src, ICargoContainer dest, Empire emp) + { + if (unit.IsHostileTo(emp)) + LogUnitTransferFailedHostile(unit, src, dest, emp); + if (dest.CargoStorageFree() >= unit.Design.Hull.Size) + { + src.RemoveUnit(unit); + dest.AddUnit(unit); + } + else + LogUnitTransferFailedNoStorage(unit, src, dest, emp); + } + + /*// based on http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/ + private static IMappingExpression IgnoreReadOnlyAndNonSerializableProperties(this IMappingExpression expression) + { + var type = typeof(T); + var existingMaps = Mapper.GetAllTypeMaps().First(x => x.SourceType.IsAssignableFrom(type) + && x.DestinationType.IsAssignableFrom(type)); + foreach (var property in existingMaps.GetPropertyMaps().Where(pm => + { + var prop = (PropertyInfo)pm.DestinationProperty.MemberInfo; + var realprop = prop.DeclaringType.GetProperty(prop.Name); + return realprop.GetSetMethod(true) == null || realprop.GetCustomAttributes(true).OfType().Any(); + })) + expression.ForMember(property.DestinationProperty.Name, opt => opt.Ignore()); + return expression; + } + + private static IMappingExpression IgnoreIDProperty(this IMappingExpression expression) + where T : IReferrable + { + var type = typeof(T); + var existingMaps = Mapper.GetAllTypeMaps().First(x => x.SourceType.Equals(type) + && x.DestinationType.Equals(type)); + foreach (var property in existingMaps.GetPropertyMaps().Where(pm => ((PropertyInfo)pm.DestinationProperty.MemberInfo).Name == "ID")) + expression.ForMember(property.DestinationProperty.Name, opt => opt.Ignore()); + return expression; + }*/ + /*/// + /// XXX don't use this function, it seems to skip some of the tasks + /// + /// The ops. + public static void RunTasks(this IEnumerable ops) + { + // http://stackoverflow.com/a/19193473/1159763 + // for some reason we can't just say ops.SpawnTasksAsync().Wait() as this causes a hang + var runSync = Task.Factory.StartNew(new Func(async () => + { + await ops.SpawnTasksAsync(); + })).Unwrap(); + runSync.Wait(); + } + + /// + /// XXX don't use this function, it seems to skip some of the tasks + /// + /// The type of the in. + /// The objs. + /// The op. + public static void RunTasks(this IEnumerable objs, Action op) + { + // http://stackoverflow.com/a/19193473/1159763 + // for some reason we can't just say objs.SpawnTasksAsync(op).Wait() as this causes a hang + var runSync = Task.Factory.StartNew(new Func(async () => + { + await objs.SpawnTasksAsync(op); + })).Unwrap(); + runSync.Wait(); + }*/ + + public static void RecordLog(this T t, string text, LogMessageType logMessageType) where T : IOwnable + { + t.Owner.RecordLog(t, text, logMessageType); + } + } + + public enum IDCopyBehavior + { + PreserveSource, + PreserveDestination, + Regenerate + } +} diff --git a/FrEee/Utility/Extensions/ComparisonExtensions.cs b/FrEee/Extensions/ComparisonExtensions.cs similarity index 94% rename from FrEee/Utility/Extensions/ComparisonExtensions.cs rename to FrEee/Extensions/ComparisonExtensions.cs index ece79bd36..6c6e415a9 100644 --- a/FrEee/Utility/Extensions/ComparisonExtensions.cs +++ b/FrEee/Extensions/ComparisonExtensions.cs @@ -1,102 +1,102 @@ -using FrEee.Game.Objects.Space; -using FrEee.Modding.Interfaces; -using System; -using System.Globalization; - -namespace FrEee.Utility.Extensions -{ - public static class ComparisonExtensions - { - /// - /// Determines if a string can be parsed as an boolean. - /// - /// - /// - public static bool IsBool(this string s) - { - bool b; - return bool.TryParse(s, out b); - } - - /// - /// Determines if a string can be parsed as an boolean. - /// - /// - /// - public static bool IsBool(this IFormula f) - { - return f.Value.ToString().IsBool(); - } - - /// - /// Determines if a string can be parsed as a double. - /// - /// - /// The LCID of the culture used to parse. Defaults to 127, which represents the invariant culture. - /// - public static bool IsDouble(this string s, int cultureCode = 127) - { - double d; - return double.TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.GetCultureInfo(cultureCode), out d); - } - - /// - /// Determines if a string can be parsed as a double. - /// - /// - /// The LCID of the culture used to parse. Defaults to 127, which represents the invariant culture. - /// - public static bool IsDouble(this IFormula f, int cultureCode = 127) - { - // TODO - object.ToString() doesn't seem to take a culture code... - return f.Value.ToString().IsDouble(cultureCode); - } - - /// - /// Determines if a string can be parsed as an integer. - /// - /// - /// - public static bool IsInt(this string s) - { - int i; - return int.TryParse(s, out i); - } - - /// - /// Determines if a formula can be parsed as an integer. - /// - /// - /// - public static bool IsInt(this IFormula f) - { - return f.Value.ToString().IsInt(); - } - - /// - /// Tests if an object is null. - /// Useful for writing == operators that don't infinitely recurse. - /// - /// - /// - public static bool IsNull(this object o) - { - return o == null; - } - - /// - /// Gets a description of an object's timestamp as a memory age. - /// - /// The timestamp. - /// The description. - public static string GetMemoryAgeDescription(this double timestamp) - { - if (timestamp == Galaxy.Current.Timestamp) - return "Current"; - else if (Galaxy.Current.Timestamp - timestamp <= 1) - return "Memory from last turn"; - else - return $"Memory from {Math.Ceiling(Galaxy.Current.Timestamp - timestamp)} turns ago"; - } - } +using FrEee.Objects.Space; +using FrEee.Modding.Interfaces; +using System; +using System.Globalization; + +namespace FrEee.Extensions +{ + public static class ComparisonExtensions + { + /// + /// Determines if a string can be parsed as an boolean. + /// + /// + /// + public static bool IsBool(this string s) + { + bool b; + return bool.TryParse(s, out b); + } + + /// + /// Determines if a string can be parsed as an boolean. + /// + /// + /// + public static bool IsBool(this IFormula f) + { + return f.Value.ToString().IsBool(); + } + + /// + /// Determines if a string can be parsed as a double. + /// + /// + /// The LCID of the culture used to parse. Defaults to 127, which represents the invariant culture. + /// + public static bool IsDouble(this string s, int cultureCode = 127) + { + double d; + return double.TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.GetCultureInfo(cultureCode), out d); + } + + /// + /// Determines if a string can be parsed as a double. + /// + /// + /// The LCID of the culture used to parse. Defaults to 127, which represents the invariant culture. + /// + public static bool IsDouble(this IFormula f, int cultureCode = 127) + { + // TODO - object.ToString() doesn't seem to take a culture code... + return f.Value.ToString().IsDouble(cultureCode); + } + + /// + /// Determines if a string can be parsed as an integer. + /// + /// + /// + public static bool IsInt(this string s) + { + int i; + return int.TryParse(s, out i); + } + + /// + /// Determines if a formula can be parsed as an integer. + /// + /// + /// + public static bool IsInt(this IFormula f) + { + return f.Value.ToString().IsInt(); + } + + /// + /// Tests if an object is null. + /// Useful for writing == operators that don't infinitely recurse. + /// + /// + /// + public static bool IsNull(this object o) + { + return o == null; + } + + /// + /// Gets a description of an object's timestamp as a memory age. + /// + /// The timestamp. + /// The description. + public static string GetMemoryAgeDescription(this double timestamp) + { + if (timestamp == Galaxy.Current.Timestamp) + return "Current"; + else if (Galaxy.Current.Timestamp - timestamp <= 1) + return "Memory from last turn"; + else + return $"Memory from {Math.Ceiling(Galaxy.Current.Timestamp - timestamp)} turns ago"; + } + } } \ No newline at end of file diff --git a/FrEee/Utility/Extensions/ConversionExtensions.cs b/FrEee/Extensions/ConversionExtensions.cs similarity index 95% rename from FrEee/Utility/Extensions/ConversionExtensions.cs rename to FrEee/Extensions/ConversionExtensions.cs index 03dd1ba1d..8a1f29d6b 100644 --- a/FrEee/Utility/Extensions/ConversionExtensions.cs +++ b/FrEee/Extensions/ConversionExtensions.cs @@ -1,190 +1,191 @@ -using FrEee.Modding.Interfaces; -using System; -using System.Drawing; -using System.Globalization; -using System.Text; - -namespace FrEee.Utility.Extensions -{ - public static class ConversionExtensions - { - /// - /// Computes the angle from one point to the other. - /// Zero degrees is east, and positive is counterclockwise. - /// - /// - /// - /// - public static double AngleTo(this Point p, Point target) - { - return Math.Atan2(target.Y - p.Y, target.X - p.X) * 180d / Math.PI; - } - - /// - /// Computes the angle from one point to the other. - /// Zero degrees is north, and positive is clockwise. - /// - /// - /// - /// - public static double AngleTo(this PointF p, PointF target) - { - return Math.Atan2(target.Y - p.Y, target.X - p.X) * 180d / Math.PI; - } - - /// - /// Casts an object to a type. Throws an exception if the type is wrong. - /// - /// - /// - /// - public static T CastTo(this object o, T defaultValue = default(T)) - { - return (T)((o ?? defaultValue) ?? default(T)); - } - - /// - /// Parses a string as a boolean. Returns false if it could not be parsed. - /// - /// - /// - public static bool ToBool(this string s) - { - bool b; - bool.TryParse(s, out b); - return b; - } - - /// - /// Parses a string as a boolean. Returns false if it could not be parsed. - /// - /// - /// - public static bool ToBool(this IFormula f) - { - return f.Value.ToString().ToBool(); - } - - /// - /// Parses a string as a double. Returns 0 if it could not be parsed. - /// - /// - /// The LCID of the culture used to parse. Defaults to 127, which represents the invariant culture. - /// - public static double ToDouble(this string s, int cultureCode = 127) - { - double d; - double.TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.GetCultureInfo(cultureCode), out d); - return d; - } - - /// - /// Parses a string as a double. Returns 0 if it could not be parsed. - /// - /// - /// The LCID of the culture used to parse. Defaults to 127, which represents the invariant culture. - /// - public static double ToDouble(this IFormula f, int cultureCode = 127) - { - // TODO - object.ToString() doesn't seem to take a culture code... - return f.Value.ToString().ToDouble(cultureCode); - } - - /// - /// Parses a string as an integer. Returns 0 if it could not be parsed. - /// - /// - /// - public static int ToInt(this string s) - { - int i; - int.TryParse(s, out i); - return i; - } - - /// - /// Parses a string as an integer. Returns 0 if it could not be parsed. - /// - /// - /// - public static int ToInt(this IFormula f) - { - return f.Value.ToString().ToInt(); - } - - /// - /// Gets a capital letter from the English alphabet. - /// - /// 1 to 26 - /// A to Z - /// if i is not from 1 to 26 - public static char ToLetter(this int i) - { - if (i < 1 || i > 26) - throw new ArgumentException("Only 26 letters in the alphabet, can't get letter #" + i + ".", "i"); - return (char)('A' + i - 1); - } - - public static int? ToNullableInt(this long? l) - { - if (l == null) - return null; - return (int)l.Value; - } - - public static long? ToNullableLong(this int? i) - { - if (i == null) - return null; - return (long)i.Value; - } - - public static Point ToPoint(this Vector2 v) - { - return new Point(v.X, v.Y); - } - - public static string ToSafeString(this object o) - { - if (o == null) - return null; - return o.ToString(); - } - - /// - /// Converts an object to a string with spaces between camelCased words. - /// - /// - /// - public static string ToSpacedString(this object o) - { - var sb = new StringBuilder(); - bool wasSpace = true; - foreach (var c in o.ToString()) - { - if (!wasSpace && (char.IsUpper(c) || char.IsNumber(c))) - sb.Append(" "); - sb.Append(c); - wasSpace = char.IsWhiteSpace(c); - } - return sb.ToString(); - } - - public static string ToString(this double? d, string fmt) - { - if (d == null) - return ""; - return d.Value.ToString(fmt); - } - - /// - /// Converts to a string using the invariant culture. - /// - /// - /// - public static string ToStringInvariant(this IConvertible c) - { - return (string)Convert.ChangeType(c, typeof(string), CultureInfo.InvariantCulture); - } - } -} \ No newline at end of file +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Drawing; +using System.Globalization; +using System.Text; + +namespace FrEee.Extensions +{ + public static class ConversionExtensions + { + /// + /// Computes the angle from one point to the other. + /// Zero degrees is east, and positive is counterclockwise. + /// + /// + /// + /// + public static double AngleTo(this Point p, Point target) + { + return Math.Atan2(target.Y - p.Y, target.X - p.X) * 180d / Math.PI; + } + + /// + /// Computes the angle from one point to the other. + /// Zero degrees is north, and positive is clockwise. + /// + /// + /// + /// + public static double AngleTo(this PointF p, PointF target) + { + return Math.Atan2(target.Y - p.Y, target.X - p.X) * 180d / Math.PI; + } + + /// + /// Casts an object to a type. Throws an exception if the type is wrong. + /// + /// + /// + /// + public static T CastTo(this object o, T defaultValue = default(T)) + { + return (T)((o ?? defaultValue) ?? default(T)); + } + + /// + /// Parses a string as a boolean. Returns false if it could not be parsed. + /// + /// + /// + public static bool ToBool(this string s) + { + bool b; + bool.TryParse(s, out b); + return b; + } + + /// + /// Parses a string as a boolean. Returns false if it could not be parsed. + /// + /// + /// + public static bool ToBool(this IFormula f) + { + return f.Value.ToString().ToBool(); + } + + /// + /// Parses a string as a double. Returns 0 if it could not be parsed. + /// + /// + /// The LCID of the culture used to parse. Defaults to 127, which represents the invariant culture. + /// + public static double ToDouble(this string s, int cultureCode = 127) + { + double d; + double.TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, CultureInfo.GetCultureInfo(cultureCode), out d); + return d; + } + + /// + /// Parses a string as a double. Returns 0 if it could not be parsed. + /// + /// + /// The LCID of the culture used to parse. Defaults to 127, which represents the invariant culture. + /// + public static double ToDouble(this IFormula f, int cultureCode = 127) + { + // TODO - object.ToString() doesn't seem to take a culture code... + return f.Value.ToString().ToDouble(cultureCode); + } + + /// + /// Parses a string as an integer. Returns 0 if it could not be parsed. + /// + /// + /// + public static int ToInt(this string s) + { + int i; + int.TryParse(s, out i); + return i; + } + + /// + /// Parses a string as an integer. Returns 0 if it could not be parsed. + /// + /// + /// + public static int ToInt(this IFormula f) + { + return f.Value.ToString().ToInt(); + } + + /// + /// Gets a capital letter from the English alphabet. + /// + /// 1 to 26 + /// A to Z + /// if i is not from 1 to 26 + public static char ToLetter(this int i) + { + if (i < 1 || i > 26) + throw new ArgumentException("Only 26 letters in the alphabet, can't get letter #" + i + ".", "i"); + return (char)('A' + i - 1); + } + + public static int? ToNullableInt(this long? l) + { + if (l == null) + return null; + return (int)l.Value; + } + + public static long? ToNullableLong(this int? i) + { + if (i == null) + return null; + return (long)i.Value; + } + + public static Point ToPoint(this Vector2 v) + { + return new Point(v.X, v.Y); + } + + public static string ToSafeString(this object o) + { + if (o == null) + return null; + return o.ToString(); + } + + /// + /// Converts an object to a string with spaces between camelCased words. + /// + /// + /// + public static string ToSpacedString(this object o) + { + var sb = new StringBuilder(); + bool wasSpace = true; + foreach (var c in o.ToString()) + { + if (!wasSpace && (char.IsUpper(c) || char.IsNumber(c))) + sb.Append(" "); + sb.Append(c); + wasSpace = char.IsWhiteSpace(c); + } + return sb.ToString(); + } + + public static string ToString(this double? d, string fmt) + { + if (d == null) + return ""; + return d.Value.ToString(fmt); + } + + /// + /// Converts to a string using the invariant culture. + /// + /// + /// + public static string ToStringInvariant(this IConvertible c) + { + return (string)Convert.ChangeType(c, typeof(string), CultureInfo.InvariantCulture); + } + } +} diff --git a/FrEee/Utility/Extensions/CopyingExtensions.cs b/FrEee/Extensions/CopyingExtensions.cs similarity index 96% rename from FrEee/Utility/Extensions/CopyingExtensions.cs rename to FrEee/Extensions/CopyingExtensions.cs index 8b0ed3866..fa03f43be 100644 --- a/FrEee/Utility/Extensions/CopyingExtensions.cs +++ b/FrEee/Extensions/CopyingExtensions.cs @@ -1,309 +1,311 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Technology; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Reflection; - -namespace FrEee.Utility.Extensions -{ - /// - /// Extension methods to copy objects. - /// - public static class CopyingExtensions - { - /// - /// Checks for "do not copy" attribute, even on interface properties. - /// Returns true if there is no such attribute. - /// - /// - /// - public static bool CanCopyFully(this PropertyInfo p) - { - if (p.HasAttribute() || p.PropertyType.HasAttribute()) - return false; - foreach (var i in p.DeclaringType.GetInterfaces()) - { - var ip = i.GetProperty(p.Name); - if (ip != null && ip.GetCustomAttributes(true).OfType().Any()) - return false; - } - return true; - } - - /// - /// Checks for "do not copy" attribute, even on interface properties. - /// Returns true if there is no such attribute, or the attribute is present but the safe-copy flag is set. - /// Safe copying means copying a reference but not deep copying. - /// - /// - /// - public static bool CanCopySafely(this PropertyInfo p) - { - if (p.GetCustomAttributes(true).OfType().Union(p.PropertyType.GetCustomAttributes(true).OfType()).Any(a => !a.AllowSafeCopy)) - return false; - foreach (var i in p.DeclaringType.GetInterfaces()) - { - var ip = i.GetProperty(p.Name); - if (ip != null && ip.GetCustomAttributes(true).OfType().Any(a => !a.AllowSafeCopy)) - return false; - } - return true; - } - - /// - /// Copies an object. - /// - /// The type of object to copy. - /// The object to copy. - /// The copy. - public static T Copy(this T obj) - { - if (obj == null) - return default(T); - var dest = obj.GetType().Instantiate(); - var copier = new OnlySafePropertiesCopier(obj, true, IDCopyBehavior.PreserveSource, IDCopyBehavior.PreserveSource); - copier.Copy(obj, dest); - return (T)dest; - } - - /// - /// Copies an object and assigns the copy a new ID. - /// Subordinate objects are assigned new IDs too. - /// - /// - /// - /// - public static T CopyAndAssignNewID(this T obj) - { - if (obj == null) - return default(T); - var dest = obj.GetType().Instantiate(); - var copier = new OnlySafePropertiesCopier(obj, true, IDCopyBehavior.Regenerate, IDCopyBehavior.Regenerate); - copier.Copy(obj, dest); - return (T)dest; - } - - /// - /// Copies an object's data to another object. - /// - /// The type of object to copy. - /// The object to copy. - /// The object to copy the source object's data to. - public static void CopyTo(this object src, object dest, IDCopyBehavior rootBehavior = IDCopyBehavior.PreserveSource, IDCopyBehavior subordinateBehavior = IDCopyBehavior.PreserveSource) - { - if (src.GetType() != dest.GetType()) - throw new Exception("Can only copy objects onto objects of the same type."); - var copier = new OnlySafePropertiesCopier(src, true, rootBehavior, subordinateBehavior); - copier.Copy(src, dest); - } - - /// - /// Copies an object's data to another object. Skips the ID property. - /// - /// The type of object to copy. - /// The object to copy. - /// The object to copy the source object's data to. - public static void CopyToExceptID(this IReferrable src, IReferrable dest, IDCopyBehavior subordinateBehavior) - { - src.CopyTo(dest, IDCopyBehavior.PreserveDestination, subordinateBehavior); - } - - private class OnlySafePropertiesCopier - { - public OnlySafePropertiesCopier(object root, bool deep, IDCopyBehavior rootBehavior, IDCopyBehavior subordinateBehavior, IDictionary known = null) - { - Root = root; - DeepCopy = deep; - RootBehavior = rootBehavior; - SubordinateBehavior = subordinateBehavior; - - if (known != null) - { - foreach (var kvp in known) - knownObjects.Add(kvp); - } - } - - public bool DeepCopy { get; private set; } - public object Root { get; private set; } - public IDCopyBehavior RootBehavior { get; private set; } - public IDCopyBehavior SubordinateBehavior { get; private set; } - private SafeDictionary knownObjects = new SafeDictionary(); - - public void Copy(object source, object target) - { - if (!knownObjects.ContainsKey(source)) - knownObjects.Add(source, target); - foreach (var sp in source.GetType().GetProperties( - BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) - .Where(p => p.GetGetMethod(true) != null && p.GetIndexParameters().Count() == 0) - .OrderBy(p => p.HasAttribute() ? p.GetCustomAttribute().Priority : int.MaxValue)) - { - var tp = target.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Where(p => p.GetSetMethod(true) != null && p.GetIndexParameters().Count() == 0 && p.Name == sp.Name).SingleOrDefault(); - if (tp != null) - { - if (Match(sp, tp)) - { - bool doit = true; - bool regen = false; - if ( source is Component && ((Component)source).Hitpoints == 0) { } - if (source is IReferrable && sp.Name == "ID") - { - // do special things for IDs - var behavior = source == Root ? RootBehavior : SubordinateBehavior; - if (behavior == IDCopyBehavior.PreserveSource) - doit = true; - else if (behavior == IDCopyBehavior.PreserveDestination) - doit = false; - else if (behavior == IDCopyBehavior.Regenerate) - { - doit = false; - regen = true; - } - } - - object sv = null; - - if (doit && CanCopyFully(sp) && DeepCopy) - { - sv = sp.GetValue(source, null); - if (sv == null) - sp.SetValue(target, null, null); // it's null, very simple - else if (!knownObjects.ContainsKey(sv)) - { - // copy object and use the copy - var tv = CopyObject(source, sv); - sp.SetValue(target, tv, null); - } - else - sp.SetValue(target, knownObjects[sv], null); // known object, don't bother copying again - } - else if (doit && CanCopySafely(sp)) - { - sv = sp.GetValue(source, null); - if (knownObjects.ContainsKey(sv)) - { - sp.SetValue(target, knownObjects[sv]); // use known copy - } - else - sp.SetValue(target, sv, null); // use original object - } - - if (regen) - { - // reassign ID - var r = target as IReferrable; - if (r.HasValidID()) - r.ReassignID(); - } - } - } - } - if (target is ICleanable) - (target as ICleanable).Clean(); - } - - // TODO: determine if all this logic is necessary - private bool Match(PropertyInfo source, PropertyInfo target) - => - source.Name == target.Name && - source.DeclaringType!.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Any(p => PropertyMatches(p, target.Name)) && - target.DeclaringType!.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Any(p => PropertyMatches(p, target.Name)); - - private object CopyObject(object parent, object sv) - { - if (sv == null) - return null; - if (knownObjects.ContainsKey(sv)) - return knownObjects[sv]; - var type = sv.GetType(); - - if (sv.GetType().IsValueType || sv is string) - return sv; - else if (sv.GetType().IsArray) - { - // do sub object mapping - var sa = (Array)sv; - Array ta = (Array)sa.Clone(); - Array.Clear(ta, 0, ta.Length); // no references to original objects! - for (var i = 0; i < ta.Length; i++) - { - var sitem = sa.Cast().ElementAt(i); - if (sitem != null) - { - var titem = CopyObject(sv, sitem); - if (ta.Rank == 1) - ta.SetValue(titem, i); - else if (ta.Rank == 2) - { - var width = ta.GetLength(0); - ta.SetValue(titem, i / width, i % width); - } - else - throw new InvalidOperationException("Arrays with more than 2 dimensions are not supported."); - } - } - return ta; - } - else if (typeof(IEnumerable).IsAssignableFrom(type)) - { - var sc = (IEnumerable)sv; - var tc = sv.GetType().Instantiate(); - if (type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 1).Any()) - { - // collection - var adder = type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 1).Single(); - foreach (var si in sc) - { - // copy object and add to collection - var ti = CopyObject(sv, si); - adder.Invoke(tc, new object[] { ti }); - } - } - else if (type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 2).Any()) - { - // dictionary - var adder = type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 2).Single(); - foreach (var skvp in sc) - { - // copy key-value pair and add to collection - var sk = skvp.GetPropertyValue("Key"); - var skv = skvp.GetPropertyValue("Value"); - var tk = CopyObject(sv, sk); - var tkv = CopyObject(sv, skv); - adder.Invoke(tc, new object[] { tk, tkv }); - } - } - else - { - throw new ArgumentException("Unknown enumerable type " + type + "; must be string/array/collection/dictionary."); - } - return tc; - } - else - { - // do sub object mapping - var tv = sv.GetType().Instantiate(); - if (!knownObjects.ContainsKey(sv)) - knownObjects.Add(sv, tv); - // TODO: determine if the default ID copying behaviors are appropriate here - sv.CopyTo(tv); - //knownObjects.Remove(parent); - return tv; - } - } - - private bool PropertyMatches(PropertyInfo p, string name) - { - return - p.Name == name // it's the right property - && p.GetSetMethod(true) != null // has a getter, whether public or private - && p.GetSetMethod(true) != null // has a setter, whether public or private - && p.GetIndexParameters().Length == 0; // lacks index parameters - } - } - } -} +using FrEee.Interfaces; +using FrEee.Objects.Technology; +using FrEee.Serialization; +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Reflection; + +namespace FrEee.Extensions +{ + /// + /// Extension methods to copy objects. + /// + public static class CopyingExtensions + { + /// + /// Checks for "do not copy" attribute, even on interface properties. + /// Returns true if there is no such attribute. + /// + /// + /// + public static bool CanCopyFully(this PropertyInfo p) + { + if (p.HasAttribute() || p.PropertyType.HasAttribute()) + return false; + foreach (var i in p.DeclaringType.GetInterfaces()) + { + var ip = i.GetProperty(p.Name); + if (ip != null && ip.GetCustomAttributes(true).OfType().Any()) + return false; + } + return true; + } + + /// + /// Checks for "do not copy" attribute, even on interface properties. + /// Returns true if there is no such attribute, or the attribute is present but the safe-copy flag is set. + /// Safe copying means copying a reference but not deep copying. + /// + /// + /// + public static bool CanCopySafely(this PropertyInfo p) + { + if (p.GetCustomAttributes(true).OfType().Union(p.PropertyType.GetCustomAttributes(true).OfType()).Any(a => !a.AllowSafeCopy)) + return false; + foreach (var i in p.DeclaringType.GetInterfaces()) + { + var ip = i.GetProperty(p.Name); + if (ip != null && ip.GetCustomAttributes(true).OfType().Any(a => !a.AllowSafeCopy)) + return false; + } + return true; + } + + /// + /// Copies an object. + /// + /// The type of object to copy. + /// The object to copy. + /// The copy. + public static T Copy(this T obj) + { + if (obj == null) + return default(T); + var dest = obj.GetType().Instantiate(); + var copier = new OnlySafePropertiesCopier(obj, true, IDCopyBehavior.PreserveSource, IDCopyBehavior.PreserveSource); + copier.Copy(obj, dest); + return (T)dest; + } + + /// + /// Copies an object and assigns the copy a new ID. + /// Subordinate objects are assigned new IDs too. + /// + /// + /// + /// + public static T CopyAndAssignNewID(this T obj) + { + if (obj == null) + return default(T); + var dest = obj.GetType().Instantiate(); + var copier = new OnlySafePropertiesCopier(obj, true, IDCopyBehavior.Regenerate, IDCopyBehavior.Regenerate); + copier.Copy(obj, dest); + return (T)dest; + } + + /// + /// Copies an object's data to another object. + /// + /// The type of object to copy. + /// The object to copy. + /// The object to copy the source object's data to. + public static void CopyTo(this object src, object dest, IDCopyBehavior rootBehavior = IDCopyBehavior.PreserveSource, IDCopyBehavior subordinateBehavior = IDCopyBehavior.PreserveSource) + { + if (src.GetType() != dest.GetType()) + throw new Exception("Can only copy objects onto objects of the same type."); + var copier = new OnlySafePropertiesCopier(src, true, rootBehavior, subordinateBehavior); + copier.Copy(src, dest); + } + + /// + /// Copies an object's data to another object. Skips the ID property. + /// + /// The type of object to copy. + /// The object to copy. + /// The object to copy the source object's data to. + public static void CopyToExceptID(this IReferrable src, IReferrable dest, IDCopyBehavior subordinateBehavior) + { + src.CopyTo(dest, IDCopyBehavior.PreserveDestination, subordinateBehavior); + } + + private class OnlySafePropertiesCopier + { + public OnlySafePropertiesCopier(object root, bool deep, IDCopyBehavior rootBehavior, IDCopyBehavior subordinateBehavior, IDictionary known = null) + { + Root = root; + DeepCopy = deep; + RootBehavior = rootBehavior; + SubordinateBehavior = subordinateBehavior; + + if (known != null) + { + foreach (var kvp in known) + knownObjects.Add(kvp); + } + } + + public bool DeepCopy { get; private set; } + public object Root { get; private set; } + public IDCopyBehavior RootBehavior { get; private set; } + public IDCopyBehavior SubordinateBehavior { get; private set; } + private SafeDictionary knownObjects = new SafeDictionary(); + + public void Copy(object source, object target) + { + if (!knownObjects.ContainsKey(source)) + knownObjects.Add(source, target); + foreach (var sp in source.GetType().GetProperties( + BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) + .Where(p => p.GetGetMethod(true) != null && p.GetIndexParameters().Count() == 0) + .OrderBy(p => p.HasAttribute() ? p.GetCustomAttribute().Priority : int.MaxValue)) + { + var tp = target.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Where(p => p.GetSetMethod(true) != null && p.GetIndexParameters().Count() == 0 && p.Name == sp.Name).SingleOrDefault(); + if (tp != null) + { + if (Match(sp, tp)) + { + bool doit = true; + bool regen = false; + if ( source is Component && ((Component)source).Hitpoints == 0) { } + if (source is IReferrable && sp.Name == "ID") + { + // do special things for IDs + var behavior = source == Root ? RootBehavior : SubordinateBehavior; + if (behavior == IDCopyBehavior.PreserveSource) + doit = true; + else if (behavior == IDCopyBehavior.PreserveDestination) + doit = false; + else if (behavior == IDCopyBehavior.Regenerate) + { + doit = false; + regen = true; + } + } + + object sv = null; + + if (doit && CanCopyFully(sp) && DeepCopy) + { + sv = sp.GetValue(source, null); + if (sv == null) + sp.SetValue(target, null, null); // it's null, very simple + else if (!knownObjects.ContainsKey(sv)) + { + // copy object and use the copy + var tv = CopyObject(source, sv); + sp.SetValue(target, tv, null); + } + else + sp.SetValue(target, knownObjects[sv], null); // known object, don't bother copying again + } + else if (doit && CanCopySafely(sp)) + { + sv = sp.GetValue(source, null); + if (knownObjects.ContainsKey(sv)) + { + sp.SetValue(target, knownObjects[sv]); // use known copy + } + else + sp.SetValue(target, sv, null); // use original object + } + + if (regen) + { + // reassign ID + var r = target as IReferrable; + if (r.HasValidID()) + r.ReassignID(); + } + } + } + } + if (target is ICleanable) + (target as ICleanable).Clean(); + } + + // TODO: determine if all this logic is necessary + private bool Match(PropertyInfo source, PropertyInfo target) + => + source.Name == target.Name && + source.DeclaringType!.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Any(p => PropertyMatches(p, target.Name)) && + target.DeclaringType!.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Any(p => PropertyMatches(p, target.Name)); + + private object CopyObject(object parent, object sv) + { + if (sv == null) + return null; + if (knownObjects.ContainsKey(sv)) + return knownObjects[sv]; + var type = sv.GetType(); + + if (sv.GetType().IsValueType || sv is string) + return sv; + else if (sv.GetType().IsArray) + { + // do sub object mapping + var sa = (Array)sv; + Array ta = (Array)sa.Clone(); + Array.Clear(ta, 0, ta.Length); // no references to original objects! + for (var i = 0; i < ta.Length; i++) + { + var sitem = sa.Cast().ElementAt(i); + if (sitem != null) + { + var titem = CopyObject(sv, sitem); + if (ta.Rank == 1) + ta.SetValue(titem, i); + else if (ta.Rank == 2) + { + var width = ta.GetLength(0); + ta.SetValue(titem, i / width, i % width); + } + else + throw new InvalidOperationException("Arrays with more than 2 dimensions are not supported."); + } + } + return ta; + } + else if (typeof(IEnumerable).IsAssignableFrom(type)) + { + var sc = (IEnumerable)sv; + var tc = sv.GetType().Instantiate(); + if (type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 1).Any()) + { + // collection + var adder = type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 1).Single(); + foreach (var si in sc) + { + // copy object and add to collection + var ti = CopyObject(sv, si); + adder.Invoke(tc, new object[] { ti }); + } + } + else if (type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 2).Any()) + { + // dictionary + var adder = type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 2).Single(); + foreach (var skvp in sc) + { + // copy key-value pair and add to collection + var sk = skvp.GetPropertyValue("Key"); + var skv = skvp.GetPropertyValue("Value"); + var tk = CopyObject(sv, sk); + var tkv = CopyObject(sv, skv); + adder.Invoke(tc, new object[] { tk, tkv }); + } + } + else + { + throw new ArgumentException("Unknown enumerable type " + type + "; must be string/array/collection/dictionary."); + } + return tc; + } + else + { + // do sub object mapping + var tv = sv.GetType().Instantiate(); + if (!knownObjects.ContainsKey(sv)) + knownObjects.Add(sv, tv); + // TODO: determine if the default ID copying behaviors are appropriate here + sv.CopyTo(tv); + //knownObjects.Remove(parent); + return tv; + } + } + + private bool PropertyMatches(PropertyInfo p, string name) + { + return + p.Name == name // it's the right property + && p.GetSetMethod(true) != null // has a getter, whether public or private + && p.GetSetMethod(true) != null // has a setter, whether public or private + && p.GetIndexParameters().Length == 0; // lacks index parameters + } + } + } +} diff --git a/FrEee/Utility/Extensions/EnumerableExtensions.cs b/FrEee/Extensions/EnumerableExtensions.cs similarity index 96% rename from FrEee/Utility/Extensions/EnumerableExtensions.cs rename to FrEee/Extensions/EnumerableExtensions.cs index 05b912eb6..4c875a2bd 100644 --- a/FrEee/Utility/Extensions/EnumerableExtensions.cs +++ b/FrEee/Extensions/EnumerableExtensions.cs @@ -1,355 +1,356 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace FrEee.Utility.Extensions -{ - /// - /// All extensions dealing strictly with generic enumerables. - /// - public static class EnumerableExtensions - { - public static IEnumerable ConcatSingle(this T t1, T t2) - { - return t1.SingleItem().Append(t2); - } - - public static IEnumerable ExceptSingle(this IEnumerable src, T badguy) - { - return src.Except(new T[] { badguy }); - } - - /// - /// Flattens groupings into a single sequence. - /// - /// - /// - /// - /// - public static IEnumerable Flatten(this IEnumerable> lookup) - { - return lookup.SelectMany(g => g); - } - - public static int IndexOf(this IEnumerable haystack, T needle) - { - int i = 0; - foreach (var item in haystack) - { - if (item.Equals(needle)) - return i; - i++; - } - return -1; - } - - public static T MaxOrDefault(this IEnumerable stuff) - { - if (!stuff.Any()) - return default(T); - return stuff.Max(); - } - - public static TProp MaxOrDefault(this IEnumerable stuff, Func selector) - { - return stuff.Select(selector).MaxOrDefault(); - } - - public static T MinOrDefault(this IEnumerable stuff) - { - if (!stuff.Any()) - return default(T); - return stuff.Min(); - } - - public static TProp MinOrDefault(this IEnumerable stuff, Func selector) - { - return stuff.Select(selector).MinOrDefault(); - } - - /// - /// Finds the next item in a list, or null if there is no next item. - /// - /// - /// - /// - /// - /// - public static T Next(this IEnumerable list, T item, bool wrap = false) - { - var index = list.IndexOf(item) + 1; - if (index >= list.Count()) - { - if (wrap) - return list.FirstOrDefault(); - else - return default(T); - } - else - return list.ElementAt(index); - } - - /// - /// Converts an enumeration to an array, then does something to each item in a parallel fashion. - /// - /// - /// - public static void ParallelSafeForeach(this IEnumerable items, Action action) - { - if (items != null && action != null) - { - Parallel.ForEach(items.ToArray(), action); - } - } - - /// - /// Picks a random element from a sequence. - /// - /// - /// - /// - public static T PickRandom(this IEnumerable src, PRNG prng = null) - { - if (!src.Any()) - return default(T); - return src.ElementAt(RandomHelper.Next(src.Count(), prng)); - } - - /// - /// Picks a random element from a weighted sequence. - /// - /// - /// - /// - public static T PickWeighted(this IDictionary src, PRNG prng = null) - { - var total = src.Sum(kvp => kvp.Value); - int num; - if (prng == null) - num = RandomHelper.Next(total); - else - num = prng.Next(total); - - int sofar = 0; - foreach (var kvp in src) - { - sofar += kvp.Value; - if (num < sofar) - return kvp.Key; - } - return default(T); // nothing to pick... - } - - /// - /// Picks a random element from a weighted sequence. - /// - /// - /// - /// - public static T PickWeighted(this IDictionary src, PRNG prng = null) - { - var total = src.Sum(kvp => kvp.Value); - long num; - if (prng == null) - num = RandomHelper.Next(total); - else - num = prng.Next(total); - long sofar = 0; - foreach (var kvp in src) - { - sofar += kvp.Value; - if (num < sofar) - return kvp.Key; - } - return default(T); // nothing to pick... - } - - /// - /// Picks a random element from a weighted sequence. - /// - /// - /// - /// - public static T PickWeighted(this IDictionary src, PRNG prng = null) - { - var total = src.Sum(kvp => kvp.Value); - double num; - if (prng == null) - num = RandomHelper.Next(total); - else - num = prng.Next(total); - double sofar = 0; - foreach (var kvp in src) - { - sofar += kvp.Value; - if (num < sofar) - return kvp.Key; - } - return default(T); // nothing to pick... - } - - public static T PickWeighted(this IEnumerable src, Func weighter, PRNG prng = null) - { - return src.ToDictionary(x => x, x => weighter(x)).PickWeighted(prng); - } - - public static T PickWeighted(this IEnumerable src, Func weighter, PRNG prng = null) - { - return src.ToDictionary(x => x, x => weighter(x)).PickWeighted(prng); - } - - public static T PickWeighted(this IEnumerable src, Func weighter, PRNG prng = null) - { - return src.ToDictionary(x => x, x => weighter(x)).PickWeighted(prng); - } - - /// - /// Finds the previous item in a list, or null if there is no previous item. - /// - /// - /// - /// - /// - /// - public static T Previous(this IEnumerable list, T item, bool wrap = false) - { - var index = list.IndexOf(item) - 1; - if (index < 0) - { - if (wrap) - return list.LastOrDefault(); - else - return default(T); - } - else - return list.ElementAt(index); - } - - /// - /// Converts an enumeration to an array, then does something to each item. - /// - /// - /// - public static void SafeForeach(this IEnumerable items, Action action) - { - if (items != null && action != null) - { - foreach (var item in items.ToArray()) - action(item); - } - } - - /// - /// Orders elements randomly. - /// - /// - /// - public static IEnumerable Shuffle(this IEnumerable src, PRNG prng = null) - { - return src.Select(value => (RandomHelper.Next(int.MaxValue, prng), value)).OrderBy(q => q.Item1).Select(q => q.value); - } - - /// - /// Creates an enumerable containing a single item. - /// - /// - /// - public static IEnumerable SingleItem(this T obj) - { - return new T[] { obj }; - } - - /// - /// "Squashes" a nested collection into a collection of tuples. - /// - /// - /// - /// - public static IEnumerable> Squash(this IEnumerable parents, Func> childSelector) - { - foreach (var parent in parents) - { - foreach (var child in childSelector(parent)) - yield return Tuple.Create(parent, child); - } - } - - /// - /// "Squashes" a nested lookup into a collection of tuples. - /// - /// - /// - /// - /// - /// - public static IEnumerable> Squash(this ILookup> lookup) - { - foreach (var group1 in lookup) - { - foreach (var sublookup in group1) - { - foreach (var group2 in sublookup) - { - foreach (var item in group2) - yield return Tuple.Create(group1.Key, group2.Key, item); - } - } - } - } - - /// - /// Orders elements randomly after another OrderBy or ThenBy clause. - /// - /// - /// - public static IEnumerable ThenShuffle(this IOrderedEnumerable src, PRNG prng = null) - { - return src.ThenBy(t => RandomHelper.Next(int.MaxValue, prng)); - } - - public static IEnumerable UnionSingle(this IEnumerable ts, T t) - { - return ts.Union(t.SingleItem()); - } - - public static IEnumerable UnionSingle(this T t1, T t2) - { - return t1.SingleItem().UnionSingle(t2); - } - - /// - /// Returns the elements of a sequence that have the maximum of some selected value. - /// - /// - /// - /// - /// - /// - public static IEnumerable WithMax(this IEnumerable src, Func selector) - { - if (!src.Any()) - return Enumerable.Empty(); - var list = src.Select(item => new { Item = item, Value = selector(item) }); - var max = list.Max(x => x.Value); - return list.Where(x => x.Value.SafeEquals(max)).Select(x => x.Item); - } - - /// - /// Returns the elements of a sequence that have the minimum of some selected value. - /// - /// - /// - /// - /// - /// - public static IEnumerable WithMin(this IEnumerable src, Func selector) - { - if (!src.Any()) - return Enumerable.Empty(); - var list = src.Select(item => new { Item = item, Value = selector(item) }); - var min = list.Min(x => x.Value); - return list.Where(x => x.Value.SafeEquals(min)).Select(x => x.Item); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Extensions +{ + /// + /// All extensions dealing strictly with generic enumerables. + /// + public static class EnumerableExtensions + { + public static IEnumerable ConcatSingle(this T t1, T t2) + { + return t1.SingleItem().Append(t2); + } + + public static IEnumerable ExceptSingle(this IEnumerable src, T badguy) + { + return src.Except(new T[] { badguy }); + } + + /// + /// Flattens groupings into a single sequence. + /// + /// + /// + /// + /// + public static IEnumerable Flatten(this IEnumerable> lookup) + { + return lookup.SelectMany(g => g); + } + + public static int IndexOf(this IEnumerable haystack, T needle) + { + int i = 0; + foreach (var item in haystack) + { + if (item.Equals(needle)) + return i; + i++; + } + return -1; + } + + public static T MaxOrDefault(this IEnumerable stuff) + { + if (!stuff.Any()) + return default(T); + return stuff.Max(); + } + + public static TProp MaxOrDefault(this IEnumerable stuff, Func selector) + { + return stuff.Select(selector).MaxOrDefault(); + } + + public static T MinOrDefault(this IEnumerable stuff) + { + if (!stuff.Any()) + return default(T); + return stuff.Min(); + } + + public static TProp MinOrDefault(this IEnumerable stuff, Func selector) + { + return stuff.Select(selector).MinOrDefault(); + } + + /// + /// Finds the next item in a list, or null if there is no next item. + /// + /// + /// + /// + /// + /// + public static T Next(this IEnumerable list, T item, bool wrap = false) + { + var index = list.IndexOf(item) + 1; + if (index >= list.Count()) + { + if (wrap) + return list.FirstOrDefault(); + else + return default(T); + } + else + return list.ElementAt(index); + } + + /// + /// Converts an enumeration to an array, then does something to each item in a parallel fashion. + /// + /// + /// + public static void ParallelSafeForeach(this IEnumerable items, Action action) + { + if (items != null && action != null) + { + Parallel.ForEach(items.ToArray(), action); + } + } + + /// + /// Picks a random element from a sequence. + /// + /// + /// + /// + public static T PickRandom(this IEnumerable src, PRNG prng = null) + { + if (!src.Any()) + return default(T); + return src.ElementAt(RandomHelper.Next(src.Count(), prng)); + } + + /// + /// Picks a random element from a weighted sequence. + /// + /// + /// + /// + public static T PickWeighted(this IDictionary src, PRNG prng = null) + { + var total = src.Sum(kvp => kvp.Value); + int num; + if (prng == null) + num = RandomHelper.Next(total); + else + num = prng.Next(total); + + int sofar = 0; + foreach (var kvp in src) + { + sofar += kvp.Value; + if (num < sofar) + return kvp.Key; + } + return default(T); // nothing to pick... + } + + /// + /// Picks a random element from a weighted sequence. + /// + /// + /// + /// + public static T PickWeighted(this IDictionary src, PRNG prng = null) + { + var total = src.Sum(kvp => kvp.Value); + long num; + if (prng == null) + num = RandomHelper.Next(total); + else + num = prng.Next(total); + long sofar = 0; + foreach (var kvp in src) + { + sofar += kvp.Value; + if (num < sofar) + return kvp.Key; + } + return default(T); // nothing to pick... + } + + /// + /// Picks a random element from a weighted sequence. + /// + /// + /// + /// + public static T PickWeighted(this IDictionary src, PRNG prng = null) + { + var total = src.Sum(kvp => kvp.Value); + double num; + if (prng == null) + num = RandomHelper.Next(total); + else + num = prng.Next(total); + double sofar = 0; + foreach (var kvp in src) + { + sofar += kvp.Value; + if (num < sofar) + return kvp.Key; + } + return default(T); // nothing to pick... + } + + public static T PickWeighted(this IEnumerable src, Func weighter, PRNG prng = null) + { + return src.ToDictionary(x => x, x => weighter(x)).PickWeighted(prng); + } + + public static T PickWeighted(this IEnumerable src, Func weighter, PRNG prng = null) + { + return src.ToDictionary(x => x, x => weighter(x)).PickWeighted(prng); + } + + public static T PickWeighted(this IEnumerable src, Func weighter, PRNG prng = null) + { + return src.ToDictionary(x => x, x => weighter(x)).PickWeighted(prng); + } + + /// + /// Finds the previous item in a list, or null if there is no previous item. + /// + /// + /// + /// + /// + /// + public static T Previous(this IEnumerable list, T item, bool wrap = false) + { + var index = list.IndexOf(item) - 1; + if (index < 0) + { + if (wrap) + return list.LastOrDefault(); + else + return default(T); + } + else + return list.ElementAt(index); + } + + /// + /// Converts an enumeration to an array, then does something to each item. + /// + /// + /// + public static void SafeForeach(this IEnumerable items, Action action) + { + if (items != null && action != null) + { + foreach (var item in items.ToArray()) + action(item); + } + } + + /// + /// Orders elements randomly. + /// + /// + /// + public static IEnumerable Shuffle(this IEnumerable src, PRNG prng = null) + { + return src.Select(value => (RandomHelper.Next(int.MaxValue, prng), value)).OrderBy(q => q.Item1).Select(q => q.value); + } + + /// + /// Creates an enumerable containing a single item. + /// + /// + /// + public static IEnumerable SingleItem(this T obj) + { + return new T[] { obj }; + } + + /// + /// "Squashes" a nested collection into a collection of tuples. + /// + /// + /// + /// + public static IEnumerable> Squash(this IEnumerable parents, Func> childSelector) + { + foreach (var parent in parents) + { + foreach (var child in childSelector(parent)) + yield return Tuple.Create(parent, child); + } + } + + /// + /// "Squashes" a nested lookup into a collection of tuples. + /// + /// + /// + /// + /// + /// + public static IEnumerable> Squash(this ILookup> lookup) + { + foreach (var group1 in lookup) + { + foreach (var sublookup in group1) + { + foreach (var group2 in sublookup) + { + foreach (var item in group2) + yield return Tuple.Create(group1.Key, group2.Key, item); + } + } + } + } + + /// + /// Orders elements randomly after another OrderBy or ThenBy clause. + /// + /// + /// + public static IEnumerable ThenShuffle(this IOrderedEnumerable src, PRNG prng = null) + { + return src.ThenBy(t => RandomHelper.Next(int.MaxValue, prng)); + } + + public static IEnumerable UnionSingle(this IEnumerable ts, T t) + { + return ts.Union(t.SingleItem()); + } + + public static IEnumerable UnionSingle(this T t1, T t2) + { + return t1.SingleItem().UnionSingle(t2); + } + + /// + /// Returns the elements of a sequence that have the maximum of some selected value. + /// + /// + /// + /// + /// + /// + public static IEnumerable WithMax(this IEnumerable src, Func selector) + { + if (!src.Any()) + return Enumerable.Empty(); + var list = src.Select(item => new { Item = item, Value = selector(item) }); + var max = list.Max(x => x.Value); + return list.Where(x => x.Value.SafeEquals(max)).Select(x => x.Item); + } + + /// + /// Returns the elements of a sequence that have the minimum of some selected value. + /// + /// + /// + /// + /// + /// + public static IEnumerable WithMin(this IEnumerable src, Func selector) + { + if (!src.Any()) + return Enumerable.Empty(); + var list = src.Select(item => new { Item = item, Value = selector(item) }); + var min = list.Min(x => x.Value); + return list.Where(x => x.Value.SafeEquals(min)).Select(x => x.Item); + } + } +} diff --git a/FrEee/Utility/Extensions/GameEnumerableExtensions.cs b/FrEee/Extensions/GameEnumerableExtensions.cs similarity index 95% rename from FrEee/Utility/Extensions/GameEnumerableExtensions.cs rename to FrEee/Extensions/GameEnumerableExtensions.cs index f303d37f7..7dae72bb8 100644 --- a/FrEee/Utility/Extensions/GameEnumerableExtensions.cs +++ b/FrEee/Extensions/GameEnumerableExtensions.cs @@ -1,379 +1,380 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Modding.Interfaces; - -namespace FrEee.Utility.Extensions -{ - /// - /// All extensions dealing strictly with game-specific enumerables. - /// - public static class GameEnumerableExtensions - { - /// - /// Filters a list to objects belonging to a specific empire. - /// - /// - /// - /// - /// - public static IEnumerable BelongingTo(this IEnumerable list, Empire emp) where T : IOwnable - { - return list.Where(t => t.Owner == emp); - } - - /// - /// Removes points within a certain eight way distance of a certain point. - /// - /// The points to start with. - /// The point to block out. - /// The distance to block out from the center. - /// The points that are left. - public static IEnumerable BlockOut(this IEnumerable points, Point center, int distance) - { - foreach (var p in points) - { - if (center.EightWayDistance(p) > distance) - yield return p; - } - } - - public static IEnumerable FindAllByName(this IEnumerable stuff, string name) where T : INamed - { - return stuff.Where(item => item.Name == name); - } - - public static T FindByModID(this IEnumerable items, string modID) - where T : IModObject - { - if (modID == null) - return default(T); - // should be SingleOrDefault for these three checks but FirstOrDefault is faster and we shouldn't really have duplicates to begin with - var result = items.FirstOrDefault(item => item.ModID == modID); - if (result == null) - result = items.FirstOrDefault(item => item.ModID.Substring(item.ModID.IndexOf(" ") + 1) == modID); - if (result == null) - result = items.FirstOrDefault(item => item.ModID == modID.Substring(modID.IndexOf(" ") + 1)); - return result; - } - - public static T FindByName(this IEnumerable stuff, string name) where T : INamed - { - return stuff.FirstOrDefault(item => item.Name == name); - } - - public static TValue FindByName(this IDictionary dict, string name) - where TKey : INamed - { - return dict[dict.Keys.FindByName(name)]; - } - - public static T FindByTypeNameIndex(this IEnumerable items, Type type, string name, int index) - where T : IModObject - { - return items.Where(item => item.GetType() == type && item.Name == name).ElementAtOrDefault(index); - } - - public static T FindMatch(this IEnumerable items, T nu, IEnumerable nuItems) - where T : class, IModObject - { - return items.FindByModID(nu.ModID) ?? items.FindByTypeNameIndex(nu.GetType(), nu.Name, nuItems.GetIndex(nu)); - } - - /// - /// Returns the index of an item in a list after the list has been filtered to items with the same name. - /// - /// - /// - /// - /// - public static int GetIndex(this IEnumerable items, T item) - where T : INamed - { - return items.Where(i => i.Name == item.Name).IndexOf(item); - } - - /// - /// Finds the largest space object out of a group of space objects. - /// Stars are the largest space objects, followed by planets, asteroid fields, storms, fleets, ships/bases, and finally unit groups. - /// Within a category, space objects are sorted by stellar size or tonnage as appropriate. - /// - /// The group of space objects. - /// The largest space object. - public static ISpaceObject Largest(this IEnumerable objects) - { - if (objects.OfType().Any()) - { - return objects.OfType().OrderByDescending(obj => obj.StellarSize).First(); - } - if (objects.OfType().Any()) - { - return objects.OfType().OrderByDescending(obj => obj.StellarSize).First(); - } - if (objects.OfType().Any()) - { - return objects.OfType().OrderByDescending(obj => obj.StellarSize).First(); - } - if (objects.OfType().Any()) - { - return objects.OfType().OrderByDescending(obj => obj.StellarSize).First(); - } - if (objects.OfType().Any()) - { - return objects.OfType().OrderByDescending(obj => obj.StellarSize).First(); - } - if (objects.OfType().Any()) - { - return objects.OfType().OrderByDescending(obj => obj.Size).First(); - } - return null; - } - - /// - /// Finds the majority value of some attribute. If there is no clear majority, the first tied value is selected arbitrarily. - /// - /// - /// - /// - /// - /// - public static TCompared Majority(this IEnumerable src, Func selector) - { - var groups = src.GroupBy(x => selector(x)); - groups = groups.WithMax(g => g.Count()); - if (!groups.Any()) - return default(TCompared); - return groups.First().Key; - } - - /// - /// Computes the max of each resource in a group of resource quantities. - /// - /// - /// - public static ResourceQuantity MaxOfAllResources(this IEnumerable qs) - { - var result = new ResourceQuantity(); - foreach (var q in qs) - { - foreach (var kvp in q) - { - if (kvp.Value > result[kvp.Key]) - result[kvp.Key] = kvp.Value; - } - } - return result; - } - - public static ResourceQuantity MaxOfAllResources(this IEnumerable stuff, Func selector) - { - return stuff.Select(t => selector(t)).MaxOfAllResources(); - } - - public static IEnumerable NewerVersions(this IEnumerable stuff, T me, Func familySelector) - where T : class - { - bool foundme = false; - foreach (var t in stuff) - { - if (familySelector(t) == familySelector(me)) - { - // same family - if (t == me) - foundme = true; - else if (foundme) - yield return t; // it's later - } - } - } - - public static IEnumerable OlderVersions(this IEnumerable stuff, T me, Func familySelector) - where T : class - { - bool foundme = false; - foreach (var t in stuff) - { - if (familySelector(t) == familySelector(me)) - { - // same family - if (t == me) - foundme = true; - else if (!foundme) - yield return t; // it's earlier - } - } - } - - public static IEnumerable OnlyLatestVersions(this IEnumerable stuff, Func familySelector) - where T : class - { - string family = null; - T latest = null; - foreach (var t in stuff) - { - if (family == null) - { - // first item - latest = t; - family = familySelector(t); - } - else if (family == familySelector(t)) - { - // same family - latest = t; - } - else - { - // different family - yield return latest; - latest = t; - family = familySelector(t); - } - } - if (stuff.Any()) - yield return stuff.Last(); - } - - /// - /// Filters a list to objects that are owned. - /// - /// - /// - /// - /// - public static IEnumerable Owned(this IEnumerable list) where T : IOwnable - { - return list.Where(t => t.Owner != null); - } - - /// - /// Filters a list to objects belonging to a specific empire. - /// - /// - /// - /// - /// - public static IEnumerable OwnedBy(this IEnumerable list, Empire emp) where T : IOwnable - { - return list.BelongingTo(emp); - } - - public static IEnumerable Stack(this IEnumerable abilities, IAbilityObject stackTo) - { - return abilities.StackToTree(stackTo).Select(g => g.Key); - } - - public static IEnumerable StackAbilities(this IEnumerable objs, IAbilityObject stackTo) - { - return objs.SelectMany(obj => obj.Abilities()).Stack(stackTo); - } - - public static ILookup StackAbilitiesToTree(this IEnumerable objs, IAbilityObject stackTo) - { - return objs.SelectMany(obj => obj.Abilities()).StackToTree(stackTo); - } - - /// - /// Stacks any abilities of the same type according to the current mod's stacking rules. - /// Keeps the original abilities in a handy tree format under the stacked abilities - /// so you can tell which abilities contributed to which stacked abilities. - /// - /// - /// The object which should own the stacked abilities. - /// - public static ILookup StackToTree(this IEnumerable abilities, IAbilityObject stackTo) - { - // create result list - var stacked = new List>(); - - // group abilities by rule - var grouped = abilities.GroupBy(a => a.Rule); - - foreach (var group in grouped) - { - if (group.Key == null) - continue; // invalid ability rule - - // stack this ability group - var lookup = group.Key.GroupAndStack(group, stackTo); - - foreach (var lgroup in lookup) - { - // create a merged ability with a generated description (since ability values are stacked when merged) - var mergedAbility = new Ability(stackTo, lgroup.Key.Rule, description: null, values: lgroup.Key.Values); - - foreach (var abil in group) - { - // add this ability to the current group in the result list, using the merged ability as the key - stacked.Add(Tuple.Create(mergedAbility, abil)); - } - } - } - - // create a lookup from the result list - return stacked.ToLookup(t => t.Item1, t => t.Item2); - } - - /// - /// Adds up a bunch of resources. - /// - /// - /// - public static ResourceQuantity Sum(this IEnumerable resources) - { - if (!resources.Any()) - return new ResourceQuantity(); - return resources.Aggregate((r1, r2) => r1 + r2); - } - - /// - /// Adds up a bunch of resources. - /// - /// - /// - public static ResourceQuantity Sum(this IEnumerable stuff, Func selector) - { - return stuff.Select(item => selector(item)).Sum(); - } - - /// - /// Adds up a bunch of cargo. - /// - /// - /// - public static Cargo Sum(this IEnumerable cargo) - { - if (!cargo.Any()) - return new Cargo(); - return cargo.Aggregate((r1, r2) => r1 + r2); - } - - /// - /// Adds up a bunch of cargo. - /// - /// - /// - public static Cargo Sum(this IEnumerable stuff, Func selector) - { - return stuff.Select(item => selector(item)).Sum(); - } - - /// - /// Filters a list to objects that are unowned. - /// - /// - /// - /// - /// - public static IEnumerable Unowned(this IEnumerable list) where T : IOwnable - { - return list.BelongingTo(null); - } - } -} +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Extensions +{ + /// + /// All extensions dealing strictly with game-specific enumerables. + /// + public static class GameEnumerableExtensions + { + /// + /// Filters a list to objects belonging to a specific empire. + /// + /// + /// + /// + /// + public static IEnumerable BelongingTo(this IEnumerable list, Empire emp) where T : IOwnable + { + return list.Where(t => t.Owner == emp); + } + + /// + /// Removes points within a certain eight way distance of a certain point. + /// + /// The points to start with. + /// The point to block out. + /// The distance to block out from the center. + /// The points that are left. + public static IEnumerable BlockOut(this IEnumerable points, Point center, int distance) + { + foreach (var p in points) + { + if (center.EightWayDistance(p) > distance) + yield return p; + } + } + + public static IEnumerable FindAllByName(this IEnumerable stuff, string name) where T : INamed + { + return stuff.Where(item => item.Name == name); + } + + public static T FindByModID(this IEnumerable items, string modID) + where T : IModObject + { + if (modID == null) + return default(T); + // should be SingleOrDefault for these three checks but FirstOrDefault is faster and we shouldn't really have duplicates to begin with + var result = items.FirstOrDefault(item => item.ModID == modID); + if (result == null) + result = items.FirstOrDefault(item => item.ModID.Substring(item.ModID.IndexOf(" ") + 1) == modID); + if (result == null) + result = items.FirstOrDefault(item => item.ModID == modID.Substring(modID.IndexOf(" ") + 1)); + return result; + } + + public static T FindByName(this IEnumerable stuff, string name) where T : INamed + { + return stuff.FirstOrDefault(item => item.Name == name); + } + + public static TValue FindByName(this IDictionary dict, string name) + where TKey : INamed + { + return dict[dict.Keys.FindByName(name)]; + } + + public static T FindByTypeNameIndex(this IEnumerable items, Type type, string name, int index) + where T : IModObject + { + return items.Where(item => item.GetType() == type && item.Name == name).ElementAtOrDefault(index); + } + + public static T FindMatch(this IEnumerable items, T nu, IEnumerable nuItems) + where T : class, IModObject + { + return items.FindByModID(nu.ModID) ?? items.FindByTypeNameIndex(nu.GetType(), nu.Name, nuItems.GetIndex(nu)); + } + + /// + /// Returns the index of an item in a list after the list has been filtered to items with the same name. + /// + /// + /// + /// + /// + public static int GetIndex(this IEnumerable items, T item) + where T : INamed + { + return items.Where(i => i.Name == item.Name).IndexOf(item); + } + + /// + /// Finds the largest space object out of a group of space objects. + /// Stars are the largest space objects, followed by planets, asteroid fields, storms, fleets, ships/bases, and finally unit groups. + /// Within a category, space objects are sorted by stellar size or tonnage as appropriate. + /// + /// The group of space objects. + /// The largest space object. + public static ISpaceObject Largest(this IEnumerable objects) + { + if (objects.OfType().Any()) + { + return objects.OfType().OrderByDescending(obj => obj.StellarSize).First(); + } + if (objects.OfType().Any()) + { + return objects.OfType().OrderByDescending(obj => obj.StellarSize).First(); + } + if (objects.OfType().Any()) + { + return objects.OfType().OrderByDescending(obj => obj.StellarSize).First(); + } + if (objects.OfType().Any()) + { + return objects.OfType().OrderByDescending(obj => obj.StellarSize).First(); + } + if (objects.OfType().Any()) + { + return objects.OfType().OrderByDescending(obj => obj.StellarSize).First(); + } + if (objects.OfType().Any()) + { + return objects.OfType().OrderByDescending(obj => obj.Size).First(); + } + return null; + } + + /// + /// Finds the majority value of some attribute. If there is no clear majority, the first tied value is selected arbitrarily. + /// + /// + /// + /// + /// + /// + public static TCompared Majority(this IEnumerable src, Func selector) + { + var groups = src.GroupBy(x => selector(x)); + groups = groups.WithMax(g => g.Count()); + if (!groups.Any()) + return default(TCompared); + return groups.First().Key; + } + + /// + /// Computes the max of each resource in a group of resource quantities. + /// + /// + /// + public static ResourceQuantity MaxOfAllResources(this IEnumerable qs) + { + var result = new ResourceQuantity(); + foreach (var q in qs) + { + foreach (var kvp in q) + { + if (kvp.Value > result[kvp.Key]) + result[kvp.Key] = kvp.Value; + } + } + return result; + } + + public static ResourceQuantity MaxOfAllResources(this IEnumerable stuff, Func selector) + { + return stuff.Select(t => selector(t)).MaxOfAllResources(); + } + + public static IEnumerable NewerVersions(this IEnumerable stuff, T me, Func familySelector) + where T : class + { + bool foundme = false; + foreach (var t in stuff) + { + if (familySelector(t) == familySelector(me)) + { + // same family + if (t == me) + foundme = true; + else if (foundme) + yield return t; // it's later + } + } + } + + public static IEnumerable OlderVersions(this IEnumerable stuff, T me, Func familySelector) + where T : class + { + bool foundme = false; + foreach (var t in stuff) + { + if (familySelector(t) == familySelector(me)) + { + // same family + if (t == me) + foundme = true; + else if (!foundme) + yield return t; // it's earlier + } + } + } + + public static IEnumerable OnlyLatestVersions(this IEnumerable stuff, Func familySelector) + where T : class + { + string family = null; + T latest = null; + foreach (var t in stuff) + { + if (family == null) + { + // first item + latest = t; + family = familySelector(t); + } + else if (family == familySelector(t)) + { + // same family + latest = t; + } + else + { + // different family + yield return latest; + latest = t; + family = familySelector(t); + } + } + if (stuff.Any()) + yield return stuff.Last(); + } + + /// + /// Filters a list to objects that are owned. + /// + /// + /// + /// + /// + public static IEnumerable Owned(this IEnumerable list) where T : IOwnable + { + return list.Where(t => t.Owner != null); + } + + /// + /// Filters a list to objects belonging to a specific empire. + /// + /// + /// + /// + /// + public static IEnumerable OwnedBy(this IEnumerable list, Empire emp) where T : IOwnable + { + return list.BelongingTo(emp); + } + + public static IEnumerable Stack(this IEnumerable abilities, IAbilityObject stackTo) + { + return abilities.StackToTree(stackTo).Select(g => g.Key); + } + + public static IEnumerable StackAbilities(this IEnumerable objs, IAbilityObject stackTo) + { + return objs.SelectMany(obj => obj.Abilities()).Stack(stackTo); + } + + public static ILookup StackAbilitiesToTree(this IEnumerable objs, IAbilityObject stackTo) + { + return objs.SelectMany(obj => obj.Abilities()).StackToTree(stackTo); + } + + /// + /// Stacks any abilities of the same type according to the current mod's stacking rules. + /// Keeps the original abilities in a handy tree format under the stacked abilities + /// so you can tell which abilities contributed to which stacked abilities. + /// + /// + /// The object which should own the stacked abilities. + /// + public static ILookup StackToTree(this IEnumerable abilities, IAbilityObject stackTo) + { + // create result list + var stacked = new List>(); + + // group abilities by rule + var grouped = abilities.GroupBy(a => a.Rule); + + foreach (var group in grouped) + { + if (group.Key == null) + continue; // invalid ability rule + + // stack this ability group + var lookup = group.Key.GroupAndStack(group, stackTo); + + foreach (var lgroup in lookup) + { + // create a merged ability with a generated description (since ability values are stacked when merged) + var mergedAbility = new Ability(stackTo, lgroup.Key.Rule, description: null, values: lgroup.Key.Values); + + foreach (var abil in group) + { + // add this ability to the current group in the result list, using the merged ability as the key + stacked.Add(Tuple.Create(mergedAbility, abil)); + } + } + } + + // create a lookup from the result list + return stacked.ToLookup(t => t.Item1, t => t.Item2); + } + + /// + /// Adds up a bunch of resources. + /// + /// + /// + public static ResourceQuantity Sum(this IEnumerable resources) + { + if (!resources.Any()) + return new ResourceQuantity(); + return resources.Aggregate((r1, r2) => r1 + r2); + } + + /// + /// Adds up a bunch of resources. + /// + /// + /// + public static ResourceQuantity Sum(this IEnumerable stuff, Func selector) + { + return stuff.Select(item => selector(item)).Sum(); + } + + /// + /// Adds up a bunch of cargo. + /// + /// + /// + public static Cargo Sum(this IEnumerable cargo) + { + if (!cargo.Any()) + return new Cargo(); + return cargo.Aggregate((r1, r2) => r1 + r2); + } + + /// + /// Adds up a bunch of cargo. + /// + /// + /// + public static Cargo Sum(this IEnumerable stuff, Func selector) + { + return stuff.Select(item => selector(item)).Sum(); + } + + /// + /// Filters a list to objects that are unowned. + /// + /// + /// + /// + /// + public static IEnumerable Unowned(this IEnumerable list) where T : IOwnable + { + return list.BelongingTo(null); + } + } +} diff --git a/FrEee/Utility/Extensions/MathExtensions.cs b/FrEee/Extensions/MathExtensions.cs similarity index 95% rename from FrEee/Utility/Extensions/MathExtensions.cs rename to FrEee/Extensions/MathExtensions.cs index 759480cdb..a6a27fb95 100644 --- a/FrEee/Utility/Extensions/MathExtensions.cs +++ b/FrEee/Extensions/MathExtensions.cs @@ -1,113 +1,114 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Extensions -{ - public static class MathExtensions - { - /// - /// Finds the ceiling of the specified number to the specified number of decimal places and returns it as a string. - /// - /// The number. - /// The decimal places. - /// - public static string CeilingString(this double? num, int decimalPlaces = 0) - { - if (num == null) - return null; - return num.Value.CeilingString(decimalPlaces); - } - - /// - /// Finds the ceiling of the specified number to the specified number of decimal places and returns it as a string. - /// - /// The number. - /// The decimal places. - /// - public static string CeilingString(this double num, int decimalPlaces = 0) - { - return MathX.Ceiling(num, decimalPlaces).ToString("f" + decimalPlaces); - } - - /// - /// Converts a percentage into a ratio. - /// - /// The percentage, e.g. 50 - /// The ratio, e.g. 0.5 - public static double Percent(this int i) - { - return (double)i / 100d; - } - - /// - /// Multiplies a number by a percentage. - /// - /// The percentage, e.g. 50 - /// - public static double PercentOf(this int p, double d) - { - return p * d / 100d; - } - - /// - /// Multiplies a number by a percentage. - /// - /// The percentage, e.g. 50 - /// - public static double PercentOf(this double p, double d) - { - return p * d / 100d; - } - - /// - /// Multiplies an integer by a percentage and rounds it. - /// - /// - /// - /// - public static int PercentOfRounded(this int p, int i) - { - if (p * i < 0) - return -PercentOfRounded(p, -i); - // we don't want to use Math.Round because it rounds to the nearest even integer when at 0.5 and we want to always round up - var temp = i * p / 100d; - var ipart = Math.Floor((double)temp); - var dpart = temp - ipart; - if (dpart >= 0.5) - return (int)(ipart + 1); - else - return (int)ipart; - } - - public static int WeightedAverage(this IEnumerable list, Func weightPicker, Func amountPicker) - { - int result = 0; - if (list == null || !list.Any()) - return result; - var total = list.Sum(weightPicker); - if (total == 0) - return result; - foreach (var item in list) - result += weightPicker(item) * amountPicker(item); - result /= total; - return result; - } - - public static double WeightedAverage(this IEnumerable list, Func weightPicker, Func amountPicker) - { - double result = 0; - if (list == null || !list.Any()) - return result; - var total = list.Sum(weightPicker); - if (total == 0) - return result; - foreach (var item in list) - result += weightPicker(item) * amountPicker(item); - result /= total; - return result; - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Extensions +{ + public static class MathExtensions + { + /// + /// Finds the ceiling of the specified number to the specified number of decimal places and returns it as a string. + /// + /// The number. + /// The decimal places. + /// + public static string CeilingString(this double? num, int decimalPlaces = 0) + { + if (num == null) + return null; + return num.Value.CeilingString(decimalPlaces); + } + + /// + /// Finds the ceiling of the specified number to the specified number of decimal places and returns it as a string. + /// + /// The number. + /// The decimal places. + /// + public static string CeilingString(this double num, int decimalPlaces = 0) + { + return MathX.Ceiling(num, decimalPlaces).ToString("f" + decimalPlaces); + } + + /// + /// Converts a percentage into a ratio. + /// + /// The percentage, e.g. 50 + /// The ratio, e.g. 0.5 + public static double Percent(this int i) + { + return (double)i / 100d; + } + + /// + /// Multiplies a number by a percentage. + /// + /// The percentage, e.g. 50 + /// + public static double PercentOf(this int p, double d) + { + return p * d / 100d; + } + + /// + /// Multiplies a number by a percentage. + /// + /// The percentage, e.g. 50 + /// + public static double PercentOf(this double p, double d) + { + return p * d / 100d; + } + + /// + /// Multiplies an integer by a percentage and rounds it. + /// + /// + /// + /// + public static int PercentOfRounded(this int p, int i) + { + if (p * i < 0) + return -PercentOfRounded(p, -i); + // we don't want to use Math.Round because it rounds to the nearest even integer when at 0.5 and we want to always round up + var temp = i * p / 100d; + var ipart = Math.Floor((double)temp); + var dpart = temp - ipart; + if (dpart >= 0.5) + return (int)(ipart + 1); + else + return (int)ipart; + } + + public static int WeightedAverage(this IEnumerable list, Func weightPicker, Func amountPicker) + { + int result = 0; + if (list == null || !list.Any()) + return result; + var total = list.Sum(weightPicker); + if (total == 0) + return result; + foreach (var item in list) + result += weightPicker(item) * amountPicker(item); + result /= total; + return result; + } + + public static double WeightedAverage(this IEnumerable list, Func weightPicker, Func amountPicker) + { + double result = 0; + if (list == null || !list.Any()) + return result; + var total = list.Sum(weightPicker); + if (total == 0) + return result; + foreach (var item in list) + result += weightPicker(item) * amountPicker(item); + result /= total; + return result; + } + } +} diff --git a/FrEee/Utility/Extensions/Parser.cs b/FrEee/Extensions/Parser.cs similarity index 95% rename from FrEee/Utility/Extensions/Parser.cs rename to FrEee/Extensions/Parser.cs index bf1f5e6a3..705478d44 100644 --- a/FrEee/Utility/Extensions/Parser.cs +++ b/FrEee/Extensions/Parser.cs @@ -1,156 +1,157 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; - -namespace FrEee.Utility.Extensions -{ - /// - /// Parses various things from strings. - /// - public static class Parser - { - private static readonly MethodInfo enumParser = typeof(Parser).GetMethods().Single(m => m.Name == "ParseEnum" && m.ContainsGenericParameters); - - private static SafeDictionary> enumMemberCache = new SafeDictionary>(); - - private static SafeDictionary> enumValues = new SafeDictionary>(true); - - /// - /// Parses a string as an enum, using custom names. - /// - /// - /// - /// - public static T ParseEnum(this string s) - { - if (typeof(T).HasAttribute()) - return s.ParseFlagsEnum(); - else - return s.ParseSingleEnum(); - } - - /// - /// Parses a string as an enum, using custom names. - /// - /// - /// - public static object ParseEnum(this string s, Type type) - { - var v = enumValues[type][s]; - if (v == null) - { - var parser = enumParser.MakeGenericMethod(type); - v = enumValues[type][s] = parser.Invoke(null, new object[] { s.Trim() }); - } - return v; - } - - /// - /// The inverse of ToUnitString. Parses a number with units. - /// - /// - /// The parsed number, or null if the string could not be parsed. - /// Should lowercase m be treated as milli or mega? - public static double? ParseUnits(this string s, bool allowMilli = false) - { - var last = s.Last(); - if (char.IsNumber(last)) - return double.Parse(s); // no unit - s = s.Substring(0, s.Length - 1); - double num; - if (!double.TryParse(s, out num)) - return null; // can't parse the number - if (last == 'k' || last == 'K') - return num * 1e3; - if (last == 'M') - return num * 1e6; - if (last == 'G' || last == 'B' || last == 'g' || last == 'b') // giga or billions - return num * 1e9; - if (last == 'T' || last == 't') - return num * 1e12; - if (last == 'm') - return num * (allowMilli ? 1e-3 : 1e6); // treat as mega if milli isn't allowed - return null; // can't parse the units - } - - private static IDictionary GetEnumValues() - { - var names = Enum.GetNames(typeof(T)); - var mems = names.SelectMany(n => typeof(T).GetMember(n)); - var dict = new Dictionary(); - foreach (var mem in mems) - dict.Add(mem, (T)Enum.Parse(typeof(T), mem.Name)); - return dict; - } - - /// - /// Parses a string as a flags enum. - /// - /// - /// - /// - private static T ParseFlagsEnum(this string s) - { - var spl = s.Split(',', '\\', '/'); - return spl.ParseFlagsEnum(); - } - - /// - /// Parses some strings as flags enum values. - /// If the type is not a flags enum, just par - /// - /// - /// - /// - private static T ParseFlagsEnum(this IEnumerable ss) - { - if (!(typeof(T).IsEnum && typeof(T).HasAttribute())) - throw new InvalidCastException("{0} is not a flags enum type.".F(typeof(T))); - - // TODO - non-integer enums - int result = 0; - - var dict = GetEnumValues(); - - foreach (var x in ss.Select(s => s.ParseSingleEnum())) - { - // why can't I cast x to int? - var n = Enum.GetName(typeof(T), x); - var i = (int)Enum.Parse(typeof(T), n); - result |= i; - } - - return (T)(object)result; - } - - private static T ParseSingleEnum(this string s) - { - s = s.Trim(); - - if (!typeof(T).IsEnum) - throw new InvalidCastException("{0} is not an enum type.".F(typeof(T))); - - if (enumMemberCache[typeof(T)] == null) - enumMemberCache[typeof(T)] = GetEnumValues(); - var dict = enumMemberCache[typeof(T)]; - var mems = dict.Keys; - var matches = mems.Where(m => m.GetNames().Contains(s)).ToArray(); - MemberInfo match; - if (matches.Count() == 1) - match = matches.Single(); - else if (matches.Count() == 0) - throw new ArgumentException("{0} is not a valid value or alias for enum type {1}.".F(s, typeof(T))); - else - { - // find by canonical name - var canonicalMatches = matches.Where(m => m.GetCanonicalName() == s); - if (canonicalMatches.Count() == 1) - match = canonicalMatches.Single(); - else - throw new ArgumentException("{0} is an ambiguous match for {1}.".F(s, typeof(T))); - } - return (T)dict[match]; - } - } -} \ No newline at end of file +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Extensions +{ + /// + /// Parses various things from strings. + /// + public static class Parser + { + private static readonly MethodInfo enumParser = typeof(Parser).GetMethods().Single(m => m.Name == "ParseEnum" && m.ContainsGenericParameters); + + private static SafeDictionary> enumMemberCache = new SafeDictionary>(); + + private static SafeDictionary> enumValues = new SafeDictionary>(true); + + /// + /// Parses a string as an enum, using custom names. + /// + /// + /// + /// + public static T ParseEnum(this string s) + { + if (typeof(T).HasAttribute()) + return s.ParseFlagsEnum(); + else + return s.ParseSingleEnum(); + } + + /// + /// Parses a string as an enum, using custom names. + /// + /// + /// + public static object ParseEnum(this string s, Type type) + { + var v = enumValues[type][s]; + if (v == null) + { + var parser = enumParser.MakeGenericMethod(type); + v = enumValues[type][s] = parser.Invoke(null, new object[] { s.Trim() }); + } + return v; + } + + /// + /// The inverse of ToUnitString. Parses a number with units. + /// + /// + /// The parsed number, or null if the string could not be parsed. + /// Should lowercase m be treated as milli or mega? + public static double? ParseUnits(this string s, bool allowMilli = false) + { + var last = s.Last(); + if (char.IsNumber(last)) + return double.Parse(s); // no unit + s = s.Substring(0, s.Length - 1); + double num; + if (!double.TryParse(s, out num)) + return null; // can't parse the number + if (last == 'k' || last == 'K') + return num * 1e3; + if (last == 'M') + return num * 1e6; + if (last == 'G' || last == 'B' || last == 'g' || last == 'b') // giga or billions + return num * 1e9; + if (last == 'T' || last == 't') + return num * 1e12; + if (last == 'm') + return num * (allowMilli ? 1e-3 : 1e6); // treat as mega if milli isn't allowed + return null; // can't parse the units + } + + private static IDictionary GetEnumValues() + { + var names = Enum.GetNames(typeof(T)); + var mems = names.SelectMany(n => typeof(T).GetMember(n)); + var dict = new Dictionary(); + foreach (var mem in mems) + dict.Add(mem, (T)Enum.Parse(typeof(T), mem.Name)); + return dict; + } + + /// + /// Parses a string as a flags enum. + /// + /// + /// + /// + private static T ParseFlagsEnum(this string s) + { + var spl = s.Split(',', '\\', '/'); + return spl.ParseFlagsEnum(); + } + + /// + /// Parses some strings as flags enum values. + /// If the type is not a flags enum, just par + /// + /// + /// + /// + private static T ParseFlagsEnum(this IEnumerable ss) + { + if (!(typeof(T).IsEnum && typeof(T).HasAttribute())) + throw new InvalidCastException("{0} is not a flags enum type.".F(typeof(T))); + + // TODO - non-integer enums + int result = 0; + + var dict = GetEnumValues(); + + foreach (var x in ss.Select(s => s.ParseSingleEnum())) + { + // why can't I cast x to int? + var n = Enum.GetName(typeof(T), x); + var i = (int)Enum.Parse(typeof(T), n); + result |= i; + } + + return (T)(object)result; + } + + private static T ParseSingleEnum(this string s) + { + s = s.Trim(); + + if (!typeof(T).IsEnum) + throw new InvalidCastException("{0} is not an enum type.".F(typeof(T))); + + if (enumMemberCache[typeof(T)] == null) + enumMemberCache[typeof(T)] = GetEnumValues(); + var dict = enumMemberCache[typeof(T)]; + var mems = dict.Keys; + var matches = mems.Where(m => m.GetNames().Contains(s)).ToArray(); + MemberInfo match; + if (matches.Count() == 1) + match = matches.Single(); + else if (matches.Count() == 0) + throw new ArgumentException("{0} is not a valid value or alias for enum type {1}.".F(s, typeof(T))); + else + { + // find by canonical name + var canonicalMatches = matches.Where(m => m.GetCanonicalName() == s); + if (canonicalMatches.Count() == 1) + match = canonicalMatches.Single(); + else + throw new ArgumentException("{0} is an ambiguous match for {1}.".F(s, typeof(T))); + } + return (T)dict[match]; + } + } +} diff --git a/FrEee/Utility/Extensions/StringHandlingExtensions.cs b/FrEee/Extensions/StringHandlingExtensions.cs similarity index 94% rename from FrEee/Utility/Extensions/StringHandlingExtensions.cs rename to FrEee/Extensions/StringHandlingExtensions.cs index 95be8cea1..ab48802c4 100644 --- a/FrEee/Utility/Extensions/StringHandlingExtensions.cs +++ b/FrEee/Extensions/StringHandlingExtensions.cs @@ -1,94 +1,94 @@ -using System.Linq; - -namespace FrEee.Utility.Extensions -{ - public static class StringHandlingExtensions - { - public static string CamelCase(this string s) - { - return s[0].ToString().ToLowerInvariant() + s.Substring(1); - } - - public static string Capitalize(this string s) - { - if (s == null) - return null; - if (s.Length == 0) - return s; - return s[0].ToString().ToUpper() + s.Substring(1); - } - - public static string EscapeBackslashes(this string s) - { - return s.Replace("\\", "\\\\"); - } - - public static string EscapeNewlines(this string s) - { - return s.Replace("\r", "\\r").Replace("\n", "\\n"); - } - - public static string EscapeQuotes(this string s) - { - return s.Replace("'", "\\'").Replace("\"", "\\\""); - } - - /// - /// More concise way of doing string.Format(format, args) - /// - /// - /// - /// - public static string F(this string format, params object[] args) - { - return string.Format(format, args); - } - - public static string LastWord(this string s) - { - if (s == null) - return null; - return s.Split(' ').LastOrDefault(); - } - - /// - /// Gets a possessive form of a noun or pronoun. - /// - /// - /// For "I", is this the first word? For "you" and "she", is this in the subject of the sentence? - /// - public static string Possessive(this string s, bool isStart = false) - { - if (s == "I") - return isStart ? "My" : "my"; - if (s == "we") - return "our"; - if (s == "We") - return "Our"; - if (s == "you") - return isStart ? "your" : "yours"; - if (s == "You") - return isStart ? "Your" : "Yours"; - if (s == "he" || s == "him") - return "his"; - if (s == "He") - return "His"; - if (s == "she" || s == "her") - return isStart ? "her" : "hers"; - if (s == "She") - return "Her"; - if (s == "it") - return "its"; - if (s == "they") - return "their"; - if (s == "They") - return "Their"; - if (s == "them") - return "theirs"; - - if (s.EndsWith("s")) - return s + "'"; - return s + "'s"; - } - } +using System.Linq; + +namespace FrEee.Extensions +{ + public static class StringHandlingExtensions + { + public static string CamelCase(this string s) + { + return s[0].ToString().ToLowerInvariant() + s.Substring(1); + } + + public static string Capitalize(this string s) + { + if (s == null) + return null; + if (s.Length == 0) + return s; + return s[0].ToString().ToUpper() + s.Substring(1); + } + + public static string EscapeBackslashes(this string s) + { + return s.Replace("\\", "\\\\"); + } + + public static string EscapeNewlines(this string s) + { + return s.Replace("\r", "\\r").Replace("\n", "\\n"); + } + + public static string EscapeQuotes(this string s) + { + return s.Replace("'", "\\'").Replace("\"", "\\\""); + } + + /// + /// More concise way of doing string.Format(format, args) + /// + /// + /// + /// + public static string F(this string format, params object[] args) + { + return string.Format(format, args); + } + + public static string LastWord(this string s) + { + if (s == null) + return null; + return s.Split(' ').LastOrDefault(); + } + + /// + /// Gets a possessive form of a noun or pronoun. + /// + /// + /// For "I", is this the first word? For "you" and "she", is this in the subject of the sentence? + /// + public static string Possessive(this string s, bool isStart = false) + { + if (s == "I") + return isStart ? "My" : "my"; + if (s == "we") + return "our"; + if (s == "We") + return "Our"; + if (s == "you") + return isStart ? "your" : "yours"; + if (s == "You") + return isStart ? "Your" : "Yours"; + if (s == "he" || s == "him") + return "his"; + if (s == "He") + return "His"; + if (s == "she" || s == "her") + return isStart ? "her" : "hers"; + if (s == "She") + return "Her"; + if (s == "it") + return "its"; + if (s == "they") + return "their"; + if (s == "They") + return "Their"; + if (s == "them") + return "theirs"; + + if (s.EndsWith("s")) + return s + "'"; + return s + "'s"; + } + } } \ No newline at end of file diff --git a/FrEee/Utility/Extensions/UnitHandlingExtensions.cs b/FrEee/Extensions/UnitHandlingExtensions.cs similarity index 96% rename from FrEee/Utility/Extensions/UnitHandlingExtensions.cs rename to FrEee/Extensions/UnitHandlingExtensions.cs index 92ed0de84..a7fea99d1 100644 --- a/FrEee/Utility/Extensions/UnitHandlingExtensions.cs +++ b/FrEee/Extensions/UnitHandlingExtensions.cs @@ -1,251 +1,251 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Utility.Extensions -{ - public static class UnitHandlingExtensions - { - private static IDictionary RomanNumeralCache = new Dictionary(); - - private static Tuple[] RomanNumeralParts = new Tuple[] - { - Tuple.Create(1000, "M"), - Tuple.Create(900, "CM"), - Tuple.Create(500, "D"), - Tuple.Create(400, "CD"), - Tuple.Create(100, "C"), - Tuple.Create(90, "XC"), - Tuple.Create(50, "L"), - Tuple.Create(40, "XL"), - Tuple.Create(10, "X"), - Tuple.Create(9, "IX"), - Tuple.Create(5, "V"), - Tuple.Create(4, "IV"), - Tuple.Create(1, "I"), - }; - - /// - /// Displays a number in kT, MT, etc. - /// - /// - /// - public static string Kilotons(this long? value, string undefinedValue = "Undefined") - { - if (value == null) - return undefinedValue; - return value.Value.Kilotons(); - } - - /// - /// Displays a number in kT, MT, etc. - /// - /// - /// - public static string Kilotons(this long value) - { - if (value < 10000) - return value + "kT"; - return (value * 1000).ToUnitString() + "T"; - } - - /// - /// Displays a number in kT, MT, etc. - /// - /// - /// - public static string Kilotons(this int? value, string nullText = "Undefined") - { - if (value == null) - return nullText; - return ((long?)value).Kilotons(); - } - - /// - /// Displays a number in kT, MT, etc. - /// - /// - /// - public static string Kilotons(this int value) - { - return ((long)value).Kilotons(); - } - - /// - /// Displays a number in kT, MT, etc. - /// - /// - /// - public static string Kilotons(this double? value, string undefinedValue = "Undefined") - { - if (value == null) - return undefinedValue; - return value.Value.Kilotons(); - } - - /// - /// Displays a number in kT, MT, etc. - /// - /// - /// - public static string Kilotons(this double value) - { - return (value * 1000).ToUnitString() + "T"; - } - - /// - /// Gets a roman numeral. - /// - /// - /// - public static string ToRomanNumeral(this int i) - { - // do we already know this? - if (!RomanNumeralCache.ContainsKey(i)) - { - // get silly negative numbers and zeroes out of the way - if (i < 0) - RomanNumeralCache.Add(i, "-" + ToRomanNumeral(-i)); - else if (i == 0) - RomanNumeralCache.Add(i, ""); - else - { - // scan the roman numeral parts list recursively - foreach (var part in RomanNumeralParts.OrderByDescending(part => part.Item1)) - { - if (i >= part.Item1) - { - RomanNumeralCache.Add(i, part.Item2 + (i - part.Item1).ToRomanNumeral()); - break; - } - } - } - } - - return RomanNumeralCache[i]; - } - - /// - /// Converts a turn number to a stardate. - /// - /// - /// - public static string ToStardate(this int turnNumber) - { - // TODO - moddable starting stardate? - return ((turnNumber + 23999) / 10.0).ToString("0.0"); - } - - /// - /// Adds SI prefixes to a value and rounds it off. - /// e.g. 25000 becomes 25.00k - /// - /// - public static string ToUnitString(this long? value, bool bForBillions = false, int sigfigs = 4, string undefinedValue = "Undefined") - { - if (value == null) - return undefinedValue; - return value.Value.ToUnitString(bForBillions, sigfigs); - } - - /// - /// Adds SI prefixes to a value and rounds it off. - /// e.g. 25000 becomes 25.00k - /// - /// - public static string ToUnitString(this long value, bool bForBillions = false, int sigfigs = 4) - { - if (Math.Abs(value) >= 1e12 * Math.Pow(10, sigfigs - 3)) - { - var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e12)); - var decimals = sigfigs - 1 - log; - return (value / 1e12).ToString("f" + decimals) + "T"; - } - if (Math.Abs(value) >= 1e9 * Math.Pow(10, sigfigs - 3)) - { - var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e9)); - var decimals = sigfigs - 1 - log; - return (value / 1e9).ToString("f" + decimals) + (bForBillions ? "B" : "G"); - } - if (Math.Abs(value) >= 1e6 * Math.Pow(10, sigfigs - 3)) - { - var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e6)); - var decimals = sigfigs - 1 - log; - return (value / 1e6).ToString("f" + decimals) + "M"; - } - if (Math.Abs(value) >= 1e3 * Math.Pow(10, sigfigs - 3)) - { - var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e3)); - var decimals = sigfigs - 1 - log; - return (value / 1e3).ToString("f" + decimals) + "k"; - } - return value.ToString(); - } - - /// - /// Adds SI prefixes to a value and rounds it off. - /// e.g. 25000 becomes 25.00k - /// - /// - public static string ToUnitString(this int? value, bool bForBillions = false, int sigfigs = 4) - { - return ((long?)value).ToUnitString(bForBillions, sigfigs); - } - - /// - /// Adds SI prefixes to a value and rounds it off. - /// e.g. 25000 becomes 25.00k - /// - /// - public static string ToUnitString(this int value, bool bForBillions = false, int sigfigs = 4) - { - return ((long)value).ToUnitString(bForBillions, sigfigs); - } - - /// - /// Adds SI prefixes to a value and rounds it off. - /// e.g. 25000 becomes 25.00k - /// - /// - public static string ToUnitString(this double value, bool bForBillions = false, int sigfigs = 4) - { - if (Math.Abs(value) >= 1e12 * Math.Pow(10, sigfigs - 3)) - { - var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e12)); - var decimals = sigfigs - 1 - log; - return (value / 1e12).ToString("f" + decimals) + "T"; - } - if (Math.Abs(value) >= 1e9 * Math.Pow(10, sigfigs - 3)) - { - var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e9)); - var decimals = sigfigs - 1 - log; - return (value / 1e9).ToString("f" + decimals) + (bForBillions ? "B" : "G"); - } - if (Math.Abs(value) >= 1e6 * Math.Pow(10, sigfigs - 3)) - { - var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e6)); - var decimals = sigfigs - 1 - log; - return (value / 1e6).ToString("f" + decimals) + "M"; - } - if (Math.Abs(value) >= 1e3 * Math.Pow(10, sigfigs - 3)) - { - var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e3)); - var decimals = sigfigs - 1 - log; - return (value / 1e3).ToString("f" + decimals) + "k"; - } - return value.ToString(); - } - - /// - /// Adds SI prefixes to a value and rounds it off. - /// e.g. 25000 becomes 25.00k - /// - /// - public static string ToUnitString(this double? value, bool bForBillions = false, int sigfigs = 4, string undefinedValue = "Undefined") - { - if (value == null) - return undefinedValue; - return value.Value.ToUnitString(bForBillions, sigfigs); - } - } +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Extensions +{ + public static class UnitHandlingExtensions + { + private static IDictionary RomanNumeralCache = new Dictionary(); + + private static Tuple[] RomanNumeralParts = new Tuple[] + { + Tuple.Create(1000, "M"), + Tuple.Create(900, "CM"), + Tuple.Create(500, "D"), + Tuple.Create(400, "CD"), + Tuple.Create(100, "C"), + Tuple.Create(90, "XC"), + Tuple.Create(50, "L"), + Tuple.Create(40, "XL"), + Tuple.Create(10, "X"), + Tuple.Create(9, "IX"), + Tuple.Create(5, "V"), + Tuple.Create(4, "IV"), + Tuple.Create(1, "I"), + }; + + /// + /// Displays a number in kT, MT, etc. + /// + /// + /// + public static string Kilotons(this long? value, string undefinedValue = "Undefined") + { + if (value == null) + return undefinedValue; + return value.Value.Kilotons(); + } + + /// + /// Displays a number in kT, MT, etc. + /// + /// + /// + public static string Kilotons(this long value) + { + if (value < 10000) + return value + "kT"; + return (value * 1000).ToUnitString() + "T"; + } + + /// + /// Displays a number in kT, MT, etc. + /// + /// + /// + public static string Kilotons(this int? value, string nullText = "Undefined") + { + if (value == null) + return nullText; + return ((long?)value).Kilotons(); + } + + /// + /// Displays a number in kT, MT, etc. + /// + /// + /// + public static string Kilotons(this int value) + { + return ((long)value).Kilotons(); + } + + /// + /// Displays a number in kT, MT, etc. + /// + /// + /// + public static string Kilotons(this double? value, string undefinedValue = "Undefined") + { + if (value == null) + return undefinedValue; + return value.Value.Kilotons(); + } + + /// + /// Displays a number in kT, MT, etc. + /// + /// + /// + public static string Kilotons(this double value) + { + return (value * 1000).ToUnitString() + "T"; + } + + /// + /// Gets a roman numeral. + /// + /// + /// + public static string ToRomanNumeral(this int i) + { + // do we already know this? + if (!RomanNumeralCache.ContainsKey(i)) + { + // get silly negative numbers and zeroes out of the way + if (i < 0) + RomanNumeralCache.Add(i, "-" + ToRomanNumeral(-i)); + else if (i == 0) + RomanNumeralCache.Add(i, ""); + else + { + // scan the roman numeral parts list recursively + foreach (var part in RomanNumeralParts.OrderByDescending(part => part.Item1)) + { + if (i >= part.Item1) + { + RomanNumeralCache.Add(i, part.Item2 + (i - part.Item1).ToRomanNumeral()); + break; + } + } + } + } + + return RomanNumeralCache[i]; + } + + /// + /// Converts a turn number to a stardate. + /// + /// + /// + public static string ToStardate(this int turnNumber) + { + // TODO - moddable starting stardate? + return ((turnNumber + 23999) / 10.0).ToString("0.0"); + } + + /// + /// Adds SI prefixes to a value and rounds it off. + /// e.g. 25000 becomes 25.00k + /// + /// + public static string ToUnitString(this long? value, bool bForBillions = false, int sigfigs = 4, string undefinedValue = "Undefined") + { + if (value == null) + return undefinedValue; + return value.Value.ToUnitString(bForBillions, sigfigs); + } + + /// + /// Adds SI prefixes to a value and rounds it off. + /// e.g. 25000 becomes 25.00k + /// + /// + public static string ToUnitString(this long value, bool bForBillions = false, int sigfigs = 4) + { + if (Math.Abs(value) >= 1e12 * Math.Pow(10, sigfigs - 3)) + { + var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e12)); + var decimals = sigfigs - 1 - log; + return (value / 1e12).ToString("f" + decimals) + "T"; + } + if (Math.Abs(value) >= 1e9 * Math.Pow(10, sigfigs - 3)) + { + var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e9)); + var decimals = sigfigs - 1 - log; + return (value / 1e9).ToString("f" + decimals) + (bForBillions ? "B" : "G"); + } + if (Math.Abs(value) >= 1e6 * Math.Pow(10, sigfigs - 3)) + { + var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e6)); + var decimals = sigfigs - 1 - log; + return (value / 1e6).ToString("f" + decimals) + "M"; + } + if (Math.Abs(value) >= 1e3 * Math.Pow(10, sigfigs - 3)) + { + var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e3)); + var decimals = sigfigs - 1 - log; + return (value / 1e3).ToString("f" + decimals) + "k"; + } + return value.ToString(); + } + + /// + /// Adds SI prefixes to a value and rounds it off. + /// e.g. 25000 becomes 25.00k + /// + /// + public static string ToUnitString(this int? value, bool bForBillions = false, int sigfigs = 4) + { + return ((long?)value).ToUnitString(bForBillions, sigfigs); + } + + /// + /// Adds SI prefixes to a value and rounds it off. + /// e.g. 25000 becomes 25.00k + /// + /// + public static string ToUnitString(this int value, bool bForBillions = false, int sigfigs = 4) + { + return ((long)value).ToUnitString(bForBillions, sigfigs); + } + + /// + /// Adds SI prefixes to a value and rounds it off. + /// e.g. 25000 becomes 25.00k + /// + /// + public static string ToUnitString(this double value, bool bForBillions = false, int sigfigs = 4) + { + if (Math.Abs(value) >= 1e12 * Math.Pow(10, sigfigs - 3)) + { + var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e12)); + var decimals = sigfigs - 1 - log; + return (value / 1e12).ToString("f" + decimals) + "T"; + } + if (Math.Abs(value) >= 1e9 * Math.Pow(10, sigfigs - 3)) + { + var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e9)); + var decimals = sigfigs - 1 - log; + return (value / 1e9).ToString("f" + decimals) + (bForBillions ? "B" : "G"); + } + if (Math.Abs(value) >= 1e6 * Math.Pow(10, sigfigs - 3)) + { + var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e6)); + var decimals = sigfigs - 1 - log; + return (value / 1e6).ToString("f" + decimals) + "M"; + } + if (Math.Abs(value) >= 1e3 * Math.Pow(10, sigfigs - 3)) + { + var log = (int)Math.Floor(Math.Log10(Math.Abs(value) / 1e3)); + var decimals = sigfigs - 1 - log; + return (value / 1e3).ToString("f" + decimals) + "k"; + } + return value.ToString(); + } + + /// + /// Adds SI prefixes to a value and rounds it off. + /// e.g. 25000 becomes 25.00k + /// + /// + public static string ToUnitString(this double? value, bool bForBillions = false, int sigfigs = 4, string undefinedValue = "Undefined") + { + if (value == null) + return undefinedValue; + return value.Value.ToUnitString(bForBillions, sigfigs); + } + } } \ No newline at end of file diff --git a/FrEee/FrEee.csproj b/FrEee/FrEee.csproj index a8d349cac..28cc8bf40 100644 --- a/FrEee/FrEee.csproj +++ b/FrEee/FrEee.csproj @@ -17,10 +17,10 @@ - - - - + + + + diff --git a/FrEee/Game/Interfaces/ICommand.cs b/FrEee/Game/Interfaces/ICommand.cs deleted file mode 100644 index 1235eaa7d..000000000 --- a/FrEee/Game/Interfaces/ICommand.cs +++ /dev/null @@ -1,42 +0,0 @@ -using FrEee.Game.Objects.Civilization; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// A command to some object. - /// Commands are distinguished from orders by being instantaneous, rather than queued. - /// - public interface ICommand : IPromotable - { - IReferrable Executor { get; } - - long ExecutorID { get; } - - /// - /// The empire issuing the command. - /// - Empire Issuer { get; } - - /// - /// Any new (from the client) objects referred to by this command. - /// - IEnumerable NewReferrables { get; } - - /// - /// Executes the command. - /// - void Execute(); - } - - /// - /// A command to some object. - /// - public interface ICommand : ICommand where T : IReferrable - { - /// - /// The object whose queue is being manipulated. - /// - new T Executor { get; set; } - } -} \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IAbilityObject.cs b/FrEee/Interfaces/IAbilityObject.cs similarity index 89% rename from FrEee/Game/Interfaces/IAbilityObject.cs rename to FrEee/Interfaces/IAbilityObject.cs index b1a97e5aa..f77af5e20 100644 --- a/FrEee/Game/Interfaces/IAbilityObject.cs +++ b/FrEee/Interfaces/IAbilityObject.cs @@ -1,46 +1,46 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Abilities; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can have intrinsic abilities of its own that can be added and removed. - /// - public interface IAbilityContainer : IAbilityObject - { - /// - /// Intrinsic abilities of this object which can be added or removed. - /// TODO - rename to IntrinsicAbilities after the current game is over - /// - IList Abilities { get; } - } - - /// - /// Something which can have abilities. - /// - public interface IAbilityObject - { - /// - /// The type of ability target that this object represents. - /// - AbilityTargets AbilityTarget { get; } - - /// - /// Child objects that can pass up abilities to this object. - /// - IEnumerable Children { get; } - - /// - /// Abilities possessed intrinsically by this object. - /// - IEnumerable IntrinsicAbilities { get; } - - /// - /// Parent objects from which this object can inherit abilities. - /// - IEnumerable Parents { get; } - } - - public interface IReferrableAbilityObject : IReferrable, IAbilityObject { } -} \ No newline at end of file +using FrEee.Enumerations; +using FrEee.Objects.Abilities; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// Something which can have intrinsic abilities of its own that can be added and removed. + /// + public interface IAbilityContainer : IAbilityObject + { + /// + /// Intrinsic abilities of this object which can be added or removed. + /// TODO - rename to IntrinsicAbilities after the current game is over + /// + IList Abilities { get; } + } + + /// + /// Something which can have abilities. + /// + public interface IAbilityObject + { + /// + /// The type of ability target that this object represents. + /// + AbilityTargets AbilityTarget { get; } + + /// + /// Child objects that can pass up abilities to this object. + /// + IEnumerable Children { get; } + + /// + /// Abilities possessed intrinsically by this object. + /// + IEnumerable IntrinsicAbilities { get; } + + /// + /// Parent objects from which this object can inherit abilities. + /// + IEnumerable Parents { get; } + } + + public interface IReferrableAbilityObject : IReferrable, IAbilityObject { } +} diff --git a/FrEee/Game/Interfaces/ICargoContainer.cs b/FrEee/Interfaces/ICargoContainer.cs similarity index 92% rename from FrEee/Game/Interfaces/ICargoContainer.cs rename to FrEee/Interfaces/ICargoContainer.cs index 669263cf3..314a18afa 100644 --- a/FrEee/Game/Interfaces/ICargoContainer.cs +++ b/FrEee/Interfaces/ICargoContainer.cs @@ -1,64 +1,64 @@ -using FrEee.Game.Objects.Civilization; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// An object which can contain cargo. - /// - public interface ICargoContainer : IPictorial, INamed, ILocated - { - /// - /// All population stored by this cargo container, whether in a colony or in cargo. - /// - IDictionary AllPopulation { get; } - - /// - /// All units that are in or part of this cargo container. - /// - IEnumerable AllUnits { get; } - - /// - /// The cargo contained by this object. - /// - Cargo Cargo { get; } - - /// - /// The total amount of cargo storage possessed by this object. - /// - int CargoStorage { get; } - - /// - /// The amount of available population storage. - /// - long PopulationStorageFree { get; } - - /// - /// Adds population. - /// - /// - /// - /// The amount of population that could not be added due to overflow. - long AddPopulation(Race race, long amount); - - /// - /// Adds a unit. - /// - /// - /// true if there was space left to add the unit, otherwise false. - bool AddUnit(IUnit unit); - - /// - /// Removes population. - /// - /// - /// The amount of population that could not be removed due to lack of population. - long RemovePopulation(Race race, long amount); - - /// - /// Removes a unit. - /// - /// - bool RemoveUnit(IUnit unit); - } +using FrEee.Objects.Civilization; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// An object which can contain cargo. + /// + public interface ICargoContainer : IPictorial, INamed, ILocated + { + /// + /// All population stored by this cargo container, whether in a colony or in cargo. + /// + IDictionary AllPopulation { get; } + + /// + /// All units that are in or part of this cargo container. + /// + IEnumerable AllUnits { get; } + + /// + /// The cargo contained by this object. + /// + Cargo Cargo { get; } + + /// + /// The total amount of cargo storage possessed by this object. + /// + int CargoStorage { get; } + + /// + /// The amount of available population storage. + /// + long PopulationStorageFree { get; } + + /// + /// Adds population. + /// + /// + /// + /// The amount of population that could not be added due to overflow. + long AddPopulation(Race race, long amount); + + /// + /// Adds a unit. + /// + /// + /// true if there was space left to add the unit, otherwise false. + bool AddUnit(IUnit unit); + + /// + /// Removes population. + /// + /// + /// The amount of population that could not be removed due to lack of population. + long RemovePopulation(Race race, long amount); + + /// + /// Removes a unit. + /// + /// + bool RemoveUnit(IUnit unit); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/ICargoTransferrer.cs b/FrEee/Interfaces/ICargoTransferrer.cs similarity index 82% rename from FrEee/Game/Interfaces/ICargoTransferrer.cs rename to FrEee/Interfaces/ICargoTransferrer.cs index eef7e02af..4e4bdbcd3 100644 --- a/FrEee/Game/Interfaces/ICargoTransferrer.cs +++ b/FrEee/Interfaces/ICargoTransferrer.cs @@ -1,9 +1,9 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// A space object which can contain cargo and receive cargo transfer orders. - /// - public interface ICargoTransferrer : ICargoContainer, ISpaceObject, IOrderable - { - } +namespace FrEee.Interfaces +{ + /// + /// A space object which can contain cargo and receive cargo transfer orders. + /// + public interface ICargoTransferrer : ICargoContainer, ISpaceObject, IOrderable + { + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/ICleanable.cs b/FrEee/Interfaces/ICleanable.cs similarity index 78% rename from FrEee/Game/Interfaces/ICleanable.cs rename to FrEee/Interfaces/ICleanable.cs index cf856b82a..30862ffd0 100644 --- a/FrEee/Game/Interfaces/ICleanable.cs +++ b/FrEee/Interfaces/ICleanable.cs @@ -1,10 +1,10 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// For classes that need extra processing after being copied or whatnot. - /// - public interface ICleanable - { - void Clean(); - } +namespace FrEee.Interfaces +{ + /// + /// For classes that need extra processing after being copied or whatnot. + /// + public interface ICleanable + { + void Clean(); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/ICombatSpaceObject.cs b/FrEee/Interfaces/ICombatSpaceObject.cs similarity index 78% rename from FrEee/Game/Interfaces/ICombatSpaceObject.cs rename to FrEee/Interfaces/ICombatSpaceObject.cs index fdae2ab22..94be2dd0e 100644 --- a/FrEee/Game/Interfaces/ICombatSpaceObject.cs +++ b/FrEee/Interfaces/ICombatSpaceObject.cs @@ -1,9 +1,9 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// A space object that can participate in combat. - /// - public interface ICombatSpaceObject : ICombatant, ISpaceObject - { - } +namespace FrEee.Interfaces +{ + /// + /// A space object that can participate in combat. + /// + public interface ICombatSpaceObject : ICombatant, ISpaceObject + { + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/ICombatant.cs b/FrEee/Interfaces/ICombatant.cs similarity index 90% rename from FrEee/Game/Interfaces/ICombatant.cs rename to FrEee/Interfaces/ICombatant.cs index c68915909..446ca2449 100644 --- a/FrEee/Game/Interfaces/ICombatant.cs +++ b/FrEee/Interfaces/ICombatant.cs @@ -1,62 +1,62 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Technology; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// An object that can fire weapons and/or targeted by weapons. - /// - public interface ICombatant : IPictorial, ITargetable, IDisposable, IFoggable, INamed - { - /// - /// Accuracy rating of this combatant. - /// - int Accuracy { get; } - - /// - /// How fast can this combatant move in combat? - /// - double CombatSpeed { get; } - - /// - /// Is this combatant still alive or is it destroyed/glassed? - /// - bool IsAlive { get; } - - /// - /// How many targets can this combatant fire on per round (excluding point defense weapons or warheads)? - /// - int MaxTargets { get; } - - /// - /// Any components of this combatant. - /// - IEnumerable Components { get; } - - /// - /// Any undamaged weapons this combatant is armed with. - /// - IEnumerable Weapons { get; } - - /// - /// Can this object fire on another object? - /// - /// - /// true if the target is an enemy and this combatant has weapons capable of targeting it - bool CanTarget(ITargetable target); - - bool IsHostileTo(Empire emp); - - /// - /// Does this combatant "fill" a tile (prevent other tile-filling combatants from occupying the tile)? - /// - bool FillsCombatTile { get; } - - /// - /// The size of this combatant. Used for determining who goes where in a formation. - /// - int Size { get; } - } +using FrEee.Objects.Civilization; +using FrEee.Objects.Technology; +using System; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// An object that can fire weapons and/or targeted by weapons. + /// + public interface ICombatant : IPictorial, ITargetable, IDisposable, IFoggable, INamed + { + /// + /// Accuracy rating of this combatant. + /// + int Accuracy { get; } + + /// + /// How fast can this combatant move in combat? + /// + double CombatSpeed { get; } + + /// + /// Is this combatant still alive or is it destroyed/glassed? + /// + bool IsAlive { get; } + + /// + /// How many targets can this combatant fire on per round (excluding point defense weapons or warheads)? + /// + int MaxTargets { get; } + + /// + /// Any components of this combatant. + /// + IEnumerable Components { get; } + + /// + /// Any undamaged weapons this combatant is armed with. + /// + IEnumerable Weapons { get; } + + /// + /// Can this object fire on another object? + /// + /// + /// true if the target is an enemy and this combatant has weapons capable of targeting it + bool CanTarget(ITargetable target); + + bool IsHostileTo(Empire emp); + + /// + /// Does this combatant "fill" a tile (prevent other tile-filling combatants from occupying the tile)? + /// + bool FillsCombatTile { get; } + + /// + /// The size of this combatant. Used for determining who goes where in a formation. + /// + int Size { get; } + } } \ No newline at end of file diff --git a/FrEee/Interfaces/ICommand.cs b/FrEee/Interfaces/ICommand.cs new file mode 100644 index 000000000..a985ce23c --- /dev/null +++ b/FrEee/Interfaces/ICommand.cs @@ -0,0 +1,41 @@ +using FrEee.Objects.Civilization; +using System.Collections.Generic; + +namespace FrEee.Interfaces; + +/// +/// A command to some object. +/// Commands are distinguished from orders by being instantaneous, rather than queued. +/// +public interface ICommand : IPromotable +{ + IReferrable Executor { get; } + + long ExecutorID { get; } + + /// + /// The empire issuing the command. + /// + Empire Issuer { get; } + + /// + /// Any new (from the client) objects referred to by this command. + /// + IEnumerable NewReferrables { get; } + + /// + /// Executes the command. + /// + void Execute(); +} + +/// +/// A command to some object. +/// +public interface ICommand : ICommand where T : IReferrable +{ + /// + /// The object whose queue is being manipulated. + /// + new T Executor { get; set; } +} diff --git a/FrEee/Game/Interfaces/ICommonAbilityObject.cs b/FrEee/Interfaces/ICommonAbilityObject.cs similarity index 82% rename from FrEee/Game/Interfaces/ICommonAbilityObject.cs rename to FrEee/Interfaces/ICommonAbilityObject.cs index 39b8b1aba..4e210f0f2 100644 --- a/FrEee/Game/Interfaces/ICommonAbilityObject.cs +++ b/FrEee/Interfaces/ICommonAbilityObject.cs @@ -1,18 +1,18 @@ -using FrEee.Game.Objects.Civilization; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// An object that can contain different abilities for different empires. - /// - public interface ICommonAbilityObject : IAbilityObject - { - /// - /// Finds any child ability objects owned by an empire. - /// - /// - /// - IEnumerable GetContainedAbilityObjects(Empire emp); - } +using FrEee.Objects.Civilization; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// An object that can contain different abilities for different empires. + /// + public interface ICommonAbilityObject : IAbilityObject + { + /// + /// Finds any child ability objects owned by an empire. + /// + /// + /// + IEnumerable GetContainedAbilityObjects(Empire emp); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IConstructable.cs b/FrEee/Interfaces/IConstructable.cs similarity index 87% rename from FrEee/Game/Interfaces/IConstructable.cs rename to FrEee/Interfaces/IConstructable.cs index 5d3ad7fa4..5ffc6e405 100644 --- a/FrEee/Game/Interfaces/IConstructable.cs +++ b/FrEee/Interfaces/IConstructable.cs @@ -1,37 +1,37 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can be constructed at a construction queue. - /// - public interface IConstructable : INamed, IPictorial, ITransferrable - { - /// - /// The progress toward constructing this item. - /// - ResourceQuantity ConstructionProgress { get; set; } - - /// - /// The resource cost to build this item. - /// - ResourceQuantity Cost { get; } - - /// - /// The empire which owns this item. - /// - new Empire Owner { get; set; } - - /// - /// The construction template used to build this item. - /// - IConstructionTemplate Template { get; } - - /// - /// Places the newly constructed item at a location. - /// - /// The space object which the item should be placed on or near. - void Place(ISpaceObject target); - } +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Interfaces +{ + /// + /// Something which can be constructed at a construction queue. + /// + public interface IConstructable : INamed, IPictorial, ITransferrable + { + /// + /// The progress toward constructing this item. + /// + ResourceQuantity ConstructionProgress { get; set; } + + /// + /// The resource cost to build this item. + /// + ResourceQuantity Cost { get; } + + /// + /// The empire which owns this item. + /// + new Empire Owner { get; set; } + + /// + /// The construction template used to build this item. + /// + IConstructionTemplate Template { get; } + + /// + /// Places the newly constructed item at a location. + /// + /// The space object which the item should be placed on or near. + void Place(ISpaceObject target); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IConstructionOrder.cs b/FrEee/Interfaces/IConstructionOrder.cs similarity index 78% rename from FrEee/Game/Interfaces/IConstructionOrder.cs rename to FrEee/Interfaces/IConstructionOrder.cs index 7c2d0f92f..10ab1c745 100644 --- a/FrEee/Game/Interfaces/IConstructionOrder.cs +++ b/FrEee/Interfaces/IConstructionOrder.cs @@ -1,28 +1,28 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; - -namespace FrEee.Game.Interfaces -{ - public interface IConstructionOrder : IOrder, INamed - { - /// - /// The cost of the construction. - /// - ResourceQuantity Cost { get; } - - /// - /// The item being constructed. - /// - IConstructable Item { get; } - - /// - /// The template. - /// - IConstructionTemplate Template { get; } - - /// - /// Resets this order so it can be repeated. - /// - void Reset(); - } +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Interfaces +{ + public interface IConstructionOrder : IOrder, INamed + { + /// + /// The cost of the construction. + /// + ResourceQuantity Cost { get; } + + /// + /// The item being constructed. + /// + IConstructable Item { get; } + + /// + /// The template. + /// + IConstructionTemplate Template { get; } + + /// + /// Resets this order so it can be repeated. + /// + void Reset(); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IConstructionTemplate.cs b/FrEee/Interfaces/IConstructionTemplate.cs similarity index 85% rename from FrEee/Game/Interfaces/IConstructionTemplate.cs rename to FrEee/Interfaces/IConstructionTemplate.cs index b3446e825..84d8340c8 100644 --- a/FrEee/Game/Interfaces/IConstructionTemplate.cs +++ b/FrEee/Interfaces/IConstructionTemplate.cs @@ -1,34 +1,34 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; - -namespace FrEee.Game.Interfaces -{ - /// - /// Template for constructable items. - /// - /// - public interface IConstructionTemplate : IReferrable, IPictorial, IResearchable - { - /// - /// The cost to build it. - /// - ResourceQuantity Cost { get; } - - /// - /// Does this template require a colony to build it? - /// - bool RequiresColonyQueue { get; } - - /// - /// Does this template require a space yard to build it? - /// - bool RequiresSpaceYardQueue { get; } - - /// - /// Has the empire unlocked this construction template? - /// - /// - /// - bool HasBeenUnlockedBy(Empire emp); - } +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Interfaces +{ + /// + /// Template for constructable items. + /// + /// + public interface IConstructionTemplate : IReferrable, IPictorial, IResearchable + { + /// + /// The cost to build it. + /// + ResourceQuantity Cost { get; } + + /// + /// Does this template require a colony to build it? + /// + bool RequiresColonyQueue { get; } + + /// + /// Does this template require a space yard to build it? + /// + bool RequiresSpaceYardQueue { get; } + + /// + /// Has the empire unlocked this construction template? + /// + /// + /// + bool HasBeenUnlockedBy(Empire emp); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IConstructor.cs b/FrEee/Interfaces/IConstructor.cs similarity index 80% rename from FrEee/Game/Interfaces/IConstructor.cs rename to FrEee/Interfaces/IConstructor.cs index 45a69ba9a..fd8f49ae2 100644 --- a/FrEee/Game/Interfaces/IConstructor.cs +++ b/FrEee/Interfaces/IConstructor.cs @@ -1,20 +1,20 @@ -using FrEee.Game.Objects.Civilization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which has a construction queue. - /// - public interface IConstructor : ISpaceObject, IOwnable - { - /// - /// This object's construction queue, if any. - /// - ConstructionQueue ConstructionQueue { get; } - } -} +using FrEee.Objects.Civilization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Interfaces +{ + /// + /// Something which has a construction queue. + /// + public interface IConstructor : ISpaceObject, IOwnable + { + /// + /// This object's construction queue, if any. + /// + ConstructionQueue ConstructionQueue { get; } + } +} diff --git a/FrEee/Game/Interfaces/IContainable.cs b/FrEee/Interfaces/IContainable.cs similarity index 78% rename from FrEee/Game/Interfaces/IContainable.cs rename to FrEee/Interfaces/IContainable.cs index 5091f1620..f407eec0a 100644 --- a/FrEee/Game/Interfaces/IContainable.cs +++ b/FrEee/Interfaces/IContainable.cs @@ -1,16 +1,16 @@ -using FrEee.Utility; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can be contained by another object. - /// - public interface IContainable - { - /// - /// The container of this object. - /// - [DoNotCopy] - TContainer Container { get; } - } -} \ No newline at end of file +using FrEee.Serialization; + +namespace FrEee.Interfaces +{ + /// + /// Something which can be contained by another object. + /// + public interface IContainable + { + /// + /// The container of this object. + /// + [DoNotCopy] + TContainer Container { get; } + } +} diff --git a/FrEee/Game/Interfaces/ICreateDesignCommand.cs b/FrEee/Interfaces/ICreateDesignCommand.cs similarity index 67% rename from FrEee/Game/Interfaces/ICreateDesignCommand.cs rename to FrEee/Interfaces/ICreateDesignCommand.cs index 8160c73ab..6805aadb2 100644 --- a/FrEee/Game/Interfaces/ICreateDesignCommand.cs +++ b/FrEee/Interfaces/ICreateDesignCommand.cs @@ -1,12 +1,12 @@ -using FrEee.Game.Objects.Civilization; - -namespace FrEee.Game.Interfaces -{ - /// - /// A command for an empire to create a design. - /// - public interface ICreateDesignCommand : ICommand - { - IDesign Design { get; } - } +using FrEee.Objects.Civilization; + +namespace FrEee.Interfaces +{ + /// + /// A command for an empire to create a design. + /// + public interface ICreateDesignCommand : ICommand + { + IDesign Design { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IDamageable.cs b/FrEee/Interfaces/IDamageable.cs similarity index 91% rename from FrEee/Game/Interfaces/IDamageable.cs rename to FrEee/Interfaces/IDamageable.cs index 0493d6535..0a2ea2da5 100644 --- a/FrEee/Game/Interfaces/IDamageable.cs +++ b/FrEee/Interfaces/IDamageable.cs @@ -1,78 +1,78 @@ -using FrEee.Game.Objects.Combat; -using FrEee.Modding; -using FrEee.Utility; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can take damage. - /// - public interface IDamageable - { - int ArmorHitpoints { get; } - - /// - /// The chance for this object to be hit relative to another object that could also be hit by the same shot. - /// - int HitChance { get; } - - /// - /// Current hitpoints. - /// - int Hitpoints { get; set; } - - int HullHitpoints { get; } - - /// - /// Is this object destroyed? - /// - bool IsDestroyed { get; } - - int MaxArmorHitpoints { get; } - - int MaxHitpoints { get; } - - int MaxHullHitpoints { get; } - - int MaxNormalShields { get; } - - int MaxPhasedShields { get; } - - int MaxShieldHitpoints { get; } - - /// - /// Normal shield points. - /// - int NormalShields { get; set; } - - /// - /// Phased shield points. - /// - int PhasedShields { get; set; } - - int ShieldHitpoints { get; } - - /// - /// Replenishes HP. - /// If amount is are not specified, replenishes all HP. - /// Otherwise repair points have a different effect on different objects. - /// E.g. on a ship a repair point repairs 1 component while on a component a repair point replenishes 1 HP. - /// - /// The amount of unused repair points left over, or null for infinite. - int? Repair(int? amount = null); - - /// - /// Replenishes normal and phased shields. - /// - /// How many shields to replenish, or null to replenish all of them. - void ReplenishShields(int? amount = null); - - /// - /// Takes damage. - /// - /// Leftover damage. - int TakeDamage(Hit hit, PRNG dice = null); - } - - public interface IDamageableReferrable : IDamageable, IReferrable { } +using FrEee.Objects.Combat; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Interfaces +{ + /// + /// Something which can take damage. + /// + public interface IDamageable + { + int ArmorHitpoints { get; } + + /// + /// The chance for this object to be hit relative to another object that could also be hit by the same shot. + /// + int HitChance { get; } + + /// + /// Current hitpoints. + /// + int Hitpoints { get; set; } + + int HullHitpoints { get; } + + /// + /// Is this object destroyed? + /// + bool IsDestroyed { get; } + + int MaxArmorHitpoints { get; } + + int MaxHitpoints { get; } + + int MaxHullHitpoints { get; } + + int MaxNormalShields { get; } + + int MaxPhasedShields { get; } + + int MaxShieldHitpoints { get; } + + /// + /// Normal shield points. + /// + int NormalShields { get; set; } + + /// + /// Phased shield points. + /// + int PhasedShields { get; set; } + + int ShieldHitpoints { get; } + + /// + /// Replenishes HP. + /// If amount is are not specified, replenishes all HP. + /// Otherwise repair points have a different effect on different objects. + /// E.g. on a ship a repair point repairs 1 component while on a component a repair point replenishes 1 HP. + /// + /// The amount of unused repair points left over, or null for infinite. + int? Repair(int? amount = null); + + /// + /// Replenishes normal and phased shields. + /// + /// How many shields to replenish, or null to replenish all of them. + void ReplenishShields(int? amount = null); + + /// + /// Takes damage. + /// + /// Leftover damage. + int TakeDamage(Hit hit, PRNG dice = null); + } + + public interface IDamageableReferrable : IDamageable, IReferrable { } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IDesign.cs b/FrEee/Interfaces/IDesign.cs similarity index 91% rename from FrEee/Game/Interfaces/IDesign.cs rename to FrEee/Interfaces/IDesign.cs index 4784dbb61..5bac8a86b 100644 --- a/FrEee/Game/Interfaces/IDesign.cs +++ b/FrEee/Interfaces/IDesign.cs @@ -1,150 +1,150 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Technology; -using FrEee.Modding.Templates; -using FrEee.Utility; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// A vehicle design. - /// - public interface IDesign : INamed, IPictorial, IOwnableAbilityObject, IConstructionTemplate, IPromotable, IFoggable, IUpgradeable, ICleanable - { - int Accuracy { get; } - - int ArmorHitpoints { get; } - - /// - /// The base name of the design, without the iteration number. - /// - string BaseName { get; set; } - - int CargoCapacity { get; } - - int CargoStorage { get; } - - /// - /// The movement speed of the design in combat. - /// - double CombatSpeed { get; } - - /// - /// The vehicle's components. - /// - IList Components { get; } - - int Evasion { get; } - - /// - /// The vehicle's hull. - /// - IHull Hull { get; set; } - - int HullHitpoints { get; } - - /// - /// Is this a newly created design on the client side that needs to be sent to the server? - /// - bool IsNew { get; set; } - - /// - /// Is this design obsolete? - /// Note that foreign designs will never be obsoleted, since you don't know when their owner obsoleted them. - /// - new bool IsObsolete { get; set; } - - /// - /// Is this design valid in the current mod? Or is it using techs from other mods? - /// - bool IsValidInMod { get; } - - int Iteration { get; set; } - - ResourceQuantity MaintenanceCost { get; } - - /// - /// The name of the design. - /// - new string Name { get; } - - /// - /// The empire which created this design. - /// - new Empire Owner { get; set; } - - /// - /// The ship's role (design type in SE4). - /// - string Role { get; set; } - - int ShieldHitpoints { get; } - - int ShieldRegeneration { get; } - - /// - /// Unused space on the design. - /// - int SpaceFree { get; } - - /// - /// The movement speed of the design, in sectors per turn. - /// - int StrategicSpeed { get; } - - int SupplyStorage { get; } - - /// - /// Supply used for each sector of movement. - /// - int SupplyUsagePerSector { get; } - - /// - /// The turn this design was created (for our designs) or discovered (for alien designs). - /// - int TurnNumber { get; set; } - - int VehiclesBuilt { get; set; } - - /// - /// The vehicle type. - /// - VehicleTypes VehicleType { get; } - - /// - /// The name of the vehicle type. - /// - string VehicleTypeName { get; } - - /// - /// Warnings that need to be resolved before the design can be saved. - /// - IEnumerable Warnings { get; } - - void AddComponent(ComponentTemplate ct, Mount m = null); - - /// - /// Creates an order to build this design. - /// - /// - IConstructionOrder CreateConstructionOrder(ConstructionQueue queue); - - /// - /// Creates a command to create this design on the server. - /// - /// - ICreateDesignCommand CreateCreationCommand(); - - IVehicle Instantiate(); - - IDesign Upgrade(); - } - - public interface IDesign : IDesign, IPictorial, IReferrable, IUpgradeable> where T : IVehicle - { - new T Instantiate(); - - new IDesign Upgrade(); - } -} +using FrEee.Enumerations; +using FrEee.Objects.Civilization; +using FrEee.Objects.Technology; +using FrEee.Modding.Templates; +using FrEee.Utility; using FrEee.Serialization; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// A vehicle design. + /// + public interface IDesign : INamed, IPictorial, IOwnableAbilityObject, IConstructionTemplate, IPromotable, IFoggable, IUpgradeable, ICleanable + { + int Accuracy { get; } + + int ArmorHitpoints { get; } + + /// + /// The base name of the design, without the iteration number. + /// + string BaseName { get; set; } + + int CargoCapacity { get; } + + int CargoStorage { get; } + + /// + /// The movement speed of the design in combat. + /// + double CombatSpeed { get; } + + /// + /// The vehicle's components. + /// + IList Components { get; } + + int Evasion { get; } + + /// + /// The vehicle's hull. + /// + IHull Hull { get; set; } + + int HullHitpoints { get; } + + /// + /// Is this a newly created design on the client side that needs to be sent to the server? + /// + bool IsNew { get; set; } + + /// + /// Is this design obsolete? + /// Note that foreign designs will never be obsoleted, since you don't know when their owner obsoleted them. + /// + new bool IsObsolete { get; set; } + + /// + /// Is this design valid in the current mod? Or is it using techs from other mods? + /// + bool IsValidInMod { get; } + + int Iteration { get; set; } + + ResourceQuantity MaintenanceCost { get; } + + /// + /// The name of the design. + /// + new string Name { get; } + + /// + /// The empire which created this design. + /// + new Empire Owner { get; set; } + + /// + /// The ship's role (design type in SE4). + /// + string Role { get; set; } + + int ShieldHitpoints { get; } + + int ShieldRegeneration { get; } + + /// + /// Unused space on the design. + /// + int SpaceFree { get; } + + /// + /// The movement speed of the design, in sectors per turn. + /// + int StrategicSpeed { get; } + + int SupplyStorage { get; } + + /// + /// Supply used for each sector of movement. + /// + int SupplyUsagePerSector { get; } + + /// + /// The turn this design was created (for our designs) or discovered (for alien designs). + /// + int TurnNumber { get; set; } + + int VehiclesBuilt { get; set; } + + /// + /// The vehicle type. + /// + VehicleTypes VehicleType { get; } + + /// + /// The name of the vehicle type. + /// + string VehicleTypeName { get; } + + /// + /// Warnings that need to be resolved before the design can be saved. + /// + IEnumerable Warnings { get; } + + void AddComponent(ComponentTemplate ct, Mount m = null); + + /// + /// Creates an order to build this design. + /// + /// + IConstructionOrder CreateConstructionOrder(ConstructionQueue queue); + + /// + /// Creates a command to create this design on the server. + /// + /// + ICreateDesignCommand CreateCreationCommand(); + + IVehicle Instantiate(); + + IDesign Upgrade(); + } + + public interface IDesign : IDesign, IPictorial, IReferrable, IUpgradeable> where T : IVehicle + { + new T Instantiate(); + + new IDesign Upgrade(); + } +} diff --git a/FrEee/Game/Interfaces/IErrorProne.cs b/FrEee/Interfaces/IErrorProne.cs similarity index 74% rename from FrEee/Game/Interfaces/IErrorProne.cs rename to FrEee/Interfaces/IErrorProne.cs index 8c36afe8c..59da9700b 100644 --- a/FrEee/Game/Interfaces/IErrorProne.cs +++ b/FrEee/Interfaces/IErrorProne.cs @@ -1,9 +1,9 @@ -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - public interface IErrorProne - { - IEnumerable Errors { get; } - } +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + public interface IErrorProne + { + IEnumerable Errors { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IFoggable.cs b/FrEee/Interfaces/IFoggable.cs similarity index 87% rename from FrEee/Game/Interfaces/IFoggable.cs rename to FrEee/Interfaces/IFoggable.cs index 4831082b6..6fa754f26 100644 --- a/FrEee/Game/Interfaces/IFoggable.cs +++ b/FrEee/Interfaces/IFoggable.cs @@ -1,40 +1,40 @@ -using System; -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Civilization; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something that can be obscured by fog of war. - /// - public interface IFoggable : IDisposable - { - /// - /// Is this object just a memory, or a real object? - /// - bool IsMemory { get; set; } - - /// - /// The time at which this object was last seen. - /// E.g. 2.5 would be halfway through the second turn. - /// - double Timestamp { get; set; } - - /// - /// The visibility of this object to an empire. - /// - Visibility CheckVisibility(Empire emp); - - /// - /// Is this object an obsolete memory? - /// Memories become obsolete when the object's last known location is visible, - /// but the object has not been seen for at least 1 full turn. - /// - bool IsObsoleteMemory(Empire emp); - - /// - /// Removes any data from this object that the specified empire cannot see. - /// - void Redact(Empire emp); - } +using System; +using FrEee.Enumerations; +using FrEee.Objects.Civilization; + +namespace FrEee.Interfaces +{ + /// + /// Something that can be obscured by fog of war. + /// + public interface IFoggable : IDisposable + { + /// + /// Is this object just a memory, or a real object? + /// + bool IsMemory { get; set; } + + /// + /// The time at which this object was last seen. + /// E.g. 2.5 would be halfway through the second turn. + /// + double Timestamp { get; set; } + + /// + /// The visibility of this object to an empire. + /// + Visibility CheckVisibility(Empire emp); + + /// + /// Is this object an obsolete memory? + /// Memories become obsolete when the object's last known location is visible, + /// but the object has not been seen for at least 1 full turn. + /// + bool IsObsoleteMemory(Empire emp); + + /// + /// Removes any data from this object that the specified empire cannot see. + /// + void Redact(Empire emp); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IHull.cs b/FrEee/Interfaces/IHull.cs similarity index 92% rename from FrEee/Game/Interfaces/IHull.cs rename to FrEee/Interfaces/IHull.cs index cfe41c009..6949324e9 100644 --- a/FrEee/Game/Interfaces/IHull.cs +++ b/FrEee/Interfaces/IHull.cs @@ -1,103 +1,103 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Technology; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using System.Collections.Generic; -using System.Drawing; - -namespace FrEee.Game.Interfaces -{ - public interface IHull : IModObject, IResearchable, IAbilityContainer, IPictorial, IUpgradeable - { - /// - /// Can this hull use components with the Ship Auxiliary Control ability? - /// - bool CanUseAuxiliaryControl { get; set; } - - string Code { get; set; } - ResourceQuantity Cost { get; set; } - string Description { get; set; } - - /// - /// Maximum number of engines allowed. - /// - int MaxEngines { get; set; } - - /// - /// Required number of crew quarters components. - /// - int MinCrewQuarters { get; set; } - - /// - /// Required number of life support components. - /// - int MinLifeSupport { get; set; } - - /// - /// Minimum percentage of space required to be used for cargo-storage components. - /// - int MinPercentCargoBays { get; set; } - - /// - /// Minimum percentage of space required to be used for colonizing components. - /// - int MinPercentColonyModules { get; set; } - - /// - /// Minimum percentage of space required to be used for fighter-launching components. - /// - int MinPercentFighterBays { get; set; } - - new string Name { get; set; } - - /// - /// Does this hull need a component with the Ship Bridge ability? - /// - bool NeedsBridge { get; set; } - - IList PictureNames { get; } - - string ShortName { get; set; } - - int Size { get; set; } - - /// - /// Thrust points required to move one sector per turn. - /// SE4 called this "engines per move" but this was a misnomer because engines were allowed to produce more than one thrust point. - /// - int ThrustPerMove { get; set; } - - /// - /// The vehicle type of this hull. - /// - VehicleTypes VehicleType { get; } - - string VehicleTypeName { get; } - - /// - /// Can this hull use a mount? - /// - /// - /// - bool CanUseMount(Mount m); - - Image GetIcon(string shipsetPath); - - Image GetPortrait(string shipsetPath); - } - - /// - /// A vehicle hull. - /// - public interface IHull : IHull, IUpgradeable> where T : IVehicle - { - new bool IsObsolescent { get; } - - // to deal with ambiguity between implementing IHull and IHull - new bool IsObsolete { get; } - - new IHull LatestVersion { get; } - new IEnumerable> NewerVersions { get; } - new IEnumerable> OlderVersions { get; } - } +using FrEee.Enumerations; +using FrEee.Objects.Technology; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using System.Collections.Generic; +using System.Drawing; + +namespace FrEee.Interfaces +{ + public interface IHull : IModObject, IResearchable, IAbilityContainer, IPictorial, IUpgradeable + { + /// + /// Can this hull use components with the Ship Auxiliary Control ability? + /// + bool CanUseAuxiliaryControl { get; set; } + + string Code { get; set; } + ResourceQuantity Cost { get; set; } + string Description { get; set; } + + /// + /// Maximum number of engines allowed. + /// + int MaxEngines { get; set; } + + /// + /// Required number of crew quarters components. + /// + int MinCrewQuarters { get; set; } + + /// + /// Required number of life support components. + /// + int MinLifeSupport { get; set; } + + /// + /// Minimum percentage of space required to be used for cargo-storage components. + /// + int MinPercentCargoBays { get; set; } + + /// + /// Minimum percentage of space required to be used for colonizing components. + /// + int MinPercentColonyModules { get; set; } + + /// + /// Minimum percentage of space required to be used for fighter-launching components. + /// + int MinPercentFighterBays { get; set; } + + new string Name { get; set; } + + /// + /// Does this hull need a component with the Ship Bridge ability? + /// + bool NeedsBridge { get; set; } + + IList PictureNames { get; } + + string ShortName { get; set; } + + int Size { get; set; } + + /// + /// Thrust points required to move one sector per turn. + /// SE4 called this "engines per move" but this was a misnomer because engines were allowed to produce more than one thrust point. + /// + int ThrustPerMove { get; set; } + + /// + /// The vehicle type of this hull. + /// + VehicleTypes VehicleType { get; } + + string VehicleTypeName { get; } + + /// + /// Can this hull use a mount? + /// + /// + /// + bool CanUseMount(Mount m); + + Image GetIcon(string shipsetPath); + + Image GetPortrait(string shipsetPath); + } + + /// + /// A vehicle hull. + /// + public interface IHull : IHull, IUpgradeable> where T : IVehicle + { + new bool IsObsolescent { get; } + + // to deal with ambiguity between implementing IHull and IHull + new bool IsObsolete { get; } + + new IHull LatestVersion { get; } + new IEnumerable> NewerVersions { get; } + new IEnumerable> OlderVersions { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IIncomeProducer.cs b/FrEee/Interfaces/IIncomeProducer.cs similarity index 90% rename from FrEee/Game/Interfaces/IIncomeProducer.cs rename to FrEee/Interfaces/IIncomeProducer.cs index fcb2e0503..e93ff1bb3 100644 --- a/FrEee/Game/Interfaces/IIncomeProducer.cs +++ b/FrEee/Interfaces/IIncomeProducer.cs @@ -1,34 +1,34 @@ -using FrEee.Utility; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can produce income for an empire. - /// - public interface IIncomeProducer : IOwnableAbilityObject, ILocated - { - /// - /// Ratio of income from this object that occurs even without a spaceport. - /// 1.0 = all of it - /// 0.5 = half of it - /// 0.0 = none of it - /// - double MerchantsRatio { get; } - - /// - /// Modifiers to remote mining due to racial aptitudes and the like. - /// - ResourceQuantity RemoteMiningIncomePercentages { get; } - - /// - /// Value for mined resources. - /// - ResourceQuantity ResourceValue { get; } - - /// - /// Modifiers to standard income due to population, happiness, racial aptitudes, lack of spaceport, etc. - /// 100% = normal income - /// - ResourceQuantity StandardIncomePercentages { get; } - } +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Interfaces +{ + /// + /// Something which can produce income for an empire. + /// + public interface IIncomeProducer : IOwnableAbilityObject, ILocated + { + /// + /// Ratio of income from this object that occurs even without a spaceport. + /// 1.0 = all of it + /// 0.5 = half of it + /// 0.0 = none of it + /// + double MerchantsRatio { get; } + + /// + /// Modifiers to remote mining due to racial aptitudes and the like. + /// + ResourceQuantity RemoteMiningIncomePercentages { get; } + + /// + /// Value for mined resources. + /// + ResourceQuantity ResourceValue { get; } + + /// + /// Modifiers to standard income due to population, happiness, racial aptitudes, lack of spaceport, etc. + /// 100% = normal income + /// + ResourceQuantity StandardIncomePercentages { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/ILocated.cs b/FrEee/Interfaces/ILocated.cs similarity index 71% rename from FrEee/Game/Interfaces/ILocated.cs rename to FrEee/Interfaces/ILocated.cs index fb63e042d..07f1caa29 100644 --- a/FrEee/Game/Interfaces/ILocated.cs +++ b/FrEee/Interfaces/ILocated.cs @@ -1,14 +1,14 @@ -using FrEee.Game.Objects.Space; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which is located in a sector, or is a sector itself. - /// - public interface ILocated - { - Sector Sector { get; set; } - - StarSystem StarSystem { get; } - } +using FrEee.Objects.Space; + +namespace FrEee.Interfaces +{ + /// + /// Something which is located in a sector, or is a sector itself. + /// + public interface ILocated + { + Sector Sector { get; set; } + + StarSystem StarSystem { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IMessage.cs b/FrEee/Interfaces/IMessage.cs similarity index 75% rename from FrEee/Game/Interfaces/IMessage.cs rename to FrEee/Interfaces/IMessage.cs index 102179772..e65b2f758 100644 --- a/FrEee/Game/Interfaces/IMessage.cs +++ b/FrEee/Interfaces/IMessage.cs @@ -1,15 +1,15 @@ -using FrEee.Game.Objects.Civilization; - -namespace FrEee.Game.Interfaces -{ - /// - /// A diplomatic message. - /// - public interface IMessage : IFoggable, IPictorial, IPromotable, IReferrable - { - IMessage InReplyTo { get; set; } - Empire Recipient { get; set; } - string Text { get; set; } - int TurnNumber { get; set; } - } +using FrEee.Objects.Civilization; + +namespace FrEee.Interfaces +{ + /// + /// A diplomatic message. + /// + public interface IMessage : IFoggable, IPictorial, IPromotable, IReferrable + { + IMessage InReplyTo { get; set; } + Empire Recipient { get; set; } + string Text { get; set; } + int TurnNumber { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IMineableSpaceObject.cs b/FrEee/Interfaces/IMineableSpaceObject.cs similarity index 69% rename from FrEee/Game/Interfaces/IMineableSpaceObject.cs rename to FrEee/Interfaces/IMineableSpaceObject.cs index 1196d924a..9b1b0273b 100644 --- a/FrEee/Game/Interfaces/IMineableSpaceObject.cs +++ b/FrEee/Interfaces/IMineableSpaceObject.cs @@ -1,12 +1,12 @@ -using FrEee.Utility; - -namespace FrEee.Game.Interfaces -{ - /// - /// A space object with a resource value. - /// - public interface IMineableSpaceObject : ISpaceObject - { - ResourceQuantity ResourceValue { get; } - } +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Interfaces +{ + /// + /// A space object with a resource value. + /// + public interface IMineableSpaceObject : ISpaceObject + { + ResourceQuantity ResourceValue { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IMobileSpaceObject.cs b/FrEee/Interfaces/IMobileSpaceObject.cs similarity index 88% rename from FrEee/Game/Interfaces/IMobileSpaceObject.cs rename to FrEee/Interfaces/IMobileSpaceObject.cs index 9667833bb..1917c2741 100644 --- a/FrEee/Game/Interfaces/IMobileSpaceObject.cs +++ b/FrEee/Interfaces/IMobileSpaceObject.cs @@ -1,41 +1,41 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// An object that can move about in space and/or receive orders. - /// - public interface IMobileSpaceObject : ICombatSpaceObject, IOrderable, IContainable, IDamageableReferrable - { - new Fleet Container { get; set; } - - /// - /// The Dijkstra map used for pathfinding. - /// - IDictionary, ISet>> DijkstraMap { get; set; } - - ResourceQuantity MaintenanceCost { get; } - int MovementRemaining { get; set; } - new Sector Sector { get; set; } - - int StrategicSpeed { get; } - - int SupplyRemaining { get; set; } - double TimePerMove { get; } - double TimeToNextMove { get; set; } - - /// - /// Burns the supplies necessary to move one sector. - /// - void BurnMovementSupplies(); - - void SpendTime(double timeElapsed); - } - - public interface IMobileSpaceObject : IMobileSpaceObject where T : IMobileSpaceObject - { - //new IList Orders { get; } - } +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// An object that can move about in space and/or receive orders. + /// + public interface IMobileSpaceObject : ICombatSpaceObject, IOrderable, IContainable, IDamageableReferrable + { + new Fleet Container { get; set; } + + /// + /// The Dijkstra map used for pathfinding. + /// + IDictionary, ISet>> DijkstraMap { get; set; } + + ResourceQuantity MaintenanceCost { get; } + int MovementRemaining { get; set; } + new Sector Sector { get; set; } + + int StrategicSpeed { get; } + + int SupplyRemaining { get; set; } + double TimePerMove { get; } + double TimeToNextMove { get; set; } + + /// + /// Burns the supplies necessary to move one sector. + /// + void BurnMovementSupplies(); + + void SpendTime(double timeElapsed); + } + + public interface IMobileSpaceObject : IMobileSpaceObject where T : IMobileSpaceObject + { + //new IList Orders { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IMovementOrder.cs b/FrEee/Interfaces/IMovementOrder.cs similarity index 88% rename from FrEee/Game/Interfaces/IMovementOrder.cs rename to FrEee/Interfaces/IMovementOrder.cs index 6ab901329..6631d890e 100644 --- a/FrEee/Game/Interfaces/IMovementOrder.cs +++ b/FrEee/Interfaces/IMovementOrder.cs @@ -1,38 +1,38 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// An order which moves a space object. - /// - public interface IMovementOrder : IOrder - { - /// - /// The sector we are moving to. - /// - Sector Destination { get; } - - /// - /// Did we already log a pathfinding error this turn? - /// - bool LoggedPathfindingError { get; } - - /// - /// Creates a Dijkstra map for this order's movement. - /// - /// - /// - /// - IDictionary, ISet>> CreateDijkstraMap(IMobileSpaceObject me, Sector start); - - /// - /// Finds the path for executing this order. - /// - /// The space object executing the order. - /// The starting sector. - /// - IEnumerable Pathfind(IMobileSpaceObject me, Sector start); - } +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// An order which moves a space object. + /// + public interface IMovementOrder : IOrder + { + /// + /// The sector we are moving to. + /// + Sector Destination { get; } + + /// + /// Did we already log a pathfinding error this turn? + /// + bool LoggedPathfindingError { get; } + + /// + /// Creates a Dijkstra map for this order's movement. + /// + /// + /// + /// + IDictionary, ISet>> CreateDijkstraMap(IMobileSpaceObject me, Sector start); + + /// + /// Finds the path for executing this order. + /// + /// The space object executing the order. + /// The starting sector. + /// + IEnumerable Pathfind(IMobileSpaceObject me, Sector start); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/INameable.cs b/FrEee/Interfaces/INameable.cs similarity index 86% rename from FrEee/Game/Interfaces/INameable.cs rename to FrEee/Interfaces/INameable.cs index 43f1990f9..5554760ca 100644 --- a/FrEee/Game/Interfaces/INameable.cs +++ b/FrEee/Interfaces/INameable.cs @@ -1,11 +1,11 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can be named by the player who owns it. - /// Even if you don't own it, you can always set a "private" name which only you can see. - /// - public interface INameable : IOwnable, IReferrable, INamed - { - new string Name { get; set; } - } +namespace FrEee.Interfaces +{ + /// + /// Something which can be named by the player who owns it. + /// Even if you don't own it, you can always set a "private" name which only you can see. + /// + public interface INameable : IOwnable, IReferrable, INamed + { + new string Name { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/INamed.cs b/FrEee/Interfaces/INamed.cs similarity index 80% rename from FrEee/Game/Interfaces/INamed.cs rename to FrEee/Interfaces/INamed.cs index 917c060d5..f57ffae3a 100644 --- a/FrEee/Game/Interfaces/INamed.cs +++ b/FrEee/Interfaces/INamed.cs @@ -1,13 +1,13 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// Something that has a name. - /// - public interface INamed - { - /// - /// The name of the object. - /// - string Name { get; } - } +namespace FrEee.Interfaces +{ + /// + /// Something that has a name. + /// + public interface INamed + { + /// + /// The name of the object. + /// + string Name { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IOrder.cs b/FrEee/Interfaces/IOrder.cs similarity index 88% rename from FrEee/Game/Interfaces/IOrder.cs rename to FrEee/Interfaces/IOrder.cs index 9ed562bac..6f98a6521 100644 --- a/FrEee/Game/Interfaces/IOrder.cs +++ b/FrEee/Interfaces/IOrder.cs @@ -1,37 +1,37 @@ -using FrEee.Game.Objects.LogMessages; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// An order issued by a player to an object to do something. - /// Orders are distinguished from commands by being queued, rather than instantaneous. - /// - public interface IOrder : IReferrable, IPromotable - { - /// - /// Does this order cost a movement point to execute? - /// - bool ConsumesMovement { get; } - - /// - /// Is this order done executing? - /// - bool IsComplete { get; set; } - - /// - /// Is this order done executing? - /// - bool CheckCompletion(IOrderable executor); - - /// - /// Executes the order. - /// - void Execute(IOrderable executor); - - /// - /// Validation errors. - /// - IEnumerable GetErrors(IOrderable executor); - } +using FrEee.Objects.LogMessages; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// An order issued by a player to an object to do something. + /// Orders are distinguished from commands by being queued, rather than instantaneous. + /// + public interface IOrder : IReferrable, IPromotable + { + /// + /// Does this order cost a movement point to execute? + /// + bool ConsumesMovement { get; } + + /// + /// Is this order done executing? + /// + bool IsComplete { get; set; } + + /// + /// Is this order done executing? + /// + bool CheckCompletion(IOrderable executor); + + /// + /// Executes the order. + /// + void Execute(IOrderable executor); + + /// + /// Validation errors. + /// + IEnumerable GetErrors(IOrderable executor); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IOrderCommand.cs b/FrEee/Interfaces/IOrderCommand.cs similarity index 83% rename from FrEee/Game/Interfaces/IOrderCommand.cs rename to FrEee/Interfaces/IOrderCommand.cs index ea85019be..ccc858171 100644 --- a/FrEee/Game/Interfaces/IOrderCommand.cs +++ b/FrEee/Interfaces/IOrderCommand.cs @@ -1,13 +1,13 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// A command to manipulate an object's order queue. - /// - public interface IOrderCommand: ICommand - { - /// - /// The specific order being manipulated. - /// - IOrder Order { get; set; } - } +namespace FrEee.Interfaces +{ + /// + /// A command to manipulate an object's order queue. + /// + public interface IOrderCommand: ICommand + { + /// + /// The specific order being manipulated. + /// + IOrder Order { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IOrderable.cs b/FrEee/Interfaces/IOrderable.cs similarity index 92% rename from FrEee/Game/Interfaces/IOrderable.cs rename to FrEee/Interfaces/IOrderable.cs index 5de7d46c7..6f802ccd6 100644 --- a/FrEee/Game/Interfaces/IOrderable.cs +++ b/FrEee/Interfaces/IOrderable.cs @@ -1,32 +1,32 @@ -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can accept orders from an empire and queue them for execution over time. - /// - public interface IOrderable : IReferrable - { - bool AreOrdersOnHold { get; set; } - - bool AreRepeatOrdersEnabled { get; set; } - - /// - /// The queued orders. - /// - IEnumerable Orders { get; } - - void AddOrder(IOrder order); - - /// - /// Executes orders for an appropriate amount of time. - /// Some objects execute orders for an entire turn at once; others only for smaller ticks. - /// - /// true if there was anything to do this turn - bool ExecuteOrders(); - - void RearrangeOrder(IOrder order, int delta); - - void RemoveOrder(IOrder order); - } -} +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// Something which can accept orders from an empire and queue them for execution over time. + /// + public interface IOrderable : IReferrable + { + bool AreOrdersOnHold { get; set; } + + bool AreRepeatOrdersEnabled { get; set; } + + /// + /// The queued orders. + /// + IEnumerable Orders { get; } + + void AddOrder(IOrder order); + + /// + /// Executes orders for an appropriate amount of time. + /// Some objects execute orders for an entire turn at once; others only for smaller ticks. + /// + /// true if there was anything to do this turn + bool ExecuteOrders(); + + void RearrangeOrder(IOrder order, int delta); + + void RemoveOrder(IOrder order); + } +} diff --git a/FrEee/Game/Interfaces/IOwnable.cs b/FrEee/Interfaces/IOwnable.cs similarity index 69% rename from FrEee/Game/Interfaces/IOwnable.cs rename to FrEee/Interfaces/IOwnable.cs index 0163936dd..62cbd2a94 100644 --- a/FrEee/Game/Interfaces/IOwnable.cs +++ b/FrEee/Interfaces/IOwnable.cs @@ -1,22 +1,23 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can be owned by an empire. - /// - public interface IOwnable - { - [DoNotCopy] - Empire Owner { get; } - } - - /// - /// Something whose ownership can be changed. - /// - public interface ITransferrable : IOwnable - { - new Empire Owner { get; set; } - } -} \ No newline at end of file +using FrEee.Objects.Civilization; +using FrEee.Serialization; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Interfaces +{ + /// + /// Something which can be owned by an empire. + /// + public interface IOwnable + { + [DoNotCopy] + Empire Owner { get; } + } + + /// + /// Something whose ownership can be changed. + /// + public interface ITransferrable : IOwnable + { + new Empire Owner { get; set; } + } +} diff --git a/FrEee/Game/Interfaces/IOwnableAbilityObject.cs b/FrEee/Interfaces/IOwnableAbilityObject.cs similarity index 78% rename from FrEee/Game/Interfaces/IOwnableAbilityObject.cs rename to FrEee/Interfaces/IOwnableAbilityObject.cs index 54b8faf70..0b2766f06 100644 --- a/FrEee/Game/Interfaces/IOwnableAbilityObject.cs +++ b/FrEee/Interfaces/IOwnableAbilityObject.cs @@ -1,9 +1,9 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can have abilities and be owned. - /// - public interface IOwnableAbilityObject : IOwnable, IAbilityObject - { - } +namespace FrEee.Interfaces +{ + /// + /// Something which can have abilities and be owned. + /// + public interface IOwnableAbilityObject : IOwnable, IAbilityObject + { + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IPathfindingOrder.cs b/FrEee/Interfaces/IPathfindingOrder.cs similarity index 92% rename from FrEee/Game/Interfaces/IPathfindingOrder.cs rename to FrEee/Interfaces/IPathfindingOrder.cs index 634ce4fe0..d1b56262e 100644 --- a/FrEee/Game/Interfaces/IPathfindingOrder.cs +++ b/FrEee/Interfaces/IPathfindingOrder.cs @@ -1,52 +1,52 @@ -using FrEee.Game.Objects.Civilization; - -namespace FrEee.Game.Interfaces -{ - /// - /// A movement order whose movement is relative to some space object. - /// - public interface IPathfindingOrder : IMovementOrder, IOwnable - { - /// - /// Alternate target. This should be the largest ship in a fleet when a fleet is being pursued. - /// - ISpaceObject AlternateTarget { get; } - - /// - /// Should pathfinding avoid enemies? - /// - bool AvoidEnemies { get; set; } - - new bool IsComplete { get; set; } - - /// - /// Either the target itself, or the memory of the target, if it's not visible. - /// - ISpaceObject KnownTarget { get; } - - /// - /// The empire which issued the order. - /// - new Empire Owner { get; set; } - - /// - /// The target space object to pursue, evade, etc. - /// - ISpaceObject Target { get; set; } - - /// - /// A verb used to describe this order. - /// - string Verb { get; } - - /// - /// Call this when calling UpdateMemory on the target. - /// Sets the alternate target to the largest ship in a fleet, if the target is a fleet. - /// If the fleet is destroyed, sets the target to the alternate target. - /// If the target is a ship, etc., and it is destroyed, sets the target to the memory of the target, or deletes the order if there is no memory. - /// If the target is a memory, and the original object is sighted again, sets the target to the original object. - /// Otherwise sets the alternate target to the target. - /// - void UpdateAlternateTarget(); - } +using FrEee.Objects.Civilization; + +namespace FrEee.Interfaces +{ + /// + /// A movement order whose movement is relative to some space object. + /// + public interface IPathfindingOrder : IMovementOrder, IOwnable + { + /// + /// Alternate target. This should be the largest ship in a fleet when a fleet is being pursued. + /// + ISpaceObject AlternateTarget { get; } + + /// + /// Should pathfinding avoid enemies? + /// + bool AvoidEnemies { get; set; } + + new bool IsComplete { get; set; } + + /// + /// Either the target itself, or the memory of the target, if it's not visible. + /// + ISpaceObject KnownTarget { get; } + + /// + /// The empire which issued the order. + /// + new Empire Owner { get; set; } + + /// + /// The target space object to pursue, evade, etc. + /// + ISpaceObject Target { get; set; } + + /// + /// A verb used to describe this order. + /// + string Verb { get; } + + /// + /// Call this when calling UpdateMemory on the target. + /// Sets the alternate target to the largest ship in a fleet, if the target is a fleet. + /// If the fleet is destroyed, sets the target to the alternate target. + /// If the target is a ship, etc., and it is destroyed, sets the target to the memory of the target, or deletes the order if there is no memory. + /// If the target is a memory, and the original object is sighted again, sets the target to the original object. + /// Otherwise sets the alternate target to the target. + /// + void UpdateAlternateTarget(); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IPictorial.cs b/FrEee/Interfaces/IPictorial.cs similarity index 91% rename from FrEee/Game/Interfaces/IPictorial.cs rename to FrEee/Interfaces/IPictorial.cs index 495860098..ba7cbe2c9 100644 --- a/FrEee/Game/Interfaces/IPictorial.cs +++ b/FrEee/Interfaces/IPictorial.cs @@ -1,36 +1,36 @@ -using System.Collections.Generic; -using System.Drawing; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which has a picture. - /// - public interface IPictorial - { - /// - /// A small picture. - /// - Image Icon { get; } - - /// - /// The icon pre-scaled to 32 pixels by 32 pixels. - /// - Image Icon32 { get; } - - /// - /// Paths with fallbacks to the icon, relative to the Pictures folder. - /// - IEnumerable IconPaths { get; } - - /// - /// A large picture. - /// - Image Portrait { get; } - - /// - /// Paths with fallbacks to the portrait, relative to the Pictures folder. - /// - IEnumerable PortraitPaths { get; } - } +using System.Collections.Generic; +using System.Drawing; + +namespace FrEee.Interfaces +{ + /// + /// Something which has a picture. + /// + public interface IPictorial + { + /// + /// A small picture. + /// + Image Icon { get; } + + /// + /// The icon pre-scaled to 32 pixels by 32 pixels. + /// + Image Icon32 { get; } + + /// + /// Paths with fallbacks to the icon, relative to the Pictures folder. + /// + IEnumerable IconPaths { get; } + + /// + /// A large picture. + /// + Image Portrait { get; } + + /// + /// Paths with fallbacks to the portrait, relative to the Pictures folder. + /// + IEnumerable PortraitPaths { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IPictorialLogMessage.cs b/FrEee/Interfaces/IPictorialLogMessage.cs similarity index 64% rename from FrEee/Game/Interfaces/IPictorialLogMessage.cs rename to FrEee/Interfaces/IPictorialLogMessage.cs index 90f1622de..bc3ea0fca 100644 --- a/FrEee/Game/Interfaces/IPictorialLogMessage.cs +++ b/FrEee/Interfaces/IPictorialLogMessage.cs @@ -1,7 +1,7 @@ -namespace FrEee.Game.Interfaces -{ - public interface IPictorialLogMessage - { - T Context { get; } - } +namespace FrEee.Interfaces +{ + public interface IPictorialLogMessage + { + T Context { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IPlanetOrder.cs b/FrEee/Interfaces/IPlanetOrder.cs similarity index 62% rename from FrEee/Game/Interfaces/IPlanetOrder.cs rename to FrEee/Interfaces/IPlanetOrder.cs index 7f0707bb3..60e523f6c 100644 --- a/FrEee/Game/Interfaces/IPlanetOrder.cs +++ b/FrEee/Interfaces/IPlanetOrder.cs @@ -1,11 +1,11 @@ -using FrEee.Game.Objects.Space; - -namespace FrEee.Game.Interfaces -{ - /// - /// An order that can be issued to a planet. - /// - public interface IPlanetOrder : IOrder - { - } +using FrEee.Objects.Space; + +namespace FrEee.Interfaces +{ + /// + /// An order that can be issued to a planet. + /// + public interface IPlanetOrder : IOrder + { + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IPromotable.cs b/FrEee/Interfaces/IPromotable.cs similarity index 91% rename from FrEee/Game/Interfaces/IPromotable.cs rename to FrEee/Interfaces/IPromotable.cs index c109fa282..57f889833 100644 --- a/FrEee/Game/Interfaces/IPromotable.cs +++ b/FrEee/Interfaces/IPromotable.cs @@ -1,17 +1,17 @@ -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// An object which can be "promoted" from the client side to the server side. - /// - public interface IPromotable - { - /// - /// Replaces client-side object IDs with the newly generated server side IDs. - /// - /// - /// Any promoted objects that are already done replacing IDs. - void ReplaceClientIDs(IDictionary idmap, ISet done = null); - } +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// An object which can be "promoted" from the client side to the server side. + /// + public interface IPromotable + { + /// + /// Replaces client-side object IDs with the newly generated server side IDs. + /// + /// + /// Any promoted objects that are already done replacing IDs. + void ReplaceClientIDs(IDictionary idmap, ISet done = null); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IRecyclable.cs b/FrEee/Interfaces/IRecyclable.cs similarity index 90% rename from FrEee/Game/Interfaces/IRecyclable.cs rename to FrEee/Interfaces/IRecyclable.cs index 4ec36f60b..a61049ca8 100644 --- a/FrEee/Game/Interfaces/IRecyclable.cs +++ b/FrEee/Interfaces/IRecyclable.cs @@ -1,27 +1,27 @@ -using FrEee.Utility; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can be recycled (scrapped, etc.) - /// - public interface IRecyclable : IReferrable, IPictorial - { - /// - /// The object that's the "container" object of this object for recycling purposes. - /// - IMobileSpaceObject RecycleContainer { get; } - - /// - /// Amount of resources gained by scrapping this object. - /// - ResourceQuantity ScrapValue { get; } - - /// - /// Performs the recycling action. - /// - /// The action to perform. - /// Did the action already execute? If so, just do the object type specific logic. - void Recycle(IRecycleBehavior behavior, bool didExecute = false); - } +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Interfaces +{ + /// + /// Something which can be recycled (scrapped, etc.) + /// + public interface IRecyclable : IReferrable, IPictorial + { + /// + /// The object that's the "container" object of this object for recycling purposes. + /// + IMobileSpaceObject RecycleContainer { get; } + + /// + /// Amount of resources gained by scrapping this object. + /// + ResourceQuantity ScrapValue { get; } + + /// + /// Performs the recycling action. + /// + /// The action to perform. + /// Did the action already execute? If so, just do the object type specific logic. + void Recycle(IRecycleBehavior behavior, bool didExecute = false); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IRecycleBehavior.cs b/FrEee/Interfaces/IRecycleBehavior.cs similarity index 79% rename from FrEee/Game/Interfaces/IRecycleBehavior.cs rename to FrEee/Interfaces/IRecycleBehavior.cs index a82e362d5..3fef4d29d 100644 --- a/FrEee/Game/Interfaces/IRecycleBehavior.cs +++ b/FrEee/Interfaces/IRecycleBehavior.cs @@ -1,17 +1,17 @@ -using FrEee.Game.Objects.LogMessages; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// A type of recycle behavior (scrap, analyze, etc.) - /// - public interface IRecycleBehavior - { - string Verb { get; } - - void Execute(IRecyclable target, bool didRecycle = false); - - IEnumerable GetErrors(IMobileSpaceObject executor, IRecyclable target); - } +using FrEee.Objects.LogMessages; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// A type of recycle behavior (scrap, analyze, etc.) + /// + public interface IRecycleBehavior + { + string Verb { get; } + + void Execute(IRecyclable target, bool didRecycle = false); + + IEnumerable GetErrors(IMobileSpaceObject executor, IRecyclable target); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IReference.cs b/FrEee/Interfaces/IReference.cs similarity index 94% rename from FrEee/Game/Interfaces/IReference.cs rename to FrEee/Interfaces/IReference.cs index 883e60db7..634aba2aa 100644 --- a/FrEee/Game/Interfaces/IReference.cs +++ b/FrEee/Interfaces/IReference.cs @@ -1,54 +1,54 @@ -using System; -using System.Runtime.Serialization; - -namespace FrEee.Game.Interfaces -{ - /// - /// A lightweight reference to some object in some context (e.g. the current mod or galaxy). - /// Can be passed around on the network as a surrogate for said object. - /// - /// - /// - public interface IReference : IPromotable - { - bool HasValue { get; } - TValue Value { get; } - } - - /// - /// A lightweight reference to some object in some context (e.g. the current mod or galaxy). - /// Can be passed around on the network as a surrogate for said object. - /// - /// - /// - public interface IReference : IReference - { - TID ID { get; } - } - - [Serializable] - public class ReferenceException : Exception, ISerializable - { - public ReferenceException(string message, TID id = default(TID)) - : base(message) - { - ID = id; - } - - protected ReferenceException(SerializationInfo info, StreamingContext ctx) - : base(info, ctx) - { - ID = (TID)info.GetValue("ID", typeof(TID)); - } - - public TID ID { get; private set; } - - public Type Type { get { return typeof(TValue); } } - - void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) - { - base.GetObjectData(info, context); - info.AddValue("ID", ID); - } - } +using System; +using System.Runtime.Serialization; + +namespace FrEee.Interfaces +{ + /// + /// A lightweight reference to some object in some context (e.g. the current mod or galaxy). + /// Can be passed around on the network as a surrogate for said object. + /// + /// + /// + public interface IReference : IPromotable + { + bool HasValue { get; } + TValue Value { get; } + } + + /// + /// A lightweight reference to some object in some context (e.g. the current mod or galaxy). + /// Can be passed around on the network as a surrogate for said object. + /// + /// + /// + public interface IReference : IReference + { + TID ID { get; } + } + + [Serializable] + public class ReferenceException : Exception, ISerializable + { + public ReferenceException(string message, TID id = default(TID)) + : base(message) + { + ID = id; + } + + protected ReferenceException(SerializationInfo info, StreamingContext ctx) + : base(info, ctx) + { + ID = (TID)info.GetValue("ID", typeof(TID)); + } + + public TID ID { get; private set; } + + public Type Type { get { return typeof(TValue); } } + + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + base.GetObjectData(info, context); + info.AddValue("ID", ID); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IReferenceEnumerable.cs b/FrEee/Interfaces/IReferenceEnumerable.cs similarity index 81% rename from FrEee/Game/Interfaces/IReferenceEnumerable.cs rename to FrEee/Interfaces/IReferenceEnumerable.cs index 9f3483f10..f178a1caf 100644 --- a/FrEee/Game/Interfaces/IReferenceEnumerable.cs +++ b/FrEee/Interfaces/IReferenceEnumerable.cs @@ -1,9 +1,9 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// Flag interface for enumerables that should not be serialized as enumerables because they contain references. - /// - public interface IReferenceEnumerable - { - } +namespace FrEee.Interfaces +{ + /// + /// Flag interface for enumerables that should not be serialized as enumerables because they contain references. + /// + public interface IReferenceEnumerable + { + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IReferrable.cs b/FrEee/Interfaces/IReferrable.cs similarity index 84% rename from FrEee/Game/Interfaces/IReferrable.cs rename to FrEee/Interfaces/IReferrable.cs index f33fa328f..2cce647ac 100644 --- a/FrEee/Game/Interfaces/IReferrable.cs +++ b/FrEee/Interfaces/IReferrable.cs @@ -1,14 +1,14 @@ -using System; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something that can be referred to from the client side using an ID. - /// - public interface IReferrable : IDisposable, IOwnable - { - long ID { get; set; } - - bool IsDisposed { get; set; } - } +using System; + +namespace FrEee.Interfaces +{ + /// + /// Something that can be referred to from the client side using an ID. + /// + public interface IReferrable : IDisposable, IOwnable + { + long ID { get; set; } + + bool IsDisposed { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IResearchable.cs b/FrEee/Interfaces/IResearchable.cs similarity index 81% rename from FrEee/Game/Interfaces/IResearchable.cs rename to FrEee/Interfaces/IResearchable.cs index efd6c77b5..bd5e8388c 100644 --- a/FrEee/Game/Interfaces/IResearchable.cs +++ b/FrEee/Interfaces/IResearchable.cs @@ -1,9 +1,9 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// Something that can be unlocked in-game, as opposed to only in empire setup. - /// - public interface IResearchable : IUnlockable, IFoggable - { - } +namespace FrEee.Interfaces +{ + /// + /// Something that can be unlocked in-game, as opposed to only in empire setup. + /// + public interface IResearchable : IUnlockable, IFoggable + { + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/ISpaceObject.cs b/FrEee/Interfaces/ISpaceObject.cs similarity index 90% rename from FrEee/Game/Interfaces/ISpaceObject.cs rename to FrEee/Interfaces/ISpaceObject.cs index 44e95c073..5020f1f71 100644 --- a/FrEee/Game/Interfaces/ISpaceObject.cs +++ b/FrEee/Interfaces/ISpaceObject.cs @@ -1,55 +1,55 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; - -namespace FrEee.Game.Interfaces -{ - public interface ISpaceObject : IOwnableAbilityObject, IPictorial, IReferrable, IFoggable, INamed, ILocated - { - /// - /// Can this space object be placed in a fleet? - /// - bool CanBeInFleet { get; } - - /// - /// Is this space object affeced by sight obscuration abilities? - /// This does not affect cloaking abilities, only sector/system obscuration. - /// - /// - /// true if this instance can be obscured; otherwise, false. - /// - bool CanBeObscured { get; } - - /// - /// Can this space object traverse warp points? - /// - bool CanWarp { get; } - - /// - /// Does this space object have infinite supplies? - /// TODO - make supply a resource? - /// - bool HasInfiniteSupplies { get; } - - /// - /// Is this space object idle? - /// Space objects are idle if they have no orders (but they have speed greater than zero, and are not in a fleet) or their construction queue has a fractional ETA less than 1. - /// - bool IsIdle { get; } - - /// - /// The name of this space object. - /// - new string Name { get; set; } - - /// - /// Resources stored on this space object. - /// For a ship, this could include supplies. - /// - ResourceQuantity StoredResources { get; } - - /// - /// Supply storage capacity. - /// - int SupplyStorage { get; } - } +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Interfaces +{ + public interface ISpaceObject : IOwnableAbilityObject, IPictorial, IReferrable, IFoggable, INamed, ILocated + { + /// + /// Can this space object be placed in a fleet? + /// + bool CanBeInFleet { get; } + + /// + /// Is this space object affeced by sight obscuration abilities? + /// This does not affect cloaking abilities, only sector/system obscuration. + /// + /// + /// true if this instance can be obscured; otherwise, false. + /// + bool CanBeObscured { get; } + + /// + /// Can this space object traverse warp points? + /// + bool CanWarp { get; } + + /// + /// Does this space object have infinite supplies? + /// TODO - make supply a resource? + /// + bool HasInfiniteSupplies { get; } + + /// + /// Is this space object idle? + /// Space objects are idle if they have no orders (but they have speed greater than zero, and are not in a fleet) or their construction queue has a fractional ETA less than 1. + /// + bool IsIdle { get; } + + /// + /// The name of this space object. + /// + new string Name { get; set; } + + /// + /// Resources stored on this space object. + /// For a ship, this could include supplies. + /// + ResourceQuantity StoredResources { get; } + + /// + /// Supply storage capacity. + /// + int SupplyStorage { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IStarSystemPlacementStrategy.cs b/FrEee/Interfaces/IStarSystemPlacementStrategy.cs similarity index 86% rename from FrEee/Game/Interfaces/IStarSystemPlacementStrategy.cs rename to FrEee/Interfaces/IStarSystemPlacementStrategy.cs index b34a82fea..ea1ad12b1 100644 --- a/FrEee/Game/Interfaces/IStarSystemPlacementStrategy.cs +++ b/FrEee/Interfaces/IStarSystemPlacementStrategy.cs @@ -1,22 +1,22 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using System.Drawing; - -namespace FrEee.Game.Interfaces -{ - /// - /// Algorithm for placing star systems on the galaxy map. - /// - public interface IStarSystemPlacementStrategy - { - /// - /// Places a star system. - /// - /// The galaxy. - /// The minimum number of buffer squares between any two star systems. - /// Where are we allowed to place star systems? - /// How many more stars to place? - /// The location of the star system, or null if a location could not be found. - Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice); - } +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using System.Drawing; + +namespace FrEee.Interfaces +{ + /// + /// Algorithm for placing star systems on the galaxy map. + /// + public interface IStarSystemPlacementStrategy + { + /// + /// Places a star system. + /// + /// The galaxy. + /// The minimum number of buffer squares between any two star systems. + /// Where are we allowed to place star systems? + /// How many more stars to place? + /// The location of the star system, or null if a location could not be found. + Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IStellarObject.cs b/FrEee/Interfaces/IStellarObject.cs similarity index 89% rename from FrEee/Game/Interfaces/IStellarObject.cs rename to FrEee/Interfaces/IStellarObject.cs index 28bacdd28..03ea895d1 100644 --- a/FrEee/Game/Interfaces/IStellarObject.cs +++ b/FrEee/Interfaces/IStellarObject.cs @@ -1,39 +1,39 @@ -using FrEee.Game.Enumerations; -using FrEee.Modding.Interfaces; - -namespace FrEee.Game.Interfaces -{ - public interface IStellarObject : ISpaceObject, IReferrable, IModObject, IAbilityContainer - { - /// - /// A description of this stellar object. - /// - string Description { get; set; } - - /// - /// Used for naming. - /// - int Index { get; set; } - - /// - /// Used for naming. - /// - bool IsUnique { get; set; } - - /// - /// The name of this stellar object. - /// - new string Name { get; set; } - - /// - /// Name of the picture used to represent this stellar object, excluding the file extension. - /// PNG files will be searched first, then BMP. - /// - string PictureName { get; set; } - - /// - /// The stellar size of this object. - /// - StellarSize StellarSize { get; } - } +using FrEee.Enumerations; +using FrEee.Modding.Interfaces; + +namespace FrEee.Interfaces +{ + public interface IStellarObject : ISpaceObject, IReferrable, IModObject, IAbilityContainer + { + /// + /// A description of this stellar object. + /// + string Description { get; set; } + + /// + /// Used for naming. + /// + int Index { get; set; } + + /// + /// Used for naming. + /// + bool IsUnique { get; set; } + + /// + /// The name of this stellar object. + /// + new string Name { get; set; } + + /// + /// Name of the picture used to represent this stellar object, excluding the file extension. + /// PNG files will be searched first, then BMP. + /// + string PictureName { get; set; } + + /// + /// The stellar size of this object. + /// + StellarSize StellarSize { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/ITargetable.cs b/FrEee/Interfaces/ITargetable.cs similarity index 82% rename from FrEee/Game/Interfaces/ITargetable.cs rename to FrEee/Interfaces/ITargetable.cs index 84bfc3850..f6c0e8d75 100644 --- a/FrEee/Game/Interfaces/ITargetable.cs +++ b/FrEee/Interfaces/ITargetable.cs @@ -1,20 +1,20 @@ -using FrEee.Game.Enumerations; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can be specifically target by weapons. - /// - public interface ITargetable : IDamageableReferrable, ITransferrable - { - /// - /// Evasion rating of this combatant. - /// - int Evasion { get; } - - /// - /// What type of object is this for weapon targeting purposes? - /// - WeaponTargets WeaponTargetType { get; } - } +using FrEee.Enumerations; + +namespace FrEee.Interfaces +{ + /// + /// Something which can be specifically target by weapons. + /// + public interface ITargetable : IDamageableReferrable, ITransferrable + { + /// + /// Evasion rating of this combatant. + /// + int Evasion { get; } + + /// + /// What type of object is this for weapon targeting purposes? + /// + WeaponTargets WeaponTargetType { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/ITemplate.cs b/FrEee/Interfaces/ITemplate.cs similarity index 87% rename from FrEee/Game/Interfaces/ITemplate.cs rename to FrEee/Interfaces/ITemplate.cs index 7824406b6..e8d64a09f 100644 --- a/FrEee/Game/Interfaces/ITemplate.cs +++ b/FrEee/Interfaces/ITemplate.cs @@ -1,15 +1,15 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// A template for instantiating in-game objects. - /// - /// The type of object which can be instantiated. - public interface ITemplate - { - /// - /// Instantiates an object. - /// - /// The new object. - T Instantiate(); - } +namespace FrEee.Interfaces +{ + /// + /// A template for instantiating in-game objects. + /// + /// The type of object which can be instantiated. + public interface ITemplate + { + /// + /// Instantiates an object. + /// + /// The new object. + T Instantiate(); + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IUnit.cs b/FrEee/Interfaces/IUnit.cs similarity index 78% rename from FrEee/Game/Interfaces/IUnit.cs rename to FrEee/Interfaces/IUnit.cs index 301c90e5f..08c3c6bc0 100644 --- a/FrEee/Game/Interfaces/IUnit.cs +++ b/FrEee/Interfaces/IUnit.cs @@ -1,9 +1,9 @@ -namespace FrEee.Game.Interfaces -{ - /// - /// A vehicle which can be contained in cargo. - /// - public interface IUnit : IVehicle, IContainable - { - } +namespace FrEee.Interfaces +{ + /// + /// A vehicle which can be contained in cargo. + /// + public interface IUnit : IVehicle, IContainable + { + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IUnlockable.cs b/FrEee/Interfaces/IUnlockable.cs similarity index 85% rename from FrEee/Game/Interfaces/IUnlockable.cs rename to FrEee/Interfaces/IUnlockable.cs index 9f5c3027e..5d7afba90 100644 --- a/FrEee/Game/Interfaces/IUnlockable.cs +++ b/FrEee/Interfaces/IUnlockable.cs @@ -1,23 +1,23 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Modding; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can be unlocked, either via research or at empire creation. - /// - public interface IUnlockable : INamed, IPictorial - { - /// - /// A group to display on the research screen, such as "Components" or "Facilities". - /// Or for racial/empire traits, just "Trait". - /// - string ResearchGroup { get; } - - /// - /// The requirements of this item to be unlocked. - /// - IList> UnlockRequirements { get; } - } +using FrEee.Objects.Civilization; +using FrEee.Modding; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// Something which can be unlocked, either via research or at empire creation. + /// + public interface IUnlockable : INamed, IPictorial + { + /// + /// A group to display on the research screen, such as "Components" or "Facilities". + /// Or for racial/empire traits, just "Trait". + /// + string ResearchGroup { get; } + + /// + /// The requirements of this item to be unlocked. + /// + IList> UnlockRequirements { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IUpgradeable.cs b/FrEee/Interfaces/IUpgradeable.cs similarity index 91% rename from FrEee/Game/Interfaces/IUpgradeable.cs rename to FrEee/Interfaces/IUpgradeable.cs index 1cfa02805..f6ca1ac1f 100644 --- a/FrEee/Game/Interfaces/IUpgradeable.cs +++ b/FrEee/Interfaces/IUpgradeable.cs @@ -1,36 +1,36 @@ -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// Something which can be upgraded to a newer version. - /// - /// - public interface IUpgradeable - { - /// - /// Can this item be upgraded? - /// - bool IsObsolescent { get; } - - /// - /// Is this item obsolete? - /// - bool IsObsolete { get; } - - /// - /// The latest available version of this item. - /// - T LatestVersion { get; } - - /// - /// Any newer versions of this item. - /// - IEnumerable NewerVersions { get; } - - /// - /// Any older versions of this item. - /// - IEnumerable OlderVersions { get; } - } +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// Something which can be upgraded to a newer version. + /// + /// + public interface IUpgradeable + { + /// + /// Can this item be upgraded? + /// + bool IsObsolescent { get; } + + /// + /// Is this item obsolete? + /// + bool IsObsolete { get; } + + /// + /// The latest available version of this item. + /// + T LatestVersion { get; } + + /// + /// Any newer versions of this item. + /// + IEnumerable NewerVersions { get; } + + /// + /// Any older versions of this item. + /// + IEnumerable OlderVersions { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Interfaces/IVehicle.cs b/FrEee/Interfaces/IVehicle.cs similarity index 84% rename from FrEee/Game/Interfaces/IVehicle.cs rename to FrEee/Interfaces/IVehicle.cs index fa85ddc91..0b1032e91 100644 --- a/FrEee/Game/Interfaces/IVehicle.cs +++ b/FrEee/Interfaces/IVehicle.cs @@ -1,31 +1,32 @@ -using FrEee.Game.Objects.Technology; -using FrEee.Utility; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// A space or ground vehicle. - /// - public interface IVehicle : IConstructable, IOwnableAbilityObject, IReferrable, IDamageable, ICombatant, IRecyclable, IIncomeProducer, IUpgradeable, INameable - { - [DoNotSerialize(false)] - new IList Components { get; } - - /// - /// Damage that has been applied to this vehicle's components. - /// - SafeDictionary> Damage { get; set; } - - /// - /// The design of this vehicle. - /// - [DoNotCopy] - IDesign Design { get; set; } - - /// - /// Cost to maintain this vehicle per turn. - /// - ResourceQuantity MaintenanceCost { get; } - } -} \ No newline at end of file +using FrEee.Objects.Technology; +using FrEee.Serialization; +using FrEee.Utility; using FrEee.Serialization; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// A space or ground vehicle. + /// + public interface IVehicle : IConstructable, IOwnableAbilityObject, IReferrable, IDamageable, ICombatant, IRecyclable, IIncomeProducer, IUpgradeable, INameable + { + [DoNotSerialize(false)] + new IList Components { get; } + + /// + /// Damage that has been applied to this vehicle's components. + /// + SafeDictionary> Damage { get; set; } + + /// + /// The design of this vehicle. + /// + [DoNotCopy] + IDesign Design { get; set; } + + /// + /// Cost to maintain this vehicle per turn. + /// + ResourceQuantity MaintenanceCost { get; } + } +} diff --git a/FrEee/Game/Interfaces/IVictoryCondition.cs b/FrEee/Interfaces/IVictoryCondition.cs similarity index 89% rename from FrEee/Game/Interfaces/IVictoryCondition.cs rename to FrEee/Interfaces/IVictoryCondition.cs index 50a1d4519..20ea88c57 100644 --- a/FrEee/Game/Interfaces/IVictoryCondition.cs +++ b/FrEee/Interfaces/IVictoryCondition.cs @@ -1,35 +1,35 @@ -using FrEee.Game.Objects.Civilization; -using System.Collections.Generic; - -namespace FrEee.Game.Interfaces -{ - /// - /// A victory condition for the game. - /// - public interface IVictoryCondition - { - /// - /// Gets a defeat message for an empire. - /// - /// - /// - /// - string GetDefeatMessage(Empire emp, IEnumerable winners); - - /// - /// Gets the progress of an empire toward this victory condition. - /// 0 represents no progress; 1 represents completion. - /// Progress can go over 1 if the empire exceeds the requirements. - /// - /// - /// - double GetProgress(Empire emp); - - /// - /// Gets a victory message for an empire. - /// - /// - /// - string GetVictoryMessage(Empire emp); - } +using FrEee.Objects.Civilization; +using System.Collections.Generic; + +namespace FrEee.Interfaces +{ + /// + /// A victory condition for the game. + /// + public interface IVictoryCondition + { + /// + /// Gets a defeat message for an empire. + /// + /// + /// + /// + string GetDefeatMessage(Empire emp, IEnumerable winners); + + /// + /// Gets the progress of an empire toward this victory condition. + /// 0 represents no progress; 1 represents completion. + /// Progress can go over 1 if the empire exceeds the requirements. + /// + /// + /// + double GetProgress(Empire emp); + + /// + /// Gets a victory message for an empire. + /// + /// + /// + string GetVictoryMessage(Empire emp); + } } \ No newline at end of file diff --git a/FrEee/Modding/ComputedFormula.cs b/FrEee/Modding/ComputedFormula.cs index 3ce6060a3..3560758c8 100644 --- a/FrEee/Modding/ComputedFormula.cs +++ b/FrEee/Modding/ComputedFormula.cs @@ -1,10 +1,11 @@ -using System; +using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using FrEee.Serialization; namespace FrEee.Modding { @@ -165,4 +166,4 @@ protected override T ComputeValue() return Evaluate(Context, null); } } -} \ No newline at end of file +} diff --git a/FrEee/Modding/DamageType.cs b/FrEee/Modding/DamageType.cs index e812a15c6..24271c5a2 100644 --- a/FrEee/Modding/DamageType.cs +++ b/FrEee/Modding/DamageType.cs @@ -1,5 +1,5 @@ using FrEee.Modding.Interfaces; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System.Collections.Generic; namespace FrEee.Modding diff --git a/FrEee/Modding/EmpireTraitRequirement.cs b/FrEee/Modding/EmpireTraitRequirement.cs index dc91071a4..05dda6fb2 100644 --- a/FrEee/Modding/EmpireTraitRequirement.cs +++ b/FrEee/Modding/EmpireTraitRequirement.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Civilization; +using FrEee.Objects.Civilization; using System.Linq; namespace FrEee.Modding diff --git a/FrEee/Modding/EventTemplate.cs b/FrEee/Modding/EventTemplate.cs index 37d12794f..f9e25c489 100644 --- a/FrEee/Modding/EventTemplate.cs +++ b/FrEee/Modding/EventTemplate.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Events; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Events; using FrEee.Modding.Interfaces; using System.Collections.Generic; diff --git a/FrEee/Modding/EventType.cs b/FrEee/Modding/EventType.cs index c8082d2c7..d708a6890 100644 --- a/FrEee/Modding/EventType.cs +++ b/FrEee/Modding/EventType.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Events; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Events; using FrEee.Modding.Interfaces; -using FrEee.Utility; +using FrEee.Serialization; using System.Collections.Generic; namespace FrEee.Modding diff --git a/FrEee/Modding/Field.cs b/FrEee/Modding/Field.cs index a84069800..efed2c4c5 100644 --- a/FrEee/Modding/Field.cs +++ b/FrEee/Modding/Field.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Formula.cs b/FrEee/Modding/Formula.cs index 2f489f2c5..e28a3bd5c 100644 --- a/FrEee/Modding/Formula.cs +++ b/FrEee/Modding/Formula.cs @@ -1,5 +1,5 @@ using FrEee.Modding.Interfaces; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Globalization; diff --git a/FrEee/Modding/Interfaces/IFormula.cs b/FrEee/Modding/Interfaces/IFormula.cs index 77a739077..96c1adc37 100644 --- a/FrEee/Modding/Interfaces/IFormula.cs +++ b/FrEee/Modding/Interfaces/IFormula.cs @@ -1,4 +1,4 @@ -using FrEee.Utility; +using FrEee.Serialization; using System; using System.Collections.Generic; using System.Globalization; @@ -26,4 +26,4 @@ public interface IFormula : IFormula new T Evaluate(object host, IDictionary variables = null); } -} \ No newline at end of file +} diff --git a/FrEee/Modding/Interfaces/IModObject.cs b/FrEee/Modding/Interfaces/IModObject.cs index 4bf935ec4..78bc574db 100644 --- a/FrEee/Modding/Interfaces/IModObject.cs +++ b/FrEee/Modding/Interfaces/IModObject.cs @@ -1,23 +1,22 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; using System.Collections.Generic; -namespace FrEee.Modding.Interfaces +namespace FrEee.Modding.Interfaces; + +/// +/// An object which can be stored in mod files. +/// +public interface IModObject : INamed { + bool IsDisposed { get; } + /// - /// An object which can be stored in mod files. + /// An ID used to represent this mod object. /// - public interface IModObject : INamed - { - bool IsDisposed { get; } - - /// - /// An ID used to represent this mod object. - /// - string ModID { get; set; } + string ModID { get; set; } - /// - /// Parameters from the mod meta templates. - /// - IDictionary TemplateParameters { get; set; } - } + /// + /// Parameters from the mod meta templates. + /// + IDictionary TemplateParameters { get; set; } } \ No newline at end of file diff --git a/FrEee/Modding/Interfaces/IStellarObjectLocation.cs b/FrEee/Modding/Interfaces/IStellarObjectLocation.cs index 520734d45..e62726608 100644 --- a/FrEee/Modding/Interfaces/IStellarObjectLocation.cs +++ b/FrEee/Modding/Interfaces/IStellarObjectLocation.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; using System.Drawing; namespace FrEee.Modding.Interfaces diff --git a/FrEee/Modding/LiteralFormula.cs b/FrEee/Modding/LiteralFormula.cs index bcc402f07..3b39ed9d6 100644 --- a/FrEee/Modding/LiteralFormula.cs +++ b/FrEee/Modding/LiteralFormula.cs @@ -1,5 +1,5 @@ -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Globalization; diff --git a/FrEee/Modding/Loaders/AbilityLoader.cs b/FrEee/Modding/Loaders/AbilityLoader.cs index 5debedeee..b3a1d809d 100644 --- a/FrEee/Modding/Loaders/AbilityLoader.cs +++ b/FrEee/Modding/Loaders/AbilityLoader.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Loaders/AbilityRuleLoader.cs b/FrEee/Modding/Loaders/AbilityRuleLoader.cs index 6588059c7..4f6eed08e 100644 --- a/FrEee/Modding/Loaders/AbilityRuleLoader.cs +++ b/FrEee/Modding/Loaders/AbilityRuleLoader.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Abilities; +using FrEee.Enumerations; +using FrEee.Objects.Abilities; using FrEee.Modding.Interfaces; using System; using System.Collections.Generic; diff --git a/FrEee/Modding/Loaders/ComponentLoader.cs b/FrEee/Modding/Loaders/ComponentLoader.cs index c4d4f2c07..e43e55963 100644 --- a/FrEee/Modding/Loaders/ComponentLoader.cs +++ b/FrEee/Modding/Loaders/ComponentLoader.cs @@ -1,11 +1,11 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Technology; +using FrEee.Enumerations; +using FrEee.Objects.Combat; +using FrEee.Objects.Technology; using FrEee.Modding.Enumerations; using FrEee.Modding.Interfaces; using FrEee.Modding.Templates; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Loaders/CultureLoader.cs b/FrEee/Modding/Loaders/CultureLoader.cs index e05f625d8..1cc3308cf 100644 --- a/FrEee/Modding/Loaders/CultureLoader.cs +++ b/FrEee/Modding/Loaders/CultureLoader.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Civilization; +using FrEee.Objects.Civilization; using FrEee.Modding.Interfaces; using System.Collections.Generic; diff --git a/FrEee/Modding/Loaders/EmpireAILoader.cs b/FrEee/Modding/Loaders/EmpireAILoader.cs index 7918b10d9..8996b1aa0 100644 --- a/FrEee/Modding/Loaders/EmpireAILoader.cs +++ b/FrEee/Modding/Loaders/EmpireAILoader.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Objects.AI; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; +using FrEee.Objects.AI; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using System.Collections.Generic; using System.IO; using System.Reflection; diff --git a/FrEee/Modding/Loaders/EventLoader.cs b/FrEee/Modding/Loaders/EventLoader.cs index 628f237c2..ee91419ec 100644 --- a/FrEee/Modding/Loaders/EventLoader.cs +++ b/FrEee/Modding/Loaders/EventLoader.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Events; +using FrEee.Enumerations; +using FrEee.Objects.Events; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Loaders/EventTypeLoader.cs b/FrEee/Modding/Loaders/EventTypeLoader.cs index 31f790164..1cc0a707d 100644 --- a/FrEee/Modding/Loaders/EventTypeLoader.cs +++ b/FrEee/Modding/Loaders/EventTypeLoader.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Serialization; +using FrEee.Extensions; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Loaders/FacilityLoader.cs b/FrEee/Modding/Loaders/FacilityLoader.cs index 0e9339732..09d63adfa 100644 --- a/FrEee/Modding/Loaders/FacilityLoader.cs +++ b/FrEee/Modding/Loaders/FacilityLoader.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Objects.Technology; +using FrEee.Objects.Technology; using FrEee.Modding.Enumerations; using FrEee.Modding.Interfaces; -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Loaders/GalaxyLoader.cs b/FrEee/Modding/Loaders/GalaxyLoader.cs index f7a64bc9b..9f3045405 100644 --- a/FrEee/Modding/Loaders/GalaxyLoader.cs +++ b/FrEee/Modding/Loaders/GalaxyLoader.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Setup.StarSystemPlacementStrategies; +using FrEee.Setup.StarSystemPlacementStrategies; using FrEee.Modding.Interfaces; using FrEee.Modding.Templates; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Collections.Generic; diff --git a/FrEee/Modding/Loaders/HappinessModelLoader.cs b/FrEee/Modding/Loaders/HappinessModelLoader.cs index 49f8f0ff0..10e6884ef 100644 --- a/FrEee/Modding/Loaders/HappinessModelLoader.cs +++ b/FrEee/Modding/Loaders/HappinessModelLoader.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Civilization; +using FrEee.Objects.Civilization; using FrEee.Modding.Interfaces; using System.Collections.Generic; diff --git a/FrEee/Modding/Loaders/HullLoader.cs b/FrEee/Modding/Loaders/HullLoader.cs index dd0ebe5ef..fd2dce314 100644 --- a/FrEee/Modding/Loaders/HullLoader.cs +++ b/FrEee/Modding/Loaders/HullLoader.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; +using FrEee.Interfaces; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; using FrEee.Modding.Enumerations; using FrEee.Modding.Interfaces; -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Loaders/ModSettingsLoader.cs b/FrEee/Modding/Loaders/ModSettingsLoader.cs index 915782658..774caf128 100644 --- a/FrEee/Modding/Loaders/ModSettingsLoader.cs +++ b/FrEee/Modding/Loaders/ModSettingsLoader.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Civilization; +using FrEee.Enumerations; +using FrEee.Objects.Civilization; using FrEee.Modding.Interfaces; using System; using System.Collections.Generic; diff --git a/FrEee/Modding/Loaders/MountLoader.cs b/FrEee/Modding/Loaders/MountLoader.cs index 08c4db3f6..d359a6750 100644 --- a/FrEee/Modding/Loaders/MountLoader.cs +++ b/FrEee/Modding/Loaders/MountLoader.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Technology; +using FrEee.Enumerations; +using FrEee.Objects.Technology; using FrEee.Modding.Enumerations; using FrEee.Modding.Interfaces; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Loaders/RequirementLoader.cs b/FrEee/Modding/Loaders/RequirementLoader.cs index b6645d00d..8362d9893 100644 --- a/FrEee/Modding/Loaders/RequirementLoader.cs +++ b/FrEee/Modding/Loaders/RequirementLoader.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Technology; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Technology; using FrEee.Modding.Enumerations; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System.Collections.Generic; namespace FrEee.Modding.Loaders diff --git a/FrEee/Modding/Loaders/StarSystemLoader.cs b/FrEee/Modding/Loaders/StarSystemLoader.cs index 9a96cdf91..909f92834 100644 --- a/FrEee/Modding/Loaders/StarSystemLoader.cs +++ b/FrEee/Modding/Loaders/StarSystemLoader.cs @@ -1,17 +1,17 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Space; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; using FrEee.Modding.StellarObjectLocations; using FrEee.Modding.Templates; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; -using Size = FrEee.Game.Enumerations.StellarSize; +using Size = FrEee.Enumerations.StellarSize; namespace FrEee.Modding.Loaders { diff --git a/FrEee/Modding/Loaders/StellarAbilityLoader.cs b/FrEee/Modding/Loaders/StellarAbilityLoader.cs index f0efffbce..e47576f17 100644 --- a/FrEee/Modding/Loaders/StellarAbilityLoader.cs +++ b/FrEee/Modding/Loaders/StellarAbilityLoader.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Abilities; +using FrEee.Objects.Abilities; using FrEee.Modding.Interfaces; using FrEee.Modding.Templates; using System; diff --git a/FrEee/Modding/Loaders/StellarObjectLoader.cs b/FrEee/Modding/Loaders/StellarObjectLoader.cs index 36d72bd4d..911f4b42f 100644 --- a/FrEee/Modding/Loaders/StellarObjectLoader.cs +++ b/FrEee/Modding/Loaders/StellarObjectLoader.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Space; +using FrEee.Enumerations; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; using System; using System.Collections.Generic; diff --git a/FrEee/Modding/Loaders/StellarObjectSizeLoader.cs b/FrEee/Modding/Loaders/StellarObjectSizeLoader.cs index 26255c319..4d86e9155 100644 --- a/FrEee/Modding/Loaders/StellarObjectSizeLoader.cs +++ b/FrEee/Modding/Loaders/StellarObjectSizeLoader.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Enumerations; +using FrEee.Enumerations; using FrEee.Modding.Interfaces; using System.Collections.Generic; diff --git a/FrEee/Modding/Loaders/TechnologyLoader.cs b/FrEee/Modding/Loaders/TechnologyLoader.cs index 185706410..999a7f88d 100644 --- a/FrEee/Modding/Loaders/TechnologyLoader.cs +++ b/FrEee/Modding/Loaders/TechnologyLoader.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Technology; +using FrEee.Objects.Technology; using FrEee.Modding.Enumerations; using FrEee.Modding.Interfaces; using System; diff --git a/FrEee/Modding/Loaders/TraitLoader.cs b/FrEee/Modding/Loaders/TraitLoader.cs index c37abe20b..0ac9c9d4c 100644 --- a/FrEee/Modding/Loaders/TraitLoader.cs +++ b/FrEee/Modding/Loaders/TraitLoader.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; using FrEee.Modding.Interfaces; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/MetaRecord.cs b/FrEee/Modding/MetaRecord.cs index bfcacdb89..49d1d1148 100644 --- a/FrEee/Modding/MetaRecord.cs +++ b/FrEee/Modding/MetaRecord.cs @@ -1,5 +1,5 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Mod.cs b/FrEee/Modding/Mod.cs index 24169027b..2cf53a091 100644 --- a/FrEee/Modding/Mod.cs +++ b/FrEee/Modding/Mod.cs @@ -3,479 +3,478 @@ using System.IO; using System.Linq; using System.Reflection; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.AI; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.AI; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; using FrEee.Modding.Interfaces; using FrEee.Modding.Loaders; using FrEee.Modding.Templates; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; -namespace FrEee.Modding +namespace FrEee.Modding; + +/// +/// A set of data files containing templates for game objects. +/// +[Serializable] +public class Mod : IDisposable { + public Mod() + { + Current = this; + + Errors = new List(); + + Info = new ModInfo(); + Settings = new ModSettings(); + AbilityRules = new List(); + StarSystemNames = new List(); + DesignRoles = new List(); + Traits = new List(); + Technologies = new List(); + FacilityTemplates = new List(); + Hulls = new List(); + DamageTypes = new List(); + ComponentTemplates = new List(); + Mounts = new List(); + StellarObjectSizes = new List(); + StarSystemTemplates = new List(); + StellarAbilityTemplates = new List(); + GalaxyTemplates = new List(); + StellarObjectTemplates = new List(); + HappinessModels = new List(); + Cultures = new List(); + EmpireAIs = new List>(); + EventTypes = new List(); + EventTemplates = new List(); + + // for redacted colonies + FacilityTemplates.Add(FacilityTemplate.Unknown); + } + + private object locker = new object(); + /// - /// A set of data files containing templates for game objects. + /// The currently loaded mod. /// - [Serializable] - public class Mod : IDisposable - { - public Mod() - { - Current = this; - - Errors = new List(); - - Info = new ModInfo(); - Settings = new ModSettings(); - AbilityRules = new List(); - StarSystemNames = new List(); - DesignRoles = new List(); - Traits = new List(); - Technologies = new List(); - FacilityTemplates = new List(); - Hulls = new List(); - DamageTypes = new List(); - ComponentTemplates = new List(); - Mounts = new List(); - StellarObjectSizes = new List(); - StarSystemTemplates = new List(); - StellarAbilityTemplates = new List(); - GalaxyTemplates = new List(); - StellarObjectTemplates = new List(); - HappinessModels = new List(); - Cultures = new List(); - EmpireAIs = new List>(); - EventTypes = new List(); - EventTemplates = new List(); - - // for redacted colonies - FacilityTemplates.Add(FacilityTemplate.Unknown); - } + public static Mod Current { get; set; } + + /// + /// The file name being loaded. (For error reporting) + /// + public static string CurrentFileName { get; private set; } + + /// + /// Errors encountered when loading the mod. + /// + public static IList Errors { get; private set; } + + /// + /// Rules for grouping and stacking abilities. + /// + public ICollection AbilityRules { get; private set; } + + /// + /// The components in the mod. + /// + public ICollection ComponentTemplates { get; private set; } + + /// + /// The empire cultures in the game. + /// + public ICollection Cultures { get; private set; } + + /// + /// The damage types in the mod. + /// + public ICollection DamageTypes { get; private set; } + + /// + /// Role names to use for vehicle designs. + /// + public ICollection DesignRoles { get; private set; } + + /// + /// The empire AIs in the game. + /// + public ICollection> EmpireAIs { get; private set; } - private object locker = new object(); - - /// - /// The currently loaded mod. - /// - public static Mod Current { get; set; } - - /// - /// The file name being loaded. (For error reporting) - /// - public static string CurrentFileName { get; private set; } - - /// - /// Errors encountered when loading the mod. - /// - public static IList Errors { get; private set; } - - /// - /// Rules for grouping and stacking abilities. - /// - public ICollection AbilityRules { get; private set; } - - /// - /// The components in the mod. - /// - public ICollection ComponentTemplates { get; private set; } - - /// - /// The empire cultures in the game. - /// - public ICollection Cultures { get; private set; } - - /// - /// The damage types in the mod. - /// - public ICollection DamageTypes { get; private set; } - - /// - /// Role names to use for vehicle designs. - /// - public ICollection DesignRoles { get; private set; } - - /// - /// The empire AIs in the game. - /// - public ICollection> EmpireAIs { get; private set; } - - /// - /// The script which runs after each turn. - /// - public PythonScript EndTurnScript { get; set; } - - /// - /// The event templates in the mod. - /// - public ICollection EventTemplates { get; private set; } - - /// - /// The event types in the mod. - /// - public ICollection EventTypes { get; private set; } - - /// - /// The facilities in the mod. - /// - public ICollection FacilityTemplates { get; private set; } - - /// - /// Templates for galaxies. - /// - public ICollection GalaxyTemplates { get; private set; } - - /// - /// The script which runs on game initialization, prior to the first turn. - /// - public PythonScript GameInitScript { get; set; } - - /// - /// The global Python script module which is available to all scripts in the mod. - /// - public PythonScript GlobalScript { get; set; } - - /// - /// The happiness models in the game. - /// - public ICollection HappinessModels { get; private set; } - - /// - /// The vehicle hulls in the mod. - /// - public ICollection Hulls { get; private set; } - - /// - /// General info about the mod. - /// - public ModInfo Info { get; set; } - - /// - /// The component mounts in the mod. - /// - public ICollection Mounts { get; private set; } - - private IList objects = new List() { FacilityTemplate.Unknown }; - - /// - /// All mod objects. - /// - public IEnumerable Objects - => objects; - - /// - /// The path to the mod's root folder, relative to the Mods folder. - /// - public string? RootPath { get; set; } - - /// - /// General mod settings. - /// - public ModSettings Settings { get; set; } - - /// - /// Names to use for star systems. - /// - public ICollection StarSystemNames { get; private set; } - - /// - /// Templates for star systems. - /// - public ICollection StarSystemTemplates { get; private set; } - - /// - /// Templates for stellar abilities. - /// - public ICollection StellarAbilityTemplates { get; private set; } - - /// - /// Planet and asteroid field sizes. - /// - public ICollection StellarObjectSizes { get; private set; } - - /// - /// Templates for stellar objects. - /// - public ICollection StellarObjectTemplates { get; private set; } - - /// - /// The technologies in the game. - /// - public ICollection Technologies { get; private set; } - - /// - /// The race/empire traits in the game. - /// - public ICollection Traits { get; private set; } - - /// - /// Names of files containing lists of design names. - /// e.g. Ravager would be loaded from Mods/CurrentMod/Dsgnname/Ravager.txt and also from Dsgnname/Ravager.txt. - /// - public IEnumerable DesignNamesFiles + /// + /// The script which runs after each turn. + /// + public PythonScript EndTurnScript { get; set; } + + /// + /// The event templates in the mod. + /// + public ICollection EventTemplates { get; private set; } + + /// + /// The event types in the mod. + /// + public ICollection EventTypes { get; private set; } + + /// + /// The facilities in the mod. + /// + public ICollection FacilityTemplates { get; private set; } + + /// + /// Templates for galaxies. + /// + public ICollection GalaxyTemplates { get; private set; } + + /// + /// The script which runs on game initialization, prior to the first turn. + /// + public PythonScript GameInitScript { get; set; } + + /// + /// The global Python script module which is available to all scripts in the mod. + /// + public PythonScript GlobalScript { get; set; } + + /// + /// The happiness models in the game. + /// + public ICollection HappinessModels { get; private set; } + + /// + /// The vehicle hulls in the mod. + /// + public ICollection Hulls { get; private set; } + + /// + /// General info about the mod. + /// + public ModInfo Info { get; set; } + + /// + /// The component mounts in the mod. + /// + public ICollection Mounts { get; private set; } + + private IList objects = new List() { FacilityTemplate.Unknown }; + + /// + /// All mod objects. + /// + public IEnumerable Objects + => objects; + + /// + /// The path to the mod's root folder, relative to the Mods folder. + /// + public string? RootPath { get; set; } + + /// + /// General mod settings. + /// + public ModSettings Settings { get; set; } + + /// + /// Names to use for star systems. + /// + public ICollection StarSystemNames { get; private set; } + + /// + /// Templates for star systems. + /// + public ICollection StarSystemTemplates { get; private set; } + + /// + /// Templates for stellar abilities. + /// + public ICollection StellarAbilityTemplates { get; private set; } + + /// + /// Planet and asteroid field sizes. + /// + public ICollection StellarObjectSizes { get; private set; } + + /// + /// Templates for stellar objects. + /// + public ICollection StellarObjectTemplates { get; private set; } + + /// + /// The technologies in the game. + /// + public ICollection Technologies { get; private set; } + + /// + /// The race/empire traits in the game. + /// + public ICollection Traits { get; private set; } + + /// + /// Names of files containing lists of design names. + /// e.g. Ravager would be loaded from Mods/CurrentMod/Dsgnname/Ravager.txt and also from Dsgnname/Ravager.txt. + /// + public IEnumerable DesignNamesFiles + { + get { - get + var list = new List(); + string path; + if (RootPath != null) { - var list = new List(); - string path; - if (RootPath != null) + try { - try - { - path = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Mods", RootPath, "Dsgnname"); - foreach (var f in Directory.GetFiles(path)) - list.Add(Path.GetFileNameWithoutExtension(f)); - } - catch (IOException) - { - // nothing to do, path probably doesn't exist - } + path = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Mods", RootPath, "Dsgnname"); + foreach (var f in Directory.GetFiles(path)) + list.Add(Path.GetFileNameWithoutExtension(f)); + } + catch (IOException) + { + // nothing to do, path probably doesn't exist } - path = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Dsgnname"); - foreach (var f in Directory.GetFiles(path)) - list.Add(Path.GetFileNameWithoutExtension(f)); - return list.OrderBy(q => q).Distinct(); } + path = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Dsgnname"); + foreach (var f in Directory.GetFiles(path)) + list.Add(Path.GetFileNameWithoutExtension(f)); + return list.OrderBy(q => q).Distinct(); } + } - /// - /// Loads a mod. - /// - /// The mod root path, relative to the Mods folder. Or null to load the stock mod. - /// Set the current mod to the new mod? - /// A status object to report status back to the GUI. - /// How much progress should we report back to the GUI when we're done loading the mod? 1.0 means all done with everything that needs to be done. - public static Mod Load(string? path, bool setCurrent = true, Status? status = null, double desiredProgress = 1.0) - { - var mod = new Mod(); - mod.RootPath = path; + /// + /// Loads a mod. + /// + /// The mod root path, relative to the Mods folder. Or null to load the stock mod. + /// Set the current mod to the new mod? + /// A status object to report status back to the GUI. + /// How much progress should we report back to the GUI when we're done loading the mod? 1.0 means all done with everything that needs to be done. + public static Mod Load(string? path, bool setCurrent = true, Status? status = null, double desiredProgress = 1.0) + { + var mod = new Mod(); + mod.RootPath = path; - if (setCurrent) - Current = mod; + if (setCurrent) + Current = mod; - if (path != null && !Directory.Exists(Path.Combine("Mods", path))) - throw new DirectoryNotFoundException($"Could not find mod {path} in the Mods folder."); + if (path != null && !Directory.Exists(Path.Combine("Mods", path))) + throw new DirectoryNotFoundException($"Could not find mod {path} in the Mods folder."); - var loaders = new Dictionary - { - { new ModInfoLoader(path), 0 }, - { new TextLoader(path, "SystemNames.txt", m => m.StarSystemNames), 0 }, - { new DesignRoleLoader(path), 0 }, - { new ScriptLoader(path), 0 }, - { new AbilityRuleLoader(path), 0 }, - { new ModSettingsLoader(path), 0 }, - { new StellarObjectSizeLoader(path), 1 }, - { new StellarAbilityLoader(path), 2 }, - { new StellarObjectLoader(path), 3 }, - { new TraitLoader(path), 1 }, - { new TechnologyLoader(path), 2 }, - { new FacilityLoader(path), 3 }, - { new HullLoader(path), 3 }, - { new DamageTypeLoader(path), 0 }, - { new ComponentLoader(path), 3 }, - { new MountLoader(path), 3 }, - { new StarSystemLoader(path), 3 }, - { new GalaxyLoader(path), 4 }, - { new HappinessModelLoader(path), 0 }, - { new CultureLoader(path), 0 }, - { new EmpireAILoader(path) , 0 }, - { new EventTypeLoader(path), 0 }, - { new EventLoader(path), 1 }, - }; - - var progressPerFile = (desiredProgress - (status == null ? 0 : status.Progress)) / loaders.Count; - - var used = new HashSet(); - - var minPriority = loaders.Values.Min(); - var maxPriority = loaders.Values.Max(); - - for (var p = minPriority; p <= maxPriority; p++) - { - var files = loaders.Where(q => q.Value == p).Select(q => q.Key.FileName); - CurrentFileName = string.Join(" / ", files); - if (status != null) - status.Message = "Loading " + CurrentFileName; + var loaders = new Dictionary + { + { new ModInfoLoader(path), 0 }, + { new TextLoader(path, "SystemNames.txt", m => m.StarSystemNames), 0 }, + { new DesignRoleLoader(path), 0 }, + { new ScriptLoader(path), 0 }, + { new AbilityRuleLoader(path), 0 }, + { new ModSettingsLoader(path), 0 }, + { new StellarObjectSizeLoader(path), 1 }, + { new StellarAbilityLoader(path), 2 }, + { new StellarObjectLoader(path), 3 }, + { new TraitLoader(path), 1 }, + { new TechnologyLoader(path), 2 }, + { new FacilityLoader(path), 3 }, + { new HullLoader(path), 3 }, + { new DamageTypeLoader(path), 0 }, + { new ComponentLoader(path), 3 }, + { new MountLoader(path), 3 }, + { new StarSystemLoader(path), 3 }, + { new GalaxyLoader(path), 4 }, + { new HappinessModelLoader(path), 0 }, + { new CultureLoader(path), 0 }, + { new EmpireAILoader(path) , 0 }, + { new EventTypeLoader(path), 0 }, + { new EventLoader(path), 1 }, + }; + + var progressPerFile = (desiredProgress - (status == null ? 0 : status.Progress)) / loaders.Count; + + var used = new HashSet(); + + var minPriority = loaders.Values.Min(); + var maxPriority = loaders.Values.Max(); + + for (var p = minPriority; p <= maxPriority; p++) + { + var files = loaders.Where(q => q.Value == p).Select(q => q.Key.FileName); + CurrentFileName = string.Join(" / ", files); + if (status != null) + status.Message = "Loading " + CurrentFileName; - loaders.Where(q => q.Value == p).ParallelSafeForeach(loader => + loaders.Where(q => q.Value == p).ParallelSafeForeach(loader => + { + foreach (var mo in loader.Key.Load(mod).ToArray()) { - foreach (var mo in loader.Key.Load(mod).ToArray()) - { - mod.AssignID(mo, used); - } - if (status != null) - status.Progress += progressPerFile; - }); - } + mod.AssignID(mo, used); + } + if (status != null) + status.Progress += progressPerFile; + }); + } - CurrentFileName = null; + CurrentFileName = null; - var dupes = mod.Objects.GroupBy(o => o.ModID).Where(g => g.Count() > 1); - if (dupes.Any()) - throw new Exception("Multiple objects with mod ID {0} found ({1} total IDs with duplicates)".F(dupes.First().Key, dupes.Count())); + var dupes = mod.Objects.GroupBy(o => o.ModID).Where(g => g.Count() > 1); + if (dupes.Any()) + throw new Exception("Multiple objects with mod ID {0} found ({1} total IDs with duplicates)".F(dupes.First().Key, dupes.Count())); - return mod; - } + return mod; + } - public void AssignID(IModObject mo, ICollection used) + public void AssignID(IModObject mo, ICollection used) + { + if (mo.ModID != null) + return; + lock (locker) { - if (mo.ModID != null) - return; - lock (locker) + var fullname = mo.GetType().Name + " " + mo.Name; + if (mo.Name != null && !used.Contains(fullname)) + { + mo.ModID = fullname; + used.Add(mo.ModID); + } + else { - var fullname = mo.GetType().Name + " " + mo.Name; - if (mo.Name != null && !used.Contains(fullname)) + // tack a number on + int lastnum; + string name; + if (mo.Name == null) + name = "Generic " + mo.GetType().Name; + else + name = mo.GetType().Name + " " + mo.Name; + var lastword = name.LastWord(); + if (int.TryParse(lastword, out lastnum)) { - mo.ModID = fullname; - used.Add(mo.ModID); + // has a number, count from that number } else { - // tack a number on - int lastnum; - string name; - if (mo.Name == null) - name = "Generic " + mo.GetType().Name; - else - name = mo.GetType().Name + " " + mo.Name; - var lastword = name.LastWord(); - if (int.TryParse(lastword, out lastnum)) + lastnum = -1; // no number, start from 1 + } + for (var num = lastnum + 1; num <= int.MaxValue; num++) + { + string exceptnum; + if (lastnum < 0 && num == 0) { - // has a number, count from that number + exceptnum = name; + num = 1; } + else if (lastnum < 0) + exceptnum = name; else + exceptnum = name.Substring(0, name.Length - lastword.Length - 1); + var withnextnum = exceptnum + " " + num; + if (!used.Contains(withnextnum)) { - lastnum = -1; // no number, start from 1 - } - for (var num = lastnum + 1; num <= int.MaxValue; num++) - { - string exceptnum; - if (lastnum < 0 && num == 0) - { - exceptnum = name; - num = 1; - } - else if (lastnum < 0) - exceptnum = name; - else - exceptnum = name.Substring(0, name.Length - lastword.Length - 1); - var withnextnum = exceptnum + " " + num; - if (!used.Contains(withnextnum)) - { - mo.ModID = withnextnum; - used.Add(withnextnum); - break; - } - if (num == int.MaxValue) - throw new Exception("Can't assign mod ID to " + name + "; there's a gazillion other mod objects with that name."); + mo.ModID = withnextnum; + used.Add(withnextnum); + break; } + if (num == int.MaxValue) + throw new Exception("Can't assign mod ID to " + name + "; there's a gazillion other mod objects with that name."); } + } - if (mo.ModID == null) - throw new Exception("Failed to assign mod ID to {0}: {1}".F(mo.GetType(), mo)); + if (mo.ModID == null) + throw new Exception("Failed to assign mod ID to {0}: {1}".F(mo.GetType(), mo)); - if (!objects.Contains(mo)) - objects.Add(mo); - } + if (!objects.Contains(mo)) + objects.Add(mo); } + } - /// - /// Assigns automatic IDs to all objects in the mod that lack IDs. - /// - public void AssignIDs() + /// + /// Assigns automatic IDs to all objects in the mod that lack IDs. + /// + public void AssignIDs() + { + var used = new HashSet(); + foreach (var mo in Objects) { - var used = new HashSet(); - foreach (var mo in Objects) + if (mo.ModID == null) + AssignID(mo, used); + var dupes = Objects.Where(q => q.ModID == mo.ModID); // with same mod ID + if (dupes.Count() > 1) { - if (mo.ModID == null) - AssignID(mo, used); - var dupes = Objects.Where(q => q.ModID == mo.ModID); // with same mod ID - if (dupes.Count() > 1) - { - foreach (var dupe in dupes) - dupe.ModID = dupe.GetType().Name + " " + dupe.ModID; - } + foreach (var dupe in dupes) + dupe.ModID = dupe.GetType().Name + " " + dupe.ModID; } } + } - public void Dispose() - { - foreach (var r in AbilityRules.ToArray()) - r.Dispose(); - foreach (var sos in StellarObjectSizes.ToArray()) - sos.Dispose(); - foreach (var x in StellarAbilityTemplates.ToArray()) - x.Dispose(); - foreach (var sot in StellarObjectTemplates.ToArray()) - sot.Dispose(); - foreach (var t in Traits.ToArray()) - t.Dispose(); - foreach (var t in Technologies.ToArray()) - t.Dispose(); - foreach (var f in FacilityTemplates.ToArray()) - f.Dispose(); - foreach (var h in Hulls.ToArray()) - h.Dispose(); - foreach (var c in ComponentTemplates.ToArray()) - c.Dispose(); - foreach (var m in Mounts.ToArray()) - m.Dispose(); - foreach (var sst in StarSystemTemplates.ToArray()) - sst.Dispose(); - foreach (var gt in GalaxyTemplates.ToArray()) - gt.Dispose(); - foreach (var h in HappinessModels.ToArray()) - h.Dispose(); - foreach (var c in Cultures.ToArray()) - c.Dispose(); - foreach (var ai in EmpireAIs.ToArray()) - ai.Dispose(); - if (this == Current) - Current = null; - } + public void Dispose() + { + foreach (var r in AbilityRules.ToArray()) + r.Dispose(); + foreach (var sos in StellarObjectSizes.ToArray()) + sos.Dispose(); + foreach (var x in StellarAbilityTemplates.ToArray()) + x.Dispose(); + foreach (var sot in StellarObjectTemplates.ToArray()) + sot.Dispose(); + foreach (var t in Traits.ToArray()) + t.Dispose(); + foreach (var t in Technologies.ToArray()) + t.Dispose(); + foreach (var f in FacilityTemplates.ToArray()) + f.Dispose(); + foreach (var h in Hulls.ToArray()) + h.Dispose(); + foreach (var c in ComponentTemplates.ToArray()) + c.Dispose(); + foreach (var m in Mounts.ToArray()) + m.Dispose(); + foreach (var sst in StarSystemTemplates.ToArray()) + sst.Dispose(); + foreach (var gt in GalaxyTemplates.ToArray()) + gt.Dispose(); + foreach (var h in HappinessModels.ToArray()) + h.Dispose(); + foreach (var c in Cultures.ToArray()) + c.Dispose(); + foreach (var ai in EmpireAIs.ToArray()) + ai.Dispose(); + if (this == Current) + Current = null; + } - /// - /// Do these ability names refer to the same ability, using aliases? - /// - /// - /// - /// - public bool DoAbilityNamesMatch(string n1, string n2) - { - if (n1 == n2) - return true; - var r1 = FindAbilityRule(n1); - var r2 = FindAbilityRule(n2); - return r1 != null && r2 != null && r1 == r2; - } + /// + /// Do these ability names refer to the same ability, using aliases? + /// + /// + /// + /// + public bool DoAbilityNamesMatch(string n1, string n2) + { + if (n1 == n2) + return true; + var r1 = FindAbilityRule(n1); + var r2 = FindAbilityRule(n2); + return r1 != null && r2 != null && r1 == r2; + } - public T? Find(string modid) - where T : IModObject + public T? Find(string modid) + where T : IModObject + { + T? result = default; + lock (locker) { - T? result = default; - lock (locker) - { - result = Objects.OfType().SingleOrDefault(q => q.ModID == modid); - } - return result; + result = Objects.OfType().SingleOrDefault(q => q.ModID == modid); } + return result; + } - /// - /// Finds an ability rule by name or alias. - /// - /// - /// - public AbilityRule FindAbilityRule(string name) - { - return AbilityRules.SingleOrDefault(r => r.Matches(name)); - } + /// + /// Finds an ability rule by name or alias. + /// + /// + /// + public AbilityRule FindAbilityRule(string name) + { + return AbilityRules.SingleOrDefault(r => r.Matches(name)); + } - public override string ToString() - { - return RootPath ?? ""; - } + public override string ToString() + { + return RootPath ?? ""; } } diff --git a/FrEee/Modding/ModInfo.cs b/FrEee/Modding/ModInfo.cs index 0b708e57b..9fa685606 100644 --- a/FrEee/Modding/ModInfo.cs +++ b/FrEee/Modding/ModInfo.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; namespace FrEee.Modding { diff --git a/FrEee/Modding/ModReference.cs b/FrEee/Modding/ModReference.cs index 59b1fa9d2..957f9c2af 100644 --- a/FrEee/Modding/ModReference.cs +++ b/FrEee/Modding/ModReference.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/ModSettings.cs b/FrEee/Modding/ModSettings.cs index 1dd2ce9f9..9c30f5010 100644 --- a/FrEee/Modding/ModSettings.cs +++ b/FrEee/Modding/ModSettings.cs @@ -1,6 +1,6 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; +using FrEee.Enumerations; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/ObjectFormula.cs b/FrEee/Modding/ObjectFormula.cs index 3c91732bd..ac4c24ef6 100644 --- a/FrEee/Modding/ObjectFormula.cs +++ b/FrEee/Modding/ObjectFormula.cs @@ -1,6 +1,6 @@ using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Globalization; diff --git a/FrEee/Modding/Record.cs b/FrEee/Modding/Record.cs index f679f52c3..82a30f221 100644 --- a/FrEee/Modding/Record.cs +++ b/FrEee/Modding/Record.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/ResourceFormula.cs b/FrEee/Modding/ResourceFormula.cs index 95078e5cd..5c36670e1 100644 --- a/FrEee/Modding/ResourceFormula.cs +++ b/FrEee/Modding/ResourceFormula.cs @@ -1,4 +1,4 @@ -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using System.Linq; namespace FrEee.Modding diff --git a/FrEee/Modding/Scripts/CSScript.cs b/FrEee/Modding/Scripts/CSScript.cs index bf5be5155..e0ff59b50 100644 --- a/FrEee/Modding/Scripts/CSScript.cs +++ b/FrEee/Modding/Scripts/CSScript.cs @@ -1,5 +1,5 @@ -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp.Scripting; using Microsoft.CodeAnalysis.Scripting; @@ -65,8 +65,8 @@ public Microsoft.CodeAnalysis.Scripting.ScriptRunner CreateScriptObject //The script can suggest additional usings and will work fine, as long as they are either system, or in CSScript.Assembly. //The source file resolver is where it looks for additional scripts, loaded by putting #load in the script file. //By defauly, the resolver looks in the same directory as the script. - var options = ScriptOptions.Default.AddImports("System", "System.Linq", "FrEee", "FrEee.Game.Objects.AI", - "FrEee.Game.Objects.Civilization", "FrEee.Game.Objects.Space", "FrEee.Utility", "FrEee.Game.Objects.Commands", + var options = ScriptOptions.Default.AddImports("System", "System.Linq", "FrEee", "FrEee.Objects.AI", + "FrEee.Objects.Civilization", "FrEee.Objects.Space", "FrEee.Utility", "FrEee.Objects.Commands", "FrEee.Modding.Templates", "FrEee.Modding") .WithReferences(typeof(CSScript).Assembly). WithSourceResolver(new SourceFileResolver(ImmutableArray.Empty, Directory)); diff --git a/FrEee/Modding/Scripts/PythonScript.cs b/FrEee/Modding/Scripts/PythonScript.cs index a192398b9..db7ee796c 100644 --- a/FrEee/Modding/Scripts/PythonScript.cs +++ b/FrEee/Modding/Scripts/PythonScript.cs @@ -1,5 +1,5 @@ -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.IO; diff --git a/FrEee/Modding/Scripts/PythonScriptEngine.cs b/FrEee/Modding/Scripts/PythonScriptEngine.cs index c9fc1641e..624f08c05 100644 --- a/FrEee/Modding/Scripts/PythonScriptEngine.cs +++ b/FrEee/Modding/Scripts/PythonScriptEngine.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using IronPython.Hosting; using Microsoft.Scripting.Hosting; using System; @@ -194,10 +194,10 @@ public static T RunScript(PythonScript script, IDictionary va preCommands.Add("clr.AddReference('FrEee.Core')"); preCommands.Add("import FrEee"); preCommands.Add("import FrEee.Utility"); - preCommands.Add("clr.ImportExtensions(FrEee.Utility.Extensions)"); + preCommands.Add("clr.ImportExtensions(FrEee.Extensions)"); preCommands.Add("from FrEee.Modding import Mod"); - preCommands.Add("from FrEee.Game.Objects.Space import Galaxy"); - preCommands.Add("from FrEee.Game.Objects.Civilization import Empire"); + preCommands.Add("from FrEee.Objects.Space import Galaxy"); + preCommands.Add("from FrEee.Objects.Civilization import Empire"); /*if (variables != null) UpdateScope(variables); if (readOnlyVariables != null) @@ -276,10 +276,10 @@ public static void RunScript(PythonScript script, IDictionary va preCommands.Add("clr.AddReference('FrEee.Core')"); preCommands.Add("import FrEee"); preCommands.Add("import FrEee.Utility"); - preCommands.Add("clr.ImportExtensions(FrEee.Utility.Extensions)"); + preCommands.Add("clr.ImportExtensions(FrEee.Extensions)"); preCommands.Add("from FrEee.Modding import Mod"); - preCommands.Add("from FrEee.Game.Objects.Space import Galaxy"); - preCommands.Add("from FrEee.Game.Objects.Civilization import Empire"); + preCommands.Add("from FrEee.Objects.Space import Galaxy"); + preCommands.Add("from FrEee.Objects.Civilization import Empire"); var code = string.Join("\n", preCommands.ToArray()) + "\n" + script.Text + "\n" + diff --git a/FrEee/Modding/StellarObjectLocations/CircleRadiusStellarObjectLocation.cs b/FrEee/Modding/StellarObjectLocations/CircleRadiusStellarObjectLocation.cs index c92d40017..6ba59f436 100644 --- a/FrEee/Modding/StellarObjectLocations/CircleRadiusStellarObjectLocation.cs +++ b/FrEee/Modding/StellarObjectLocations/CircleRadiusStellarObjectLocation.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; +using FrEee.Interfaces; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Drawing; diff --git a/FrEee/Modding/StellarObjectLocations/CoordStellarObjectLocation.cs b/FrEee/Modding/StellarObjectLocations/CoordStellarObjectLocation.cs index 22525c9e5..c8f8ff3a5 100644 --- a/FrEee/Modding/StellarObjectLocations/CoordStellarObjectLocation.cs +++ b/FrEee/Modding/StellarObjectLocations/CoordStellarObjectLocation.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; +using FrEee.Interfaces; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Drawing; diff --git a/FrEee/Modding/StellarObjectLocations/RingStellarObjectLocation.cs b/FrEee/Modding/StellarObjectLocations/RingStellarObjectLocation.cs index f733e733f..470c99112 100644 --- a/FrEee/Modding/StellarObjectLocations/RingStellarObjectLocation.cs +++ b/FrEee/Modding/StellarObjectLocations/RingStellarObjectLocation.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; +using FrEee.Interfaces; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Drawing; diff --git a/FrEee/Modding/StellarObjectLocations/SameAsStellarObjectLocation.cs b/FrEee/Modding/StellarObjectLocations/SameAsStellarObjectLocation.cs index 83c01e4cf..67b7dddf1 100644 --- a/FrEee/Modding/StellarObjectLocations/SameAsStellarObjectLocation.cs +++ b/FrEee/Modding/StellarObjectLocations/SameAsStellarObjectLocation.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; +using FrEee.Interfaces; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; using FrEee.Modding.Templates; -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Drawing; diff --git a/FrEee/Modding/StellarObjectSize.cs b/FrEee/Modding/StellarObjectSize.cs index 011478531..5980d4cf4 100644 --- a/FrEee/Modding/StellarObjectSize.cs +++ b/FrEee/Modding/StellarObjectSize.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Enumerations; +using FrEee.Enumerations; using FrEee.Modding.Interfaces; using System; using System.Collections.Generic; diff --git a/FrEee/Modding/Templates/AsteroidFieldTemplate.cs b/FrEee/Modding/Templates/AsteroidFieldTemplate.cs index e15e14cad..271ed3f16 100644 --- a/FrEee/Modding/Templates/AsteroidFieldTemplate.cs +++ b/FrEee/Modding/Templates/AsteroidFieldTemplate.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Templates/ComponentTemplate.cs b/FrEee/Modding/Templates/ComponentTemplate.cs index 0eb3bc706..1c9016d52 100644 --- a/FrEee/Modding/Templates/ComponentTemplate.cs +++ b/FrEee/Modding/Templates/ComponentTemplate.cs @@ -1,12 +1,12 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Drawing; diff --git a/FrEee/Modding/Templates/FacilityTemplate.cs b/FrEee/Modding/Templates/FacilityTemplate.cs index 5ebb55602..b8816c8dd 100644 --- a/FrEee/Modding/Templates/FacilityTemplate.cs +++ b/FrEee/Modding/Templates/FacilityTemplate.cs @@ -1,19 +1,19 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; using FrEee.Modding; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; -namespace FrEee.Game.Objects.Technology +namespace FrEee.Objects.Technology { /// /// A template for a facility. diff --git a/FrEee/Modding/Templates/GalaxyTemplate.cs b/FrEee/Modding/Templates/GalaxyTemplate.cs index 970d4c9e0..9537a2951 100644 --- a/FrEee/Modding/Templates/GalaxyTemplate.cs +++ b/FrEee/Modding/Templates/GalaxyTemplate.cs @@ -2,197 +2,218 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Game.Setup; +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Setup; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; -namespace FrEee.Modding.Templates +namespace FrEee.Modding.Templates; + +/// +/// A template for creating galaxies +/// Maps to a record in QuadrantTypes.txt. +/// +[Serializable] +public class GalaxyTemplate : ITemplate, IModObject { + public GalaxyTemplate() + { + StarSystemTemplateChances = new Dictionary(); + } + /// - /// A template for creating galaxies - /// Maps to a record in QuadrantTypes.txt. + /// A description of this galaxy template. /// - [Serializable] - public class GalaxyTemplate : ITemplate, IModObject - { - public GalaxyTemplate() - { - StarSystemTemplateChances = new Dictionary(); - } + public string Description { get; set; } - /// - /// A description of this galaxy template. - /// - public string Description { get; set; } + /// + /// Setup parameters for the game. + /// + public GameSetup GameSetup { get; set; } - /// - /// Setup parameters for the game. - /// - public GameSetup GameSetup { get; set; } + public bool IsDisposed + { + get; private set; + } - public bool IsDisposed - { - get; private set; - } + /// + /// Preferred maximum warp points per system. May be overridden for connectivity purposes. + /// + public int MaxWarpPointsPerSystem { get; set; } - /// - /// Preferred maximum warp points per system. May be overridden for connectivity purposes. - /// - public int MaxWarpPointsPerSystem { get; set; } + /// + /// Minimum number of empty squares between star systems. + /// (Zero, not one, means systems can be adjacent.) + /// + public int MinimumStarSystemDistance { get; set; } - /// - /// Minimum number of empty squares between star systems. - /// (Zero, not one, means systems can be adjacent.) - /// - public int MinimumStarSystemDistance { get; set; } + /// + /// Preferred minimum angle between warp points in a system. May be overridden for connectivity purposes. + /// + public int MinWarpPointAngle { get; set; } - /// - /// Preferred minimum angle between warp points in a system. May be overridden for connectivity purposes. - /// - public int MinWarpPointAngle { get; set; } + public string ModID + { + get; + set; + } - public string ModID - { - get; - set; - } + /// + /// The name of this galaxy template. + /// + public string Name { get; set; } - /// - /// The name of this galaxy template. - /// - public string Name { get; set; } + /// + /// Algorithm for placing stars on the galaxy map. + /// + public IStarSystemPlacementStrategy StarSystemPlacementStrategy { get; set; } - /// - /// Algorithm for placing stars on the galaxy map. - /// - public IStarSystemPlacementStrategy StarSystemPlacementStrategy { get; set; } + /// + /// Chances for each type of star system to appear. + /// + public IDictionary StarSystemTemplateChances { get; set; } - /// - /// Chances for each type of star system to appear. - /// - public IDictionary StarSystemTemplateChances { get; set; } + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + public void Dispose() + { + // TODO - remove it from somewhere? + IsDisposed = true; + } - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } + public Galaxy Instantiate() + { + return Instantiate(null, 1.0, new PRNG(RandomSeed)); + } - public void Dispose() - { - // TODO - remove it from somewhere? - IsDisposed = true; - } + public int RandomSeed { get; set; } = DateTime.Now.Millisecond + 1000 * DateTime.Now.Second + 60000 * DateTime.Now.Minute; - public Galaxy Instantiate() + /// A status object to report status back to the GUI. + /// How much progress should we report back to the GUI when we're done initializing the galaxy? 1.0 means all done with everything that needs to be done. + public Galaxy Instantiate(Status status, double desiredProgress, PRNG dice) + { + var gal = new Galaxy(); + gal.Width = GameSetup.GalaxySize.Width; + gal.Height = GameSetup.GalaxySize.Height; + gal.MinPlanetValue = GameSetup.MinPlanetValue; + gal.MinSpawnedPlanetValue = GameSetup.MinSpawnedPlanetValue; + gal.MaxSpawnedPlanetValue = GameSetup.MaxSpawnedPlanetValue; + gal.MaxPlanetValue = GameSetup.MaxPlanetValue; + gal.MinAsteroidValue = GameSetup.MinAsteroidValue; + gal.MinSpawnedAsteroidValue = GameSetup.MinSpawnedAsteroidValue; + gal.MaxSpawnedAsteroidValue = GameSetup.MaxSpawnedAsteroidValue; + gal.EventFrequency = GameSetup.EventFrequency; + gal.MaximumEventSeverity = GameSetup.MaximumEventSeverity; + var bounds = new Rectangle(-GameSetup.GalaxySize.Width / 2, -GameSetup.GalaxySize.Height / 2, GameSetup.GalaxySize.Width, GameSetup.GalaxySize.Height); + + var unusedNames = new List(Mod.Current.StarSystemNames); + + // create star systems + if (status != null) + status.Message = "Creating star systems"; + var progressPerStarSystem = (desiredProgress - (status == null ? 0 : status.Progress)) / GameSetup.StarSystemCount / 2d; + for (int i = 0; i < GameSetup.StarSystemCount; i++) { - return Instantiate(null, 1.0, new PRNG(RandomSeed)); + if (status != null) + status.Message = "Creating star system " + (i + 1) + " of " + GameSetup.StarSystemCount; + var p = StarSystemPlacementStrategy.PlaceStarSystem(gal, MinimumStarSystemDistance, bounds, GameSetup.StarSystemCount - i, dice); + if (p == null) + break; // no more locations available + + var sst = StarSystemTemplateChances.PickWeighted(dice); + sst.Dice = dice; + var sys = sst.Instantiate(); + sys.Name = unusedNames.PickRandom(dice); + unusedNames.Remove(sys.Name); + NameStellarObjects(sys); + gal.StarSystemLocations.Add(new ObjectLocation { Location = p.Value, Item = sys }); + if (status != null) + status.Progress += progressPerStarSystem; } - public int RandomSeed { get; set; } = DateTime.Now.Millisecond + 1000 * DateTime.Now.Second + 60000 * DateTime.Now.Minute; + var progressPerWarp = (desiredProgress - (status == null ? 0 : status.Progress)) / (gal.StarSystemLocations.Count * 2); - /// A status object to report status back to the GUI. - /// How much progress should we report back to the GUI when we're done initializing the galaxy? 1.0 means all done with everything that needs to be done. - public Galaxy Instantiate(Status status, double desiredProgress, PRNG dice) + // create warp points + if (status != null) + status.Message = "Creating warp points"; + var graph = new ConnectivityGraph>(); + foreach (var ssl in gal.StarSystemLocations) + graph.Add(ssl); + int wpsGenerated = 0; + while (wpsGenerated < gal.StarSystemLocations.Count * 2) { - var gal = new Galaxy(); - gal.Width = GameSetup.GalaxySize.Width; - gal.Height = GameSetup.GalaxySize.Height; - gal.MinPlanetValue = GameSetup.MinPlanetValue; - gal.MinSpawnedPlanetValue = GameSetup.MinSpawnedPlanetValue; - gal.MaxSpawnedPlanetValue = GameSetup.MaxSpawnedPlanetValue; - gal.MaxPlanetValue = GameSetup.MaxPlanetValue; - gal.MinAsteroidValue = GameSetup.MinAsteroidValue; - gal.MinSpawnedAsteroidValue = GameSetup.MinSpawnedAsteroidValue; - gal.MaxSpawnedAsteroidValue = GameSetup.MaxSpawnedAsteroidValue; - gal.EventFrequency = GameSetup.EventFrequency; - gal.MaximumEventSeverity = GameSetup.MaximumEventSeverity; - var bounds = new Rectangle(-GameSetup.GalaxySize.Width / 2, -GameSetup.GalaxySize.Height / 2, GameSetup.GalaxySize.Width, GameSetup.GalaxySize.Height); - - var unusedNames = new List(Mod.Current.StarSystemNames); - - // create star systems - if (status != null) - status.Message = "Creating star systems"; - var progressPerStarSystem = (desiredProgress - (status == null ? 0 : status.Progress)) / GameSetup.StarSystemCount / 2d; - for (int i = 0; i < GameSetup.StarSystemCount; i++) + // pick 2 systems + ObjectLocation startLocation = null, endLocation = null; + (startLocation, endLocation) = MinDistanceDisconnectedSystemPair(graph); + + // create the warp points + if (startLocation != null && endLocation != null) { - if (status != null) - status.Message = "Creating star system " + (i + 1) + " of " + GameSetup.StarSystemCount; - var p = StarSystemPlacementStrategy.PlaceStarSystem(gal, MinimumStarSystemDistance, bounds, GameSetup.StarSystemCount - i, dice); - if (p == null) - break; // no more locations available - - var sst = StarSystemTemplateChances.PickWeighted(dice); - sst.Dice = dice; - var sys = sst.Instantiate(); - sys.Name = unusedNames.PickRandom(dice); - unusedNames.Remove(sys.Name); - NameStellarObjects(sys); - gal.StarSystemLocations.Add(new ObjectLocation { Location = p.Value, Item = sys }); - if (status != null) - status.Progress += progressPerStarSystem; - } + GameSetup.WarpPointPlacementStrategy.PlaceWarpPoints(startLocation, endLocation); - var progressPerWarp = (desiredProgress - (status == null ? 0 : status.Progress)) / (gal.StarSystemLocations.Count * 2); + // mark systems connected + graph.Connect(startLocation, endLocation, true); - // create warp points + wpsGenerated++; + } + else + break; if (status != null) - status.Message = "Creating warp points"; - var graph = new ConnectivityGraph>(); - foreach (var ssl in gal.StarSystemLocations) - graph.Add(ssl); - int wpsGenerated = 0; - while (wpsGenerated < gal.StarSystemLocations.Count * 2) - { - // pick 2 systems - ObjectLocation startLocation = null, endLocation = null; - (startLocation, endLocation) = MinDistanceDisconnectedSystemPair(graph); + status.Progress += progressPerWarp; + } - // create the warp points - if (startLocation != null && endLocation != null) - { - GameSetup.WarpPointPlacementStrategy.PlaceWarpPoints(startLocation, endLocation); + // TODO - delete excess warp points if system groups count is >1 - // mark systems connected - graph.Connect(startLocation, endLocation, true); + if (status != null) + status.Progress = desiredProgress; - wpsGenerated++; - } - else - break; - if (status != null) - status.Progress += progressPerWarp; - } + return gal; + } - // TODO - delete excess warp points if system groups count is >1 + private (ObjectLocation, ObjectLocation) MinDistanceDisconnectedSystemPair(ConnectivityGraph> graph) + { + if (graph.Subgraphs.Count() == 0) + return (null, null); - if (status != null) - status.Progress = desiredProgress; + (ObjectLocation, ObjectLocation) best = (null, null); + int bestDistance = int.MaxValue; - return gal; + if (graph.Subgraphs.Count() == 1) + { + foreach (var l1 in graph) + { + foreach (var l2 in graph) + { + if (graph.AreDirectlyConnected(l1, l2)) + continue; + if (IntersectsExceptAtEnds(l1.Location, l2.Location, graph)) + continue; + var dist = l1.Location.ManhattanDistance(l2.Location); + if (dist < bestDistance && AreWarpPointAnglesOk(l1, l2, Galaxy.Current, MinWarpPointAngle)) + { + bestDistance = dist; + best = (l1, l2); + } + } + } + return best; } - private (ObjectLocation, ObjectLocation) MinDistanceDisconnectedSystemPair(ConnectivityGraph> graph) + foreach (var g1 in graph.Subgraphs) { - if (graph.Subgraphs.Count() == 0) - return (null, null); - - (ObjectLocation, ObjectLocation) best = (null, null); - int bestDistance = int.MaxValue; - - if (graph.Subgraphs.Count() == 1) + foreach (var g2 in graph.Subgraphs.ExceptSingle(g1)) { - foreach (var l1 in graph) + foreach (var l1 in g1) { - foreach (var l2 in graph) + foreach (var l2 in g2) { if (graph.AreDirectlyConnected(l1, l2)) continue; - if (IntersectsExceptAtEnds(l1.Location, l2.Location, graph)) - continue; var dist = l1.Location.ManhattanDistance(l2.Location); if (dist < bestDistance && AreWarpPointAnglesOk(l1, l2, Galaxy.Current, MinWarpPointAngle)) { @@ -201,275 +222,253 @@ public Galaxy Instantiate(Status status, double desiredProgress, PRNG dice) } } } - return best; - } - - foreach (var g1 in graph.Subgraphs) - { - foreach (var g2 in graph.Subgraphs.ExceptSingle(g1)) - { - foreach (var l1 in g1) - { - foreach (var l2 in g2) - { - if (graph.AreDirectlyConnected(l1, l2)) - continue; - var dist = l1.Location.ManhattanDistance(l2.Location); - if (dist < bestDistance && AreWarpPointAnglesOk(l1, l2, Galaxy.Current, MinWarpPointAngle)) - { - bestDistance = dist; - best = (l1, l2); - } - } - } - } } - return best; } + return best; + } - /// - /// Determines if a number is between two bounds (inclusive). - /// - /// - /// - /// - /// - private static bool IsBetween(double num, double bound1, double bound2) - { - return num >= bound1 && num <= bound2 || num >= bound2 && num <= bound1; - } + /// + /// Determines if a number is between two bounds (inclusive). + /// + /// + /// + /// + /// + private static bool IsBetween(double num, double bound1, double bound2) + { + return num >= bound1 && num <= bound2 || num >= bound2 && num <= bound1; + } - private static bool IntersectsExceptAtEnds(Point p1, Point p2, ConnectivityGraph> graph) + private static bool IntersectsExceptAtEnds(Point p1, Point p2, ConnectivityGraph> graph) + { + foreach (var kvp in graph.Connections) { - foreach (var kvp in graph.Connections) + var q1 = kvp.Key.Location; + foreach (var q2 in kvp.Value.Select(l => l.Location)) { - var q1 = kvp.Key.Location; - foreach (var q2 in kvp.Value.Select(l => l.Location)) - { - if (IntersectsExceptAtEnds(p1, p2, q1, q2)) - return true; - // else no intersection - } + if (IntersectsExceptAtEnds(p1, p2, q1, q2)) + return true; + // else no intersection } - return false; } + return false; + } - /// - /// Public for unit tests. - /// - /// - /// - /// - /// - /// - public static bool IntersectsExceptAtEnds(Point p1, Point p2, Point q1, Point q2) + /// + /// Public for unit tests. + /// + /// + /// + /// + /// + /// + public static bool IntersectsExceptAtEnds(Point p1, Point p2, Point q1, Point q2) + { + if (p1 == q1 && p2 == q2) + return true; + if (p1 == q2 && p2 == q1) + return true; + if (p1 == q1 || p1 == q2 || p2 == q1 || p2 == q2) + return false; // intersects only on endpoints + var slope1 = (double)(p2.Y - p1.Y) / (double)(p2.X - p1.X); + var slope2 = (double)(q2.Y - q1.Y) / (double)(q2.X - q1.X); + if (slope1 != slope2) { - if (p1 == q1 && p2 == q2) - return true; - if (p1 == q2 && p2 == q1) - return true; - if (p1 == q1 || p1 == q2 || p2 == q1 || p2 == q2) - return false; // intersects only on endpoints - var slope1 = (double)(p2.Y - p1.Y) / (double)(p2.X - p1.X); - var slope2 = (double)(q2.Y - q1.Y) / (double)(q2.X - q1.X); - if (slope1 != slope2) + // intersect in infinite space! but do the line segments actually intersect? + double intercept1, intercept2, intersectX, intersectY; + if ((slope1 == double.PositiveInfinity || slope1 == double.NegativeInfinity) && (slope2 == double.PositiveInfinity || slope2 == double.NegativeInfinity)) { - // intersect in infinite space! but do the line segments actually intersect? - double intercept1, intercept2, intersectX, intersectY; - if ((slope1 == double.PositiveInfinity || slope1 == double.NegativeInfinity) && (slope2 == double.PositiveInfinity || slope2 == double.NegativeInfinity)) - { - if (IsBetween(q1.Y, p1.Y, p2.Y) || IsBetween(q2.Y, p1.Y, p2.Y)) - return true; - } - else if (slope1 == double.PositiveInfinity || slope1 == double.NegativeInfinity) - { - // x is a constant for a vertical line - intersectX = p1.X; + if (IsBetween(q1.Y, p1.Y, p2.Y) || IsBetween(q2.Y, p1.Y, p2.Y)) + return true; + } + else if (slope1 == double.PositiveInfinity || slope1 == double.NegativeInfinity) + { + // x is a constant for a vertical line + intersectX = p1.X; - // y = m*x+b - intercept2 = q1.Y - slope2 * q1.X; - intersectY = slope2 * intersectX + intercept2; + // y = m*x+b + intercept2 = q1.Y - slope2 * q1.X; + intersectY = slope2 * intersectX + intercept2; - if (IsBetween(intersectY, p1.Y, p2.Y)) - return true; - } - else if (slope2 == double.PositiveInfinity || slope2 == double.NegativeInfinity) - { - // x is a constant for a vertical line - intersectX = q1.X; + if (IsBetween(intersectY, p1.Y, p2.Y)) + return true; + } + else if (slope2 == double.PositiveInfinity || slope2 == double.NegativeInfinity) + { + // x is a constant for a vertical line + intersectX = q1.X; - // y = m*x+b - intercept1 = p1.Y - slope1 * p1.X; - intersectY = slope1 * intersectX + intercept1; + // y = m*x+b + intercept1 = p1.Y - slope1 * p1.X; + intersectY = slope1 * intersectX + intercept1; - if (IsBetween(intersectY, p1.Y, p2.Y)) - return true; - } - else - { - // y = m*x+b - // b = y - m*x - intercept1 = p1.Y - slope1 * p1.X; - intercept2 = q1.Y - slope2 * q1.X; - // m1*x+b1 = m2*x+b2 - // m1*x-m2*x = b2-b1 - // x*(m1-m2) = b2-b1 - // x = (b2-b1)/(m1-m2) - intersectX = (intercept2 - intercept1) / (slope1 - slope2); - intersectY = slope1 * intersectX + intercept1; - - if (IsBetween(intersectX, p1.X, p2.X) && IsBetween(intersectX, q1.X, q2.X)) - return true; - } + if (IsBetween(intersectY, p1.Y, p2.Y)) + return true; } else { - if (IsBetween(p1.X, q1.X, q2.X) || IsBetween(p2.X, q1.X, q2.X) - || IsBetween(q1.X, p1.X, p2.X) || IsBetween(q2.X, p1.X, p2.X) - || IsBetween(p1.Y, q1.Y, q2.Y) || IsBetween(p2.Y, q1.Y, q2.Y) - || IsBetween(q1.Y, p1.Y, p2.Y) || IsBetween(q2.Y, p1.Y, p2.Y)) + // y = m*x+b + // b = y - m*x + intercept1 = p1.Y - slope1 * p1.X; + intercept2 = q1.Y - slope2 * q1.X; + // m1*x+b1 = m2*x+b2 + // m1*x-m2*x = b2-b1 + // x*(m1-m2) = b2-b1 + // x = (b2-b1)/(m1-m2) + intersectX = (intercept2 - intercept1) / (slope1 - slope2); + intersectY = slope1 * intersectX + intercept1; + + if (IsBetween(intersectX, p1.X, p2.X) && IsBetween(intersectX, q1.X, q2.X)) return true; } - return false; } - - private bool AreWarpPointAnglesOk(ObjectLocation start, ObjectLocation end, Galaxy gal, int minAngle) + else { - var angleOut = NormalizeAngle(start.Location.AngleTo(end.Location)); - var angleBack = NormalizeAngle(angleOut + 180d); - - // test warp points going out - foreach (var angle in GetWarpPointAngles(start, gal)) - { - if (AngleIsInRangeExclusive(angleOut, angle, minAngle)) - return false; - } - - // test warp points coming back - foreach (var angle in GetWarpPointAngles(end, gal)) - { - if (AngleIsInRangeExclusive(angleBack, angle, minAngle)) - return false; - } - - return true; + if (IsBetween(p1.X, q1.X, q2.X) || IsBetween(p2.X, q1.X, q2.X) + || IsBetween(q1.X, p1.X, p2.X) || IsBetween(q2.X, p1.X, p2.X) + || IsBetween(p1.Y, q1.Y, q2.Y) || IsBetween(p2.Y, q1.Y, q2.Y) + || IsBetween(q1.Y, p1.Y, p2.Y) || IsBetween(q2.Y, p1.Y, p2.Y)) + return true; } + return false; + } + + private bool AreWarpPointAnglesOk(ObjectLocation start, ObjectLocation end, Galaxy gal, int minAngle) + { + var angleOut = NormalizeAngle(start.Location.AngleTo(end.Location)); + var angleBack = NormalizeAngle(angleOut + 180d); - private IEnumerable GetWarpPointAngles(ObjectLocation ssl, Galaxy gal) + // test warp points going out + foreach (var angle in GetWarpPointAngles(start, gal)) { - foreach (var wp in ssl.Item.FindSpaceObjects()) - { - var target = wp.TargetStarSystemLocation; - var offset = ssl.Location.AngleTo(target.Location); - yield return offset; - } + if (AngleIsInRangeExclusive(angleOut, angle, minAngle)) + return false; } - private int GetWarpPointCount(StarSystem sys) + // test warp points coming back + foreach (var angle in GetWarpPointAngles(end, gal)) { - return sys.FindSpaceObjects().Count(); + if (AngleIsInRangeExclusive(angleBack, angle, minAngle)) + return false; } - /// - /// Public for unit tests. - /// - /// - /// - /// - /// - public static bool AngleIsInRangeExclusive(double d, double middle, double range) + return true; + } + + private IEnumerable GetWarpPointAngles(ObjectLocation ssl, Galaxy gal) + { + foreach (var wp in ssl.Item.FindSpaceObjects()) { - return Math.Abs(NormalizeAngle(d - middle)) < range; + var target = wp.TargetStarSystemLocation; + var offset = ssl.Location.AngleTo(target.Location); + yield return offset; } + } - internal static void NameStellarObjects(StarSystem sys) - { - int index; + private int GetWarpPointCount(StarSystem sys) + { + return sys.FindSpaceObjects().Count(); + } - index = 1; - var stars = sys.FindSpaceObjects().ToArray(); - foreach (var star in stars) - { - if (stars.Count() == 1) - star.Name = sys.Name; // just name star after system - else - { - try - { - star.Name = sys.Name + " " + index.ToLetter(); - } - catch (ArgumentException) - { - // seriously, 27 stars? fine, just name it after system again! - star.Name = sys.Name; - } - } - index++; - } + /// + /// Public for unit tests. + /// + /// + /// + /// + /// + public static bool AngleIsInRangeExclusive(double d, double middle, double range) + { + return Math.Abs(NormalizeAngle(d - middle)) < range; + } - index = 1; - var planets = sys.FindSpaceObjects().ToArray(); - foreach (var planet in planets.Where(p => p.MoonOf == null)) - { - planet.Name = sys.Name + " " + index.ToRomanNumeral(); - index++; - } - var moonIndices = new Dictionary(); - foreach (var moon in planets.Where(p => p.MoonOf != null)) + internal static void NameStellarObjects(StarSystem sys) + { + int index; + + index = 1; + var stars = sys.FindSpaceObjects().ToArray(); + foreach (var star in stars) + { + if (stars.Count() == 1) + star.Name = sys.Name; // just name star after system + else { - if (moonIndices.ContainsKey(moon.MoonOf)) - moonIndices[moon.MoonOf]++; - else - moonIndices.Add(moon.MoonOf, 1); try { - moon.Name = moon.MoonOf.Name + " " + moonIndices[moon.MoonOf].ToLetter(); + star.Name = sys.Name + " " + index.ToLetter(); } catch (ArgumentException) { - // seriously, 27 moons? just call it a moon - moon.Name = moon.MoonOf.Name + " Moon"; + // seriously, 27 stars? fine, just name it after system again! + star.Name = sys.Name; } } + index++; + } - index = 1; - var asteroids = sys.FindSpaceObjects().ToArray(); - foreach (var asteroid in asteroids) + index = 1; + var planets = sys.FindSpaceObjects().ToArray(); + foreach (var planet in planets.Where(p => p.MoonOf == null)) + { + planet.Name = sys.Name + " " + index.ToRomanNumeral(); + index++; + } + var moonIndices = new Dictionary(); + foreach (var moon in planets.Where(p => p.MoonOf != null)) + { + if (moonIndices.ContainsKey(moon.MoonOf)) + moonIndices[moon.MoonOf]++; + else + moonIndices.Add(moon.MoonOf, 1); + try { - asteroid.Name = sys.Name + " Asteroid Field " + index.ToRomanNumeral(); - index++; + moon.Name = moon.MoonOf.Name + " " + moonIndices[moon.MoonOf].ToLetter(); } + catch (ArgumentException) + { + // seriously, 27 moons? just call it a moon + moon.Name = moon.MoonOf.Name + " Moon"; + } + } + + index = 1; + var asteroids = sys.FindSpaceObjects().ToArray(); + foreach (var asteroid in asteroids) + { + asteroid.Name = sys.Name + " Asteroid Field " + index.ToRomanNumeral(); + index++; + } - index = 1; - var storms = sys.FindSpaceObjects().ToArray(); - foreach (var storm in storms) + index = 1; + var storms = sys.FindSpaceObjects().ToArray(); + foreach (var storm in storms) + { + if (storms.Count() == 1) + storm.Name = sys.Name + " Storm"; + else { - if (storms.Count() == 1) - storm.Name = sys.Name + " Storm"; - else + try { - try - { - storm.Name = sys.Name + " Storm " + index.ToLetter(); - } - catch (ArgumentException) - { - // seriously, 27 storms? fine, just call it a storm! - storm.Name = sys.Name + " Storm"; - } + storm.Name = sys.Name + " Storm " + index.ToLetter(); + } + catch (ArgumentException) + { + // seriously, 27 storms? fine, just call it a storm! + storm.Name = sys.Name + " Storm"; } - index++; } + index++; } + } - private static double NormalizeAngle(double angle) - { - angle %= 360d; - if (angle < -180d) - angle += 360d; - else if (angle > 180d) - angle -= 360d; - return angle; - } + private static double NormalizeAngle(double angle) + { + angle %= 360d; + if (angle < -180d) + angle += 360d; + else if (angle > 180d) + angle -= 360d; + return angle; } } \ No newline at end of file diff --git a/FrEee/Modding/Templates/PlanetTemplate.cs b/FrEee/Modding/Templates/PlanetTemplate.cs index f3df3afd6..fbc022b5b 100644 --- a/FrEee/Modding/Templates/PlanetTemplate.cs +++ b/FrEee/Modding/Templates/PlanetTemplate.cs @@ -1,9 +1,9 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Templates/RandomAbilityTemplate.cs b/FrEee/Modding/Templates/RandomAbilityTemplate.cs index baec78d13..acb6b34a2 100644 --- a/FrEee/Modding/Templates/RandomAbilityTemplate.cs +++ b/FrEee/Modding/Templates/RandomAbilityTemplate.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; using FrEee.Modding.Interfaces; -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Modding/Templates/StarSystemTemplate.cs b/FrEee/Modding/Templates/StarSystemTemplate.cs index dfd26ee6b..c97eb60de 100644 --- a/FrEee/Modding/Templates/StarSystemTemplate.cs +++ b/FrEee/Modding/Templates/StarSystemTemplate.cs @@ -1,180 +1,179 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Space; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; using FrEee.Modding.StellarObjectLocations; -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; -namespace FrEee.Modding.Templates +namespace FrEee.Modding.Templates; + +/// +/// A template for creating star systems. +/// Maps to a record in SystemTypes.txt. +/// +[Serializable] +public class StarSystemTemplate : ITemplate, IModObject, IAbilityContainer { /// - /// A template for creating star systems. - /// Maps to a record in SystemTypes.txt. + /// Creates an empty star system template. /// - [Serializable] - public class StarSystemTemplate : ITemplate, IModObject, IAbilityContainer + public StarSystemTemplate(PRNG dice) { - /// - /// Creates an empty star system template. - /// - public StarSystemTemplate(PRNG dice) - { - Dice = dice ?? new PRNG(DateTime.Now.Millisecond + DateTime.Now.Second * 1000 + DateTime.Now.Minute * 60000); - Abilities = new List(); - StellarObjectLocations = new List(); - } + Dice = dice ?? new PRNG(DateTime.Now.Millisecond + DateTime.Now.Second * 1000 + DateTime.Now.Minute * 60000); + Abilities = new List(); + StellarObjectLocations = new List(); + } - /// - /// Any special abilities to be possessed by star systems generated from this template. - /// - public IList Abilities { get; private set; } + /// + /// Any special abilities to be possessed by star systems generated from this template. + /// + public IList Abilities { get; private set; } - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.StarSystem; } - } + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.StarSystem; } + } - /// - /// The path to the background image for star systems generated from this template. - /// - public string BackgroundImagePath { get; set; } + /// + /// The path to the background image for star systems generated from this template. + /// + public string BackgroundImagePath { get; set; } - public IEnumerable Children - { - // TODO - include stellar object templates here - get { yield break; } - } + public IEnumerable Children + { + // TODO - include stellar object templates here + get { yield break; } + } - /// - /// A description to use for star systems generated from this template. - /// - public string Description { get; set; } + /// + /// A description to use for star systems generated from this template. + /// + public string Description { get; set; } - /// - /// A random number generator to roll up some numbers. - /// - public PRNG Dice { get; set; } + /// + /// A random number generator to roll up some numbers. + /// + public PRNG Dice { get; set; } - /// - /// If true, empire homeworlds can be located in systems generated from this template. - /// - public bool EmpiresCanStartIn { get; set; } + /// + /// If true, empire homeworlds can be located in systems generated from this template. + /// + public bool EmpiresCanStartIn { get; set; } - public IEnumerable IntrinsicAbilities - { - get { return Abilities; } - } + public IEnumerable IntrinsicAbilities + { + get { return Abilities; } + } - public bool IsDisposed - { - get; private set; - } + public bool IsDisposed + { + get; private set; + } - public string ModID - { - get; - set; - } + public string ModID + { + get; + set; + } - /// - /// The name of this star system template. - /// - public string Name { get; set; } + /// + /// The name of this star system template. + /// + public string Name { get; set; } - /// - /// If true, the background image for star systems generated from this template will be centered, not tiled, in combat. - /// - public bool NonTiledCenterCombatImage { get; set; } + /// + /// If true, the background image for star systems generated from this template will be centered, not tiled, in combat. + /// + public bool NonTiledCenterCombatImage { get; set; } - public IEnumerable Parents + public IEnumerable Parents + { + get { - get - { - // TODO - include galaxy template here? - yield break; - } + // TODO - include galaxy template here? + yield break; } + } - /// - /// The radius of star systems generated from this template. - /// - public int Radius { get; set; } + /// + /// The radius of star systems generated from this template. + /// + public int Radius { get; set; } - /// - /// Stellar objects (such as stars and planets) and their locations in systems generated from this template. - /// - public IList StellarObjectLocations { get; private set; } + /// + /// Stellar objects (such as stars and planets) and their locations in systems generated from this template. + /// + public IList StellarObjectLocations { get; private set; } - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } - /// - /// Abilities for random warp points in systems generated from this template. - /// - public RandomAbilityTemplate WarpPointAbilities { get; set; } + /// + /// Abilities for random warp points in systems generated from this template. + /// + public RandomAbilityTemplate WarpPointAbilities { get; set; } - public void Dispose() - { - // TODO - remove it from somewhere? - IsDisposed = true; - } + public void Dispose() + { + // TODO - remove it from somewhere? + IsDisposed = true; + } - public StarSystem Instantiate() + public StarSystem Instantiate() + { + var sys = new StarSystem(Radius); + sys.Name = "Unnamed"; // star system will be named later in galaxy generation + sys.Description = Description; + sys.BackgroundImagePath = BackgroundImagePath; + sys.EmpiresCanStartIn = EmpiresCanStartIn; + sys.NonTiledCenterCombatImage = NonTiledCenterCombatImage; + foreach (var abil in Abilities) + sys.Abilities.Add(abil); + sys.WarpPointAbilities = WarpPointAbilities; // warp points will be generated later in galaxy generation + + var planets = new Dictionary(); + + foreach (var loc in StellarObjectLocations) { - var sys = new StarSystem(Radius); - sys.Name = "Unnamed"; // star system will be named later in galaxy generation - sys.Description = Description; - sys.BackgroundImagePath = BackgroundImagePath; - sys.EmpiresCanStartIn = EmpiresCanStartIn; - sys.NonTiledCenterCombatImage = NonTiledCenterCombatImage; - foreach (var abil in Abilities) - sys.Abilities.Add(abil); - sys.WarpPointAbilities = WarpPointAbilities; // warp points will be generated later in galaxy generation - - var planets = new Dictionary(); - - foreach (var loc in StellarObjectLocations) + Point pos; + try + { + pos = loc.Resolve(sys, Dice); + } + catch (Exception) + { + // Can't place this space object because there is no room for it + // So just skip it + continue; + } + + // create object + var sobj = loc.StellarObjectTemplate.Instantiate(); + + // place object + sys.Place(sobj, pos); + + // for planets with moons + if (sobj is Planet) + planets.Add(loc, (Planet)sobj); + + // set flags for naming + sobj.Index = sys.FindSpaceObjects(s => s.GetType() == sobj.GetType()).Count() + 1; + sobj.IsUnique = StellarObjectLocations.Where(l => typeof(ITemplate<>).MakeGenericType(sobj.GetType()).IsAssignableFrom(l.StellarObjectTemplate.GetType())).Count() == 1; + if (sobj is Planet && loc is SameAsStellarObjectLocation) { - Point pos; - try - { - pos = loc.Resolve(sys, Dice); - } - catch (Exception) - { - // Can't place this space object because there is no room for it - // So just skip it - continue; - } - - // create object - var sobj = loc.StellarObjectTemplate.Instantiate(); - - // place object - sys.Place(sobj, pos); - - // for planets with moons - if (sobj is Planet) - planets.Add(loc, (Planet)sobj); - - // set flags for naming - sobj.Index = sys.FindSpaceObjects(s => s.GetType() == sobj.GetType()).Count() + 1; - sobj.IsUnique = StellarObjectLocations.Where(l => typeof(ITemplate<>).MakeGenericType(sobj.GetType()).IsAssignableFrom(l.StellarObjectTemplate.GetType())).Count() == 1; - if (sobj is Planet && loc is SameAsStellarObjectLocation) - { - var planet = (Planet)sobj; - var loc2 = (SameAsStellarObjectLocation)loc; - planet.MoonOf = planets[StellarObjectLocations[loc2.TargetIndex - 1]]; - } + var planet = (Planet)sobj; + var loc2 = (SameAsStellarObjectLocation)loc; + planet.MoonOf = planets[StellarObjectLocations[loc2.TargetIndex - 1]]; } - return sys; } + return sys; } } \ No newline at end of file diff --git a/FrEee/Modding/Templates/StarTemplate.cs b/FrEee/Modding/Templates/StarTemplate.cs index e4baab779..44a02466c 100644 --- a/FrEee/Modding/Templates/StarTemplate.cs +++ b/FrEee/Modding/Templates/StarTemplate.cs @@ -1,92 +1,91 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; -namespace FrEee.Modding.Templates +namespace FrEee.Modding.Templates; + +/// +/// A template for generating stars. +/// +[Serializable] +public class StarTemplate : ITemplate, IModObject { /// - /// A template for generating stars. + /// Abilities to assign to the star. + /// + public RandomAbilityTemplate Abilities { get; set; } + + /// + /// The age of the star, or null to choose an age randomly. + /// + public string Age { get; set; } + + /// + /// The brightness of the star, or null to choose a brightness randomly. + /// + public string Brightness { get; set; } + + /// + /// The color of the star, or null to choose a color randomly. + /// + public string Color { get; set; } + + /// + /// Do we want a destroyed star? /// - [Serializable] - public class StarTemplate : ITemplate, IModObject + public bool IsDestroyed { get; set; } + + public bool IsDisposed { get; set; } + + public string ModID { - /// - /// Abilities to assign to the star. - /// - public RandomAbilityTemplate Abilities { get; set; } - - /// - /// The age of the star, or null to choose an age randomly. - /// - public string Age { get; set; } - - /// - /// The brightness of the star, or null to choose a brightness randomly. - /// - public string Brightness { get; set; } - - /// - /// The color of the star, or null to choose a color randomly. - /// - public string Color { get; set; } - - /// - /// Do we want a destroyed star? - /// - public bool IsDestroyed { get; set; } - - public bool IsDisposed { get; set; } - - public string ModID - { - get; - set; - } - - public string Name { get; set; } - - /// - /// The size of the star, or null to choose a size randomly. - /// - public StellarSize? StellarSize { get; set; } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - public void Dispose() - { - // TODO - remove it from somewhere? - IsDisposed = true; - } - - public Star Instantiate() - { - var candidates = Mod.Current.StellarObjectTemplates.OfType(); - if (StellarSize != null) - candidates = candidates.Where(s => s.StellarSize == StellarSize.Value); - if (Age != null) - candidates = candidates.Where(s => s.Age == Age); - if (Color != null) - candidates = candidates.Where(s => s.Color == Color); - if (Brightness != null) - candidates = candidates.Where(s => s.Brightness == Brightness); - if (!candidates.Any()) - throw new Exception("No stars in SectType.txt match the criteria:\n\tStellar Size: " + (StellarSize == null ? "Any" : StellarSize.ToString()) + "\n\tAge: " + (Age ?? "Any") + "\n\tColor: " + (Color ?? "Any") + "\n\tBrightness: " + (Brightness ?? "Any")); - - var star = candidates.PickRandom().Instantiate(); - - var abil = Abilities.Instantiate(); - if (abil != null) - star.IntrinsicAbilities.Add(abil); - - return star; - } + get; + set; + } + + public string Name { get; set; } + + /// + /// The size of the star, or null to choose a size randomly. + /// + public StellarSize? StellarSize { get; set; } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + public void Dispose() + { + // TODO - remove it from somewhere? + IsDisposed = true; + } + + public Star Instantiate() + { + var candidates = Mod.Current.StellarObjectTemplates.OfType(); + if (StellarSize != null) + candidates = candidates.Where(s => s.StellarSize == StellarSize.Value); + if (Age != null) + candidates = candidates.Where(s => s.Age == Age); + if (Color != null) + candidates = candidates.Where(s => s.Color == Color); + if (Brightness != null) + candidates = candidates.Where(s => s.Brightness == Brightness); + if (!candidates.Any()) + throw new Exception("No stars in SectType.txt match the criteria:\n\tStellar Size: " + (StellarSize == null ? "Any" : StellarSize.ToString()) + "\n\tAge: " + (Age ?? "Any") + "\n\tColor: " + (Color ?? "Any") + "\n\tBrightness: " + (Brightness ?? "Any")); + + var star = candidates.PickRandom().Instantiate(); + + var abil = Abilities.Instantiate(); + if (abil != null) + star.IntrinsicAbilities.Add(abil); + + return star; } } \ No newline at end of file diff --git a/FrEee/Modding/Templates/StormTemplate.cs b/FrEee/Modding/Templates/StormTemplate.cs index 73cb05852..b306f35bd 100644 --- a/FrEee/Modding/Templates/StormTemplate.cs +++ b/FrEee/Modding/Templates/StormTemplate.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Space; using FrEee.Modding.Interfaces; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Game/Objects/AI/AI.cs b/FrEee/Objects/AI/AI.cs similarity index 93% rename from FrEee/Game/Objects/AI/AI.cs rename to FrEee/Objects/AI/AI.cs index 64a067863..cd845da66 100644 --- a/FrEee/Game/Objects/AI/AI.cs +++ b/FrEee/Objects/AI/AI.cs @@ -1,73 +1,73 @@ -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.AI -{ - /// - /// An AI script which has control over a domain. - /// - /// The type of domain. - /// The type of contextual data that the AI needs to be aware of. - [Serializable] - public abstract class AI : IModObject - { - public AI(string name, IScript script, SafeDictionary> ministerNames) - { - Name = name; - Script = script; - MinisterNames = ministerNames; - } - - public bool IsDisposed { get; private set; } - - /// - /// The names of any ministers that the AI can use, keyed by category. - /// - public SafeDictionary> MinisterNames { get; private set; } - - - public string ModID { get; set; } - - public string Name - { - get; - private set; - } - - /// - /// The script to run. - /// - public IScript Script { get; protected set; } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - /// - /// Allows the AI to act on its domain using information from its context. - /// - /// The AI's domain of control. - /// Contextual data that the AI needs to be aware of. - /// The names of any ministers that the player has enabled, keyed by category. - public abstract void Act(TDomain domain, TContext context, SafeDictionary> enabledMinisters); - - - public void Dispose() - { - // TODO - remove from mod? - IsDisposed = true; - } - - public override string ToString() - { - return Name; - } - - - - } +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.AI +{ + /// + /// An AI script which has control over a domain. + /// + /// The type of domain. + /// The type of contextual data that the AI needs to be aware of. + [Serializable] + public abstract class AI : IModObject + { + public AI(string name, IScript script, SafeDictionary> ministerNames) + { + Name = name; + Script = script; + MinisterNames = ministerNames; + } + + public bool IsDisposed { get; private set; } + + /// + /// The names of any ministers that the AI can use, keyed by category. + /// + public SafeDictionary> MinisterNames { get; private set; } + + + public string ModID { get; set; } + + public string Name + { + get; + private set; + } + + /// + /// The script to run. + /// + public IScript Script { get; protected set; } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + /// + /// Allows the AI to act on its domain using information from its context. + /// + /// The AI's domain of control. + /// Contextual data that the AI needs to be aware of. + /// The names of any ministers that the player has enabled, keyed by category. + public abstract void Act(TDomain domain, TContext context, SafeDictionary> enabledMinisters); + + + public void Dispose() + { + // TODO - remove from mod? + IsDisposed = true; + } + + public override string ToString() + { + return Name; + } + + + + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/AI/CSAI.cs b/FrEee/Objects/AI/CSAI.cs similarity index 94% rename from FrEee/Game/Objects/AI/CSAI.cs rename to FrEee/Objects/AI/CSAI.cs index 4a9b9ed90..b0088565f 100644 --- a/FrEee/Game/Objects/AI/CSAI.cs +++ b/FrEee/Objects/AI/CSAI.cs @@ -1,7 +1,7 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; using FrEee.Modding; -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using Microsoft.CodeAnalysis.Scripting; using System; using System.Collections.Generic; @@ -9,7 +9,7 @@ using System.Text; using System.Threading.Tasks; -namespace FrEee.Game.Objects.AI +namespace FrEee.Objects.AI { [Serializable] public class CSAI : AI where TDomain : Empire where TContext : Galaxy diff --git a/FrEee/Game/Objects/AI/PythonAI.cs b/FrEee/Objects/AI/PythonAI.cs similarity index 93% rename from FrEee/Game/Objects/AI/PythonAI.cs rename to FrEee/Objects/AI/PythonAI.cs index c775a8626..c998ff2ca 100644 --- a/FrEee/Game/Objects/AI/PythonAI.cs +++ b/FrEee/Objects/AI/PythonAI.cs @@ -1,12 +1,12 @@ using FrEee.Modding; -using FrEee.Utility; +using FrEee.Utility; using FrEee.Serialization; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -namespace FrEee.Game.Objects.AI +namespace FrEee.Objects.AI { [Serializable] public class PythonAI : AI diff --git a/FrEee/Game/Objects/Abilities/Ability.cs b/FrEee/Objects/Abilities/Ability.cs similarity index 91% rename from FrEee/Game/Objects/Abilities/Ability.cs rename to FrEee/Objects/Abilities/Ability.cs index d6d6bba2e..383f9a84e 100644 --- a/FrEee/Game/Objects/Abilities/Ability.cs +++ b/FrEee/Objects/Abilities/Ability.cs @@ -1,215 +1,215 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Abilities -{ - /// - /// A special ability of some game object, or just a tag used by the AI or by modders. - /// - [Serializable] - public class Ability : IContainable, IReferrable, IModObject, IDataObject, IFormulaHost - { - public Ability(IAbilityObject container) - { - Container = container; - Values = new List>(); - } - - public Ability(IAbilityObject container, AbilityRule rule, Formula? description = null, params object[] values) - { - Container = container; - Rule = rule; - Description = description; - Values = new List>(); - foreach (var val in values) - { - if (val is IFormula f) - { - Values.Add(f.ToStringFormula()); - } - else if (val is IEnumerable fs) - { - foreach (var ff in fs) - { - Values.Add(ff.ToStringFormula()); - } - } - else - { - Values.Add(new LiteralFormula(val.ToString())); - } - } - } - - [DoNotCopy] - public IAbilityObject Container { get; private set; } - - public virtual SafeDictionary Data - { - get - { - var dict = new SafeDictionary(); - dict[nameof(rule)] = rule; - dict[nameof(Description)] = Description; - dict[nameof(Values)] = Values; - dict[nameof(Container)] = Container; - dict[nameof(ID)] = ID; - dict[nameof(IsDisposed)] = IsDisposed; - dict[nameof(ModID)] = ModID; - return dict; - } - - set - { - rule = value[nameof(rule)].Default>(); - Description = value[nameof(Description)].Default>(); - Values = value[nameof(Values)].Default>>(); - Container = value[nameof(Container)].Default(); - ID = value[nameof(ID)].Default(); - IsDisposed = value[nameof(IsDisposed)].Default(); - ModID = value[nameof(ModID)].Default(); - } - } - - /// - /// A description of the ability's effects. - /// Can use, e.g. [%Amount1%] to specify the amount in the Value 1 field. - /// - public Formula? Description { get; set; } - - /// - /// Key for ability groups. - /// - public IEnumerable Group - { - get - { - var list = new List(); - for (int i = 0; i < Rule.ValueRules.Count; i++) - { - if (Rule.ValueRules.Count > i && Rule.ValueRules[i] == AbilityValueRule.Group) - yield return Values[i]; - yield return ""; - } - } - } - - public long ID - { - get; - set; - } - - public bool IsDisposed - { - get; - set; - } - - public string ModID - { - get; - set; - } - - public string Name - { - get { return null; } // TODO - should abilities even have names? - } - - public Empire Owner - { - get - { - if (Container is IOwnable) - return (Container as IOwnable).Owner; - return null; - } - } - - /// - /// The ability rule which defines what ability this is. - /// - [DoNotCopy] - public AbilityRule Rule { get { return rule; } set { rule = value; } } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - /// - /// The first value of the ability. Not all abilities have values, so this might be null! - /// - public Formula Value1 - { - get - { - return Values.ElementAtOrDefault(0); - } - } - - /// - /// The second value of the ability. Not all abilities have two values, so this might be null! - /// - public Formula Value2 - { - get - { - return Values.ElementAtOrDefault(1); - } - } - - /// - /// Extra data for the ability. - /// - public IList> Values { get; set; } - - public IDictionary Variables - { - get - { - var dict = new Dictionary(); - for (var i = 0; i < Values.Count; i++) - dict.Add("Amount" + (i + 1), Values[i]); - if (Rule.Matches("Shield Generation") || Rule.Matches("Phased Shield Generation") || Rule.Matches("Planet - Shield Generation")) - dict.Add("ShieldPointsGenerated", Value1.ToInt()); // TODO - take into account mounts that affect shields - return dict; - } - } - - private ModReference rule { get; set; } - - public void Dispose() - { - if (IsDisposed) - return; - if (Container is IAbilityContainer) - (Container as IAbilityContainer).Abilities.Remove(this); - Galaxy.Current.UnassignID(this); - } - - public override string ToString() - { - // get basic description - string result; - if (Description != null) - result = Description.Evaluate(this, TemplateParameters); - else if (Rule.Description != null) - result = Rule.Description.Evaluate(this, TemplateParameters); - else - result = Rule.Name + ": " + string.Join(", ", Values.Select(v => v.Value)); - - return result; - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Abilities +{ + /// + /// A special ability of some game object, or just a tag used by the AI or by modders. + /// + [Serializable] + public class Ability : IContainable, IReferrable, IModObject, IDataObject, IFormulaHost + { + public Ability(IAbilityObject container) + { + Container = container; + Values = new List>(); + } + + public Ability(IAbilityObject container, AbilityRule rule, Formula? description = null, params object[] values) + { + Container = container; + Rule = rule; + Description = description; + Values = new List>(); + foreach (var val in values) + { + if (val is IFormula f) + { + Values.Add(f.ToStringFormula()); + } + else if (val is IEnumerable fs) + { + foreach (var ff in fs) + { + Values.Add(ff.ToStringFormula()); + } + } + else + { + Values.Add(new LiteralFormula(val.ToString())); + } + } + } + + [DoNotCopy] + public IAbilityObject Container { get; private set; } + + public virtual SafeDictionary Data + { + get + { + var dict = new SafeDictionary(); + dict[nameof(rule)] = rule; + dict[nameof(Description)] = Description; + dict[nameof(Values)] = Values; + dict[nameof(Container)] = Container; + dict[nameof(ID)] = ID; + dict[nameof(IsDisposed)] = IsDisposed; + dict[nameof(ModID)] = ModID; + return dict; + } + + set + { + rule = value[nameof(rule)].Default>(); + Description = value[nameof(Description)].Default>(); + Values = value[nameof(Values)].Default>>(); + Container = value[nameof(Container)].Default(); + ID = value[nameof(ID)].Default(); + IsDisposed = value[nameof(IsDisposed)].Default(); + ModID = value[nameof(ModID)].Default(); + } + } + + /// + /// A description of the ability's effects. + /// Can use, e.g. [%Amount1%] to specify the amount in the Value 1 field. + /// + public Formula? Description { get; set; } + + /// + /// Key for ability groups. + /// + public IEnumerable Group + { + get + { + var list = new List(); + for (int i = 0; i < Rule.ValueRules.Count; i++) + { + if (Rule.ValueRules.Count > i && Rule.ValueRules[i] == AbilityValueRule.Group) + yield return Values[i]; + yield return ""; + } + } + } + + public long ID + { + get; + set; + } + + public bool IsDisposed + { + get; + set; + } + + public string ModID + { + get; + set; + } + + public string Name + { + get { return null; } // TODO - should abilities even have names? + } + + public Empire Owner + { + get + { + if (Container is IOwnable) + return (Container as IOwnable).Owner; + return null; + } + } + + /// + /// The ability rule which defines what ability this is. + /// + [DoNotCopy] + public AbilityRule Rule { get { return rule; } set { rule = value; } } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + /// + /// The first value of the ability. Not all abilities have values, so this might be null! + /// + public Formula Value1 + { + get + { + return Values.ElementAtOrDefault(0); + } + } + + /// + /// The second value of the ability. Not all abilities have two values, so this might be null! + /// + public Formula Value2 + { + get + { + return Values.ElementAtOrDefault(1); + } + } + + /// + /// Extra data for the ability. + /// + public IList> Values { get; set; } + + public IDictionary Variables + { + get + { + var dict = new Dictionary(); + for (var i = 0; i < Values.Count; i++) + dict.Add("Amount" + (i + 1), Values[i]); + if (Rule.Matches("Shield Generation") || Rule.Matches("Phased Shield Generation") || Rule.Matches("Planet - Shield Generation")) + dict.Add("ShieldPointsGenerated", Value1.ToInt()); // TODO - take into account mounts that affect shields + return dict; + } + } + + private ModReference rule { get; set; } + + public void Dispose() + { + if (IsDisposed) + return; + if (Container is IAbilityContainer) + (Container as IAbilityContainer).Abilities.Remove(this); + Galaxy.Current.UnassignID(this); + } + + public override string ToString() + { + // get basic description + string result; + if (Description != null) + result = Description.Evaluate(this, TemplateParameters); + else if (Rule.Description != null) + result = Rule.Description.Evaluate(this, TemplateParameters); + else + result = Rule.Name + ": " + string.Join(", ", Values.Select(v => v.Value)); + + return result; + } + } +} diff --git a/FrEee/Game/Objects/Abilities/AbilityRule.cs b/FrEee/Objects/Abilities/AbilityRule.cs similarity index 95% rename from FrEee/Game/Objects/Abilities/AbilityRule.cs rename to FrEee/Objects/Abilities/AbilityRule.cs index d789cb703..cb1d80841 100644 --- a/FrEee/Game/Objects/Abilities/AbilityRule.cs +++ b/FrEee/Objects/Abilities/AbilityRule.cs @@ -1,294 +1,294 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; - -namespace FrEee.Game.Objects.Abilities -{ - /// - /// A rule for grouping and stacking abilities. - /// - [Serializable] - public class AbilityRule : IModObject - { - public AbilityRule() - { - ValueRules = new List(); - GroupRules = new List(); - Aliases = new HashSet(); - } - - /// - /// Aliases for this ability's name. - /// These must not be aliases or names of other abilities. - /// - public ICollection Aliases { get; set; } - - /// - /// A default description for abilities which do not provide their own description. - /// Can use, e.g. [%Amount1%] to specify the amount in the Value 1 field. - /// - public Formula Description { get; set; } - - /// - /// The rules for stacking abilities after grouping. - /// - public IList GroupRules { get; set; } - - public bool IsActivatable - { - get - { - // TODO - scriptable ability rules - return Matches("Emergency Resupply") || - Matches("Emergency Energy") || - Matches("Self-Destruct") || - Matches("Open Warp Point") || - Matches("Close Warp Point") || - Matches("Create Planet Size") || - Matches("Destroy Planet Size") || - Matches("Create Star") || - Matches("Destroy Star") || - Matches("Create Storm") || - Matches("Destroy Storm") || - Matches("Create Nebulae") || - Matches("Destroy Nebulae") || - Matches("Create Black Hole") || - Matches("Destroy Black Hole") || - Matches("Create Constructed Planet - Star") || - Matches("Create Constructed Planet - Planet") || - Matches("Create Constructed Planet - Storm") || - Matches("Create Constructed Planet - Warp Point") || - Matches("Create Constructed Planet - Asteroids") || - Matches("Create Constructed Planet - Space"); - } - } - - public bool IsDisposed - { - get - { - // can't be disposed of - return false; - } - } - - public string ModID - { - get; - set; - } - - /// - /// The name of the ability to which this rule applies. - /// - public string Name { get; set; } - - /// - /// Valid targets for this ability. - /// - public AbilityTargets Targets { get; set; } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - /// - /// The rules for grouping and stacking abilities. - /// - public IList ValueRules { get; set; } - - /// - /// Finds an ability rule in the current mod. - /// - /// The name or alias. - /// The ability rule, or null if none matches. - public static AbilityRule Find(string nameOrAlias) - { - return Mod.Current.AbilityRules.Where(r => r.Matches(nameOrAlias)).SingleOrDefault(); - } - - /// - /// Can this ability target something? - /// - /// - /// - public bool CanTarget(AbilityTargets target) - { - return Targets.HasFlag(target); - } - - public void Dispose() - { - // nothing to do - } - - /// - /// Groups and stacks abilities. - /// - /// - /// - public ILookup GroupAndStack(IEnumerable abilities, IAbilityObject stackingTo) - { - var ours = abilities.Where(a => a.Rule == this).ToArray(); - - // group abilities - var dict = new SafeDictionary, ICollection>(); - var groupIndices = new List(); - for (int i = 0; i < ValueRules.Count; i++) - { - if (ValueRules[i] == AbilityValueRule.Group) - groupIndices.Add(i); - } - foreach (var a in ours) - { - // treat non-group indices as "equal" for grouping purposes - var key = a.Values.Select((v, i) => groupIndices.Contains(i) ? v.Value : "").ToList(); - var existingKey = dict.Keys.SingleOrDefault(k => k.SequenceEqual(key)); - if (existingKey == null) - { - dict[key] = new List(); - dict[key].Add(a); - } - else - dict[existingKey].Add(a); - } - - // stack abilities - var stackedInGroups = new SafeDictionary>(); - foreach (var group in dict.Values) - { - var stacked = Stack(group, stackingTo, false); - foreach (var stack in stacked) - stackedInGroups.Add(stack.Key, stack); - } - - var final = new List>(); - - // stack grouped abilities if needed - if (ValueRules.Any(r => r == AbilityValueRule.Group)) - { - var groupLeaders = stackedInGroups.Select(g => g.Key); - var stacked = Stack(groupLeaders, stackingTo, true); - foreach (var stack in stacked) - { - foreach (var a in stack) - final.Add(Tuple.Create(stack.Key, a)); - } - } - else - { - foreach (var group in stackedInGroups) - final.Add(Tuple.Create(group.Key, group.Key)); - } - - return final.ToLookup(t => t.Item1, t => t.Item2); - } - - /// - /// Does the specified name match this ability's name or aliases? - /// - /// - /// - public bool Matches(string name) - { - return name == Name || Aliases.Contains(name); - } - - /// - /// Does this rule's name or any of its aliases start with the specified prefix? - /// - /// - /// - public bool StartsWith(string prefix) - { - return Name.StartsWith(prefix) || Aliases.Any(a => a.StartsWith(prefix)); - } - - public override string ToString() - { - return Name; - } - - private ILookup Stack(IEnumerable abilities, IAbilityObject stackingTo, bool groupStacking) - { - if (abilities.Count() <= 1) - return abilities.ToLookup(a => a, a => a); - - var results = new SafeDictionary(); // keys = original abilities, values = stacked abilities - foreach (var abil in abilities) - { - for (int i = 0; i < abil.Values.Count; i++) - { - AbilityValueRule rule; - if (groupStacking) - rule = GroupRules.ElementAtOrDefault(i); - else - rule = ValueRules.ElementAtOrDefault(i); - // TODO - don't repeatedly convert to/from strings, just do it once outside the loop - double? oldval = null; - if (results[abil] != null) - oldval = results[abil].Values.Count > i ? (double?)results[abil].Values[i].Value.ToDouble() : null; - else - { - var match = results.Values.Distinct().Where(a => a != null).SingleOrDefault(a => a.Rule == abil.Rule && a.Values.Select((val, idx) => rule != AbilityValueRule.Group && rule != AbilityValueRule.None || a.Values.Count >= abil.Values.Count && a.Values[idx] == abil.Values[idx]).All(b => b)); - - if (match != null) - { - results[abil] = match; - oldval = results[abil].Values.Count > i ? (double?)results[abil].Values[i].Value.ToDouble() : null; - } - else - results[abil] = new Ability(stackingTo, abil.Rule); - } - double incoming = abil.Values.Count > i ? abil.Values[i].Value.ToDouble() : 0; - double newval = oldval ?? 0; - if (rule == AbilityValueRule.Add) - newval = (oldval ?? 0) + incoming; - else if (rule == AbilityValueRule.TakeAverage) - newval = (oldval ?? 0) + incoming / abilities.Count(); - else if (rule == AbilityValueRule.TakeHighest) - { - if (oldval == null) - newval = incoming; - else - newval = Math.Max(oldval.Value, incoming); - } - else if (rule == AbilityValueRule.TakeLowest) - { - if (oldval == null) - newval = incoming; - else - newval = Math.Min(oldval.Value, incoming); - } - else // group or none - newval = incoming; - if (results[abil].Values.Count > i) - results[abil].Values[i] = newval.ToString(CultureInfo.InvariantCulture); - else - { - while (results[abil].Values.Count < i) - results[abil].Values.Add(null); - results[abil].Values.Add(newval.ToString(CultureInfo.InvariantCulture)); - } - } - } - foreach (var kvp in results) - { - if (results.Values.Where(a => a == kvp.Value).Count() == 1) - { - // ability is "stacked" alone, just use the original ability description - results[kvp.Key].Description = kvp.Key.Description; - } - } - return results.ToLookup(kvp => kvp.Value, kvp => kvp.Key); - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Linq; + +namespace FrEee.Objects.Abilities +{ + /// + /// A rule for grouping and stacking abilities. + /// + [Serializable] + public class AbilityRule : IModObject + { + public AbilityRule() + { + ValueRules = new List(); + GroupRules = new List(); + Aliases = new HashSet(); + } + + /// + /// Aliases for this ability's name. + /// These must not be aliases or names of other abilities. + /// + public ICollection Aliases { get; set; } + + /// + /// A default description for abilities which do not provide their own description. + /// Can use, e.g. [%Amount1%] to specify the amount in the Value 1 field. + /// + public Formula Description { get; set; } + + /// + /// The rules for stacking abilities after grouping. + /// + public IList GroupRules { get; set; } + + public bool IsActivatable + { + get + { + // TODO - scriptable ability rules + return Matches("Emergency Resupply") || + Matches("Emergency Energy") || + Matches("Self-Destruct") || + Matches("Open Warp Point") || + Matches("Close Warp Point") || + Matches("Create Planet Size") || + Matches("Destroy Planet Size") || + Matches("Create Star") || + Matches("Destroy Star") || + Matches("Create Storm") || + Matches("Destroy Storm") || + Matches("Create Nebulae") || + Matches("Destroy Nebulae") || + Matches("Create Black Hole") || + Matches("Destroy Black Hole") || + Matches("Create Constructed Planet - Star") || + Matches("Create Constructed Planet - Planet") || + Matches("Create Constructed Planet - Storm") || + Matches("Create Constructed Planet - Warp Point") || + Matches("Create Constructed Planet - Asteroids") || + Matches("Create Constructed Planet - Space"); + } + } + + public bool IsDisposed + { + get + { + // can't be disposed of + return false; + } + } + + public string ModID + { + get; + set; + } + + /// + /// The name of the ability to which this rule applies. + /// + public string Name { get; set; } + + /// + /// Valid targets for this ability. + /// + public AbilityTargets Targets { get; set; } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + /// + /// The rules for grouping and stacking abilities. + /// + public IList ValueRules { get; set; } + + /// + /// Finds an ability rule in the current mod. + /// + /// The name or alias. + /// The ability rule, or null if none matches. + public static AbilityRule Find(string nameOrAlias) + { + return Mod.Current.AbilityRules.Where(r => r.Matches(nameOrAlias)).SingleOrDefault(); + } + + /// + /// Can this ability target something? + /// + /// + /// + public bool CanTarget(AbilityTargets target) + { + return Targets.HasFlag(target); + } + + public void Dispose() + { + // nothing to do + } + + /// + /// Groups and stacks abilities. + /// + /// + /// + public ILookup GroupAndStack(IEnumerable abilities, IAbilityObject stackingTo) + { + var ours = abilities.Where(a => a.Rule == this).ToArray(); + + // group abilities + var dict = new SafeDictionary, ICollection>(); + var groupIndices = new List(); + for (int i = 0; i < ValueRules.Count; i++) + { + if (ValueRules[i] == AbilityValueRule.Group) + groupIndices.Add(i); + } + foreach (var a in ours) + { + // treat non-group indices as "equal" for grouping purposes + var key = a.Values.Select((v, i) => groupIndices.Contains(i) ? v.Value : "").ToList(); + var existingKey = dict.Keys.SingleOrDefault(k => k.SequenceEqual(key)); + if (existingKey == null) + { + dict[key] = new List(); + dict[key].Add(a); + } + else + dict[existingKey].Add(a); + } + + // stack abilities + var stackedInGroups = new SafeDictionary>(); + foreach (var group in dict.Values) + { + var stacked = Stack(group, stackingTo, false); + foreach (var stack in stacked) + stackedInGroups.Add(stack.Key, stack); + } + + var final = new List>(); + + // stack grouped abilities if needed + if (ValueRules.Any(r => r == AbilityValueRule.Group)) + { + var groupLeaders = stackedInGroups.Select(g => g.Key); + var stacked = Stack(groupLeaders, stackingTo, true); + foreach (var stack in stacked) + { + foreach (var a in stack) + final.Add(Tuple.Create(stack.Key, a)); + } + } + else + { + foreach (var group in stackedInGroups) + final.Add(Tuple.Create(group.Key, group.Key)); + } + + return final.ToLookup(t => t.Item1, t => t.Item2); + } + + /// + /// Does the specified name match this ability's name or aliases? + /// + /// + /// + public bool Matches(string name) + { + return name == Name || Aliases.Contains(name); + } + + /// + /// Does this rule's name or any of its aliases start with the specified prefix? + /// + /// + /// + public bool StartsWith(string prefix) + { + return Name.StartsWith(prefix) || Aliases.Any(a => a.StartsWith(prefix)); + } + + public override string ToString() + { + return Name; + } + + private ILookup Stack(IEnumerable abilities, IAbilityObject stackingTo, bool groupStacking) + { + if (abilities.Count() <= 1) + return abilities.ToLookup(a => a, a => a); + + var results = new SafeDictionary(); // keys = original abilities, values = stacked abilities + foreach (var abil in abilities) + { + for (int i = 0; i < abil.Values.Count; i++) + { + AbilityValueRule rule; + if (groupStacking) + rule = GroupRules.ElementAtOrDefault(i); + else + rule = ValueRules.ElementAtOrDefault(i); + // TODO - don't repeatedly convert to/from strings, just do it once outside the loop + double? oldval = null; + if (results[abil] != null) + oldval = results[abil].Values.Count > i ? (double?)results[abil].Values[i].Value.ToDouble() : null; + else + { + var match = results.Values.Distinct().Where(a => a != null).SingleOrDefault(a => a.Rule == abil.Rule && a.Values.Select((val, idx) => rule != AbilityValueRule.Group && rule != AbilityValueRule.None || a.Values.Count >= abil.Values.Count && a.Values[idx] == abil.Values[idx]).All(b => b)); + + if (match != null) + { + results[abil] = match; + oldval = results[abil].Values.Count > i ? (double?)results[abil].Values[i].Value.ToDouble() : null; + } + else + results[abil] = new Ability(stackingTo, abil.Rule); + } + double incoming = abil.Values.Count > i ? abil.Values[i].Value.ToDouble() : 0; + double newval = oldval ?? 0; + if (rule == AbilityValueRule.Add) + newval = (oldval ?? 0) + incoming; + else if (rule == AbilityValueRule.TakeAverage) + newval = (oldval ?? 0) + incoming / abilities.Count(); + else if (rule == AbilityValueRule.TakeHighest) + { + if (oldval == null) + newval = incoming; + else + newval = Math.Max(oldval.Value, incoming); + } + else if (rule == AbilityValueRule.TakeLowest) + { + if (oldval == null) + newval = incoming; + else + newval = Math.Min(oldval.Value, incoming); + } + else // group or none + newval = incoming; + if (results[abil].Values.Count > i) + results[abil].Values[i] = newval.ToString(CultureInfo.InvariantCulture); + else + { + while (results[abil].Values.Count < i) + results[abil].Values.Add(null); + results[abil].Values.Add(newval.ToString(CultureInfo.InvariantCulture)); + } + } + } + foreach (var kvp in results) + { + if (results.Values.Where(a => a == kvp.Value).Count() == 1) + { + // ability is "stacked" alone, just use the original ability description + results[kvp.Key].Description = kvp.Key.Description; + } + } + return results.ToLookup(kvp => kvp.Value, kvp => kvp.Key); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Aptitude.cs b/FrEee/Objects/Civilization/Aptitude.cs similarity index 94% rename from FrEee/Game/Objects/Civilization/Aptitude.cs rename to FrEee/Objects/Civilization/Aptitude.cs index ad30d0963..8bd5e6962 100644 --- a/FrEee/Game/Objects/Civilization/Aptitude.cs +++ b/FrEee/Objects/Civilization/Aptitude.cs @@ -1,189 +1,189 @@ -using FrEee.Game.Interfaces; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// A racial aptitude. - /// - [Serializable] - public class Aptitude : INamed - { - // TODO - moddable aptitudes? - public static IEnumerable All - { - get - { - return new Aptitude[] - { - PhysicalStrength, - Intelligence, - Cunning, - EnvironmentalResistance, - Reproduction, - Happiness, - Aggressiveness, - Defensiveness, - PoliticalSavvy, - Mining, - Farming, - Refining, - Construction, - Repair, - Maintenance, - }; - } - } - - public string AbilityName { get; set; } - - public int Cost { get; set; } - - public string Description { get; set; } - - public int HighCost { get; set; } - - public int LowCost { get; set; } - - public int MaxPercent { get; set; } - - public int MinPercent { get; set; } - - public string Name { get; set; } - - public int Threshold { get; set; } - - public static readonly Aptitude Aggressiveness = new Aptitude - { - Name = "Aggressiveness", - AbilityName = "Race - Combat To Hit Offense Plus", - Description = "Affects accuracy of weapons.", - }; - - public static readonly Aptitude Construction = new Aptitude - { - Name = "Construction Aptitude", - AbilityName = "Race - Construction Aptitude", - Description = "Affects rate of construction.", - }; - - public static readonly Aptitude Cunning = new Aptitude - { - Name = "Cunning", - AbilityName = "Race Point Generation Modifier - Intelligence", - Description = "Affects intelligence point generation.", - }; - - public static readonly Aptitude Defensiveness = new Aptitude - { - Name = "Defensiveness", - AbilityName = "Race - Combat To Hit Defense Plus", - Description = "Affects evasion in combat.", - }; - - public static readonly Aptitude EnvironmentalResistance = new Aptitude - { - Name = "Environmental Resistance", - AbilityName = "Race - Environmental Resistance", - Description = "Affects penalties to reproduction from poor planetary conditions.", - }; - - public static readonly Aptitude Farming = new Aptitude - { - Name = "Farming Aptitude", - AbilityName = "Resource Gen Modifier Race - Organics", - Description = "Affects organics resource income.", - }; - - public static readonly Aptitude Happiness = new Aptitude - { - Name = "Happiness", - AbilityName = "Race - Happiness", - Description = "Affects population happines.", - }; - - public static readonly Aptitude Intelligence = new Aptitude - { - Name = "Intelligence", - AbilityName = "Race Point Generation Modifier - Research", - Description = "Affects research point generation.", - }; - - public static readonly Aptitude Maintenance = new Aptitude - { - Name = "Maintenance Aptitude", - AbilityName = "Race - Maintenance Aptitude", - Description = "Affects maintenance costs.", - }; - - public static readonly Aptitude Mining = new Aptitude - { - Name = "Mining Aptitude", - AbilityName = "Resource Gen Modifier Race - Minerals", - Description = "Affects minerals resource income.", - }; - - public static readonly Aptitude PhysicalStrength = new Aptitude - { - Name = "Physical Strength", - AbilityName = "Race - Physical Strength", - Description = "Affects ground combat damage.", - }; - - public static readonly Aptitude PoliticalSavvy = new Aptitude - { - Name = "Political Savvy", - AbilityName = "Race - Political Savvy", - Description = "Affects trade income.", - }; - - public static readonly Aptitude Refining = new Aptitude - { - Name = "Refining Aptitude", - AbilityName = "Resource Gen Modifier Race - Radioactives", - Description = "Affects radioactives resource income.", - }; - - public static readonly Aptitude Repair = new Aptitude - { - Name = "Repair Aptitude", - AbilityName = "Race - Repair Aptitude", - Description = "Affects repair rate.", - }; - - public static readonly Aptitude Reproduction = new Aptitude - { - Name = "Reproduction", - AbilityName = "Race - Reproduction", - Description = "Affects population reproduction rate.", - }; - - public int GetCost(int val) - { - if (val > 100) - { - var high = 100 + Threshold; - if (val > high) - return (val - high) * HighCost + (high - 100) * Cost; - else - return (val - 100) * Cost; - } - else if (val < 100) - { - var low = 100 - Threshold; - if (val < low) - return (val - low) * LowCost + (low - 100) * Cost; - else - return (val - 100) * Cost; - } - else - return 0; - } - - public override string ToString() - { - return Name; - } - } +using FrEee.Interfaces; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.Civilization +{ + /// + /// A racial aptitude. + /// + [Serializable] + public class Aptitude : INamed + { + // TODO - moddable aptitudes? + public static IEnumerable All + { + get + { + return new Aptitude[] + { + PhysicalStrength, + Intelligence, + Cunning, + EnvironmentalResistance, + Reproduction, + Happiness, + Aggressiveness, + Defensiveness, + PoliticalSavvy, + Mining, + Farming, + Refining, + Construction, + Repair, + Maintenance, + }; + } + } + + public string AbilityName { get; set; } + + public int Cost { get; set; } + + public string Description { get; set; } + + public int HighCost { get; set; } + + public int LowCost { get; set; } + + public int MaxPercent { get; set; } + + public int MinPercent { get; set; } + + public string Name { get; set; } + + public int Threshold { get; set; } + + public static readonly Aptitude Aggressiveness = new Aptitude + { + Name = "Aggressiveness", + AbilityName = "Race - Combat To Hit Offense Plus", + Description = "Affects accuracy of weapons.", + }; + + public static readonly Aptitude Construction = new Aptitude + { + Name = "Construction Aptitude", + AbilityName = "Race - Construction Aptitude", + Description = "Affects rate of construction.", + }; + + public static readonly Aptitude Cunning = new Aptitude + { + Name = "Cunning", + AbilityName = "Race Point Generation Modifier - Intelligence", + Description = "Affects intelligence point generation.", + }; + + public static readonly Aptitude Defensiveness = new Aptitude + { + Name = "Defensiveness", + AbilityName = "Race - Combat To Hit Defense Plus", + Description = "Affects evasion in combat.", + }; + + public static readonly Aptitude EnvironmentalResistance = new Aptitude + { + Name = "Environmental Resistance", + AbilityName = "Race - Environmental Resistance", + Description = "Affects penalties to reproduction from poor planetary conditions.", + }; + + public static readonly Aptitude Farming = new Aptitude + { + Name = "Farming Aptitude", + AbilityName = "Resource Gen Modifier Race - Organics", + Description = "Affects organics resource income.", + }; + + public static readonly Aptitude Happiness = new Aptitude + { + Name = "Happiness", + AbilityName = "Race - Happiness", + Description = "Affects population happines.", + }; + + public static readonly Aptitude Intelligence = new Aptitude + { + Name = "Intelligence", + AbilityName = "Race Point Generation Modifier - Research", + Description = "Affects research point generation.", + }; + + public static readonly Aptitude Maintenance = new Aptitude + { + Name = "Maintenance Aptitude", + AbilityName = "Race - Maintenance Aptitude", + Description = "Affects maintenance costs.", + }; + + public static readonly Aptitude Mining = new Aptitude + { + Name = "Mining Aptitude", + AbilityName = "Resource Gen Modifier Race - Minerals", + Description = "Affects minerals resource income.", + }; + + public static readonly Aptitude PhysicalStrength = new Aptitude + { + Name = "Physical Strength", + AbilityName = "Race - Physical Strength", + Description = "Affects ground combat damage.", + }; + + public static readonly Aptitude PoliticalSavvy = new Aptitude + { + Name = "Political Savvy", + AbilityName = "Race - Political Savvy", + Description = "Affects trade income.", + }; + + public static readonly Aptitude Refining = new Aptitude + { + Name = "Refining Aptitude", + AbilityName = "Resource Gen Modifier Race - Radioactives", + Description = "Affects radioactives resource income.", + }; + + public static readonly Aptitude Repair = new Aptitude + { + Name = "Repair Aptitude", + AbilityName = "Race - Repair Aptitude", + Description = "Affects repair rate.", + }; + + public static readonly Aptitude Reproduction = new Aptitude + { + Name = "Reproduction", + AbilityName = "Race - Reproduction", + Description = "Affects population reproduction rate.", + }; + + public int GetCost(int val) + { + if (val > 100) + { + var high = 100 + Threshold; + if (val > high) + return (val - high) * HighCost + (high - 100) * Cost; + else + return (val - 100) * Cost; + } + else if (val < 100) + { + var low = 100 - Threshold; + if (val < low) + return (val - low) * LowCost + (low - 100) * Cost; + else + return (val - 100) * Cost; + } + else + return 0; + } + + public override string ToString() + { + return Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Cargo.cs b/FrEee/Objects/Civilization/Cargo.cs similarity index 93% rename from FrEee/Game/Objects/Civilization/Cargo.cs rename to FrEee/Objects/Civilization/Cargo.cs index f08ee6dac..4197ffb85 100644 --- a/FrEee/Game/Objects/Civilization/Cargo.cs +++ b/FrEee/Objects/Civilization/Cargo.cs @@ -1,265 +1,265 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Combat; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// Cargo stored on a colony or ship/base. - /// - public class Cargo : IDamageable - { - public Cargo() - { - Population = new SafeDictionary(); - Units = new HashSet(); - } - - public int ArmorHitpoints - { - get { return Units.Sum(u => u.ArmorHitpoints); } - } - - public int HitChance - { - get { return 1; } - } - - [DoNotSerialize(false)] - public int Hitpoints - { - get - { - double popHPPerPerson = Mod.Current.Settings.PopulationHitpoints; - return Population.Sum(kvp => (int)Math.Ceiling(kvp.Value * popHPPerPerson)) + Units.Sum(u => u.Hitpoints); - } - set - { - throw new NotSupportedException("Can't set cargo HP; it's computed."); - } - } - - public int HullHitpoints - { - get { return Units.Sum(u => u.HullHitpoints) + (int)(Population.Sum(kvp => kvp.Value) * Mod.Current.Settings.PopulationHitpoints); } - } - - public bool IsDestroyed - { - get { return Hitpoints <= 0; } - } - - public int MaxArmorHitpoints - { - get { return Units.Sum(u => u.MaxArmorHitpoints); } - } - - public int MaxHitpoints - { - get - { - double popHPPerPerson = Mod.Current.Settings.PopulationHitpoints; - return Population.Sum(kvp => (int)Math.Ceiling(kvp.Value * popHPPerPerson)) + Units.Sum(u => u.MaxHitpoints); - } - } - - public int MaxHullHitpoints - { - get { return Units.Sum(u => u.MaxHullHitpoints); } - } - - public int MaxNormalShields - { - get { return 0; } - } - - public int MaxPhasedShields - { - get { return 0; } - } - - public int MaxShieldHitpoints - { - get { return Units.Sum(u => u.MaxShieldHitpoints); } - } - - [DoNotSerialize(false)] - public int NormalShields - { - get - { - return 0; - } - set - { - throw new NotSupportedException("Cargo cannot have shields."); - } - } - - [DoNotSerialize(false)] - public int PhasedShields - { - get - { - return 0; - } - set - { - throw new NotSupportedException("Cargo cannot have shields."); - } - } - - /// - /// The population stored in cargo. - /// - public SafeDictionary Population { get; set; } - - public int ShieldHitpoints - { - get { return Units.Sum(u => u.ShieldHitpoints); } - } - - /// - /// The amount of space taken by this cargo. - /// - public int Size - { - get - { - if (fakeSize != null) - return fakeSize.Value; - - // TODO - per race population size? - return (int)Math.Round(Population.Sum(kvp => kvp.Value) * Mod.Current.Settings.PopulationSize) + Units.Sum(u => u.Design.Hull.Size); - } - } - - /// - /// The units stored in cargo. - /// - public ICollection Units { get; set; } - - private int? fakeSize { get; set; } - - public static Cargo operator +(Cargo c1, Cargo c2) - { - var result = new Cargo(); - foreach (var kvp in c1.Population) - result.Population[kvp.Key] += kvp.Value; - foreach (var kvp in c2.Population) - result.Population[kvp.Key] += kvp.Value; - foreach (var unit in c1.Units.Union(c2.Units)) - result.Units.Add(unit); - return result; - } - - /// - /// Passes repair on to units. - /// Tries to repair more-damaged units first. - /// TODO - repair priorities - /// - /// - /// - public int? Repair(int? amount = null) - { - if (amount == null) - { - foreach (var u in Units.OrderBy(u => (double)u.Hitpoints / (double)u.MaxHitpoints)) - u.Repair(amount); - } - else - { - foreach (var u in Units.OrderBy(u => (double)u.Hitpoints / (double)u.MaxHitpoints)) - amount = u.Repair(amount); - } - return amount; - } - - public void ReplenishShields(int? amount = null) - { - // do nothing - } - - /// - /// Sets this cargo's fake size to its size (or zero if cargo size can't be seen) and clears the actual population and units. - /// Used for fog of war. - /// - public void SetFakeSize(bool canSeeCargoSize) - { - if (canSeeCargoSize && fakeSize == null) - fakeSize = Size; - else if (!canSeeCargoSize) - fakeSize = 0; - - Population.Clear(); - Units.Clear(); - } - - public int TakeDamage(Hit hit, PRNG dice = null) - { - int damage = hit.NominalDamage; - if (Population.Any() && Units.Any()) - { - // for now, have a 50% chance to hit population first and a 50% chance to hit units first - // TODO - base the chance to hit population vs. units on relative HP or something? - var coin = RandomHelper.Next(2, dice); - int leftover; - if (coin == 0) - leftover = TakePopulationDamage(hit, damage, dice); - else - leftover = TakeUnitDamage(hit, damage, dice); - if (coin == 0) - return TakeUnitDamage(hit, leftover, dice); - else - return TakePopulationDamage(hit, damage, dice); - } - else if (Population.Any()) - return TakePopulationDamage(hit, damage, dice); - else if (Units.Any()) - return TakeUnitDamage(hit, damage, dice); - else - return damage; // nothing to damage - } - - private int TakePopulationDamage(Hit hit, int damage, PRNG dice = null) - { - int inflicted = 0; - for (int i = 0; i < damage; i++) - { - // pick a race and kill some population - var race = Population.PickWeighted(dice); - if (race == null) - break; // no more population - double popHPPerPerson = Mod.Current.Settings.PopulationHitpoints; - // TODO - don't ceiling the popKilled, just stack it up - int popKilled = (int)Math.Ceiling(hit.Shot.DamageType.PopulationDamage.Evaluate(hit.Shot) / popHPPerPerson); - Population[race] -= popKilled; - if (Population[race] < 0) - Population[race] = 0; - inflicted += 1; - } - // clear population that was emptied out - foreach (var race in Population.Where(kvp => kvp.Value <= 0).Select(kvp => kvp.Key).ToArray()) - Population.Remove(race); - return damage - inflicted; - } - - private int TakeUnitDamage(Hit hit, int damage, PRNG dice = null) - { - // units with more HP are more likely to get hit first, like with leaky armor - var units = Units.Where(u => !u.IsDestroyed).ToDictionary(u => u, u => u.MaxHitpoints); - while (units.Any() && damage > 0) - { - var u = units.PickWeighted(dice); - damage = u.TakeDamage(hit, dice); - units = units.Where(x => !x.Key.IsDestroyed).ToDictionary(x => x.Key, x => x.Value); - } - return damage; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Combat; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Civilization +{ + /// + /// Cargo stored on a colony or ship/base. + /// + public class Cargo : IDamageable + { + public Cargo() + { + Population = new SafeDictionary(); + Units = new HashSet(); + } + + public int ArmorHitpoints + { + get { return Units.Sum(u => u.ArmorHitpoints); } + } + + public int HitChance + { + get { return 1; } + } + + [DoNotSerialize(false)] + public int Hitpoints + { + get + { + double popHPPerPerson = Mod.Current.Settings.PopulationHitpoints; + return Population.Sum(kvp => (int)Math.Ceiling(kvp.Value * popHPPerPerson)) + Units.Sum(u => u.Hitpoints); + } + set + { + throw new NotSupportedException("Can't set cargo HP; it's computed."); + } + } + + public int HullHitpoints + { + get { return Units.Sum(u => u.HullHitpoints) + (int)(Population.Sum(kvp => kvp.Value) * Mod.Current.Settings.PopulationHitpoints); } + } + + public bool IsDestroyed + { + get { return Hitpoints <= 0; } + } + + public int MaxArmorHitpoints + { + get { return Units.Sum(u => u.MaxArmorHitpoints); } + } + + public int MaxHitpoints + { + get + { + double popHPPerPerson = Mod.Current.Settings.PopulationHitpoints; + return Population.Sum(kvp => (int)Math.Ceiling(kvp.Value * popHPPerPerson)) + Units.Sum(u => u.MaxHitpoints); + } + } + + public int MaxHullHitpoints + { + get { return Units.Sum(u => u.MaxHullHitpoints); } + } + + public int MaxNormalShields + { + get { return 0; } + } + + public int MaxPhasedShields + { + get { return 0; } + } + + public int MaxShieldHitpoints + { + get { return Units.Sum(u => u.MaxShieldHitpoints); } + } + + [DoNotSerialize(false)] + public int NormalShields + { + get + { + return 0; + } + set + { + throw new NotSupportedException("Cargo cannot have shields."); + } + } + + [DoNotSerialize(false)] + public int PhasedShields + { + get + { + return 0; + } + set + { + throw new NotSupportedException("Cargo cannot have shields."); + } + } + + /// + /// The population stored in cargo. + /// + public SafeDictionary Population { get; set; } + + public int ShieldHitpoints + { + get { return Units.Sum(u => u.ShieldHitpoints); } + } + + /// + /// The amount of space taken by this cargo. + /// + public int Size + { + get + { + if (fakeSize != null) + return fakeSize.Value; + + // TODO - per race population size? + return (int)Math.Round(Population.Sum(kvp => kvp.Value) * Mod.Current.Settings.PopulationSize) + Units.Sum(u => u.Design.Hull.Size); + } + } + + /// + /// The units stored in cargo. + /// + public ICollection Units { get; set; } + + private int? fakeSize { get; set; } + + public static Cargo operator +(Cargo c1, Cargo c2) + { + var result = new Cargo(); + foreach (var kvp in c1.Population) + result.Population[kvp.Key] += kvp.Value; + foreach (var kvp in c2.Population) + result.Population[kvp.Key] += kvp.Value; + foreach (var unit in c1.Units.Union(c2.Units)) + result.Units.Add(unit); + return result; + } + + /// + /// Passes repair on to units. + /// Tries to repair more-damaged units first. + /// TODO - repair priorities + /// + /// + /// + public int? Repair(int? amount = null) + { + if (amount == null) + { + foreach (var u in Units.OrderBy(u => (double)u.Hitpoints / (double)u.MaxHitpoints)) + u.Repair(amount); + } + else + { + foreach (var u in Units.OrderBy(u => (double)u.Hitpoints / (double)u.MaxHitpoints)) + amount = u.Repair(amount); + } + return amount; + } + + public void ReplenishShields(int? amount = null) + { + // do nothing + } + + /// + /// Sets this cargo's fake size to its size (or zero if cargo size can't be seen) and clears the actual population and units. + /// Used for fog of war. + /// + public void SetFakeSize(bool canSeeCargoSize) + { + if (canSeeCargoSize && fakeSize == null) + fakeSize = Size; + else if (!canSeeCargoSize) + fakeSize = 0; + + Population.Clear(); + Units.Clear(); + } + + public int TakeDamage(Hit hit, PRNG dice = null) + { + int damage = hit.NominalDamage; + if (Population.Any() && Units.Any()) + { + // for now, have a 50% chance to hit population first and a 50% chance to hit units first + // TODO - base the chance to hit population vs. units on relative HP or something? + var coin = RandomHelper.Next(2, dice); + int leftover; + if (coin == 0) + leftover = TakePopulationDamage(hit, damage, dice); + else + leftover = TakeUnitDamage(hit, damage, dice); + if (coin == 0) + return TakeUnitDamage(hit, leftover, dice); + else + return TakePopulationDamage(hit, damage, dice); + } + else if (Population.Any()) + return TakePopulationDamage(hit, damage, dice); + else if (Units.Any()) + return TakeUnitDamage(hit, damage, dice); + else + return damage; // nothing to damage + } + + private int TakePopulationDamage(Hit hit, int damage, PRNG dice = null) + { + int inflicted = 0; + for (int i = 0; i < damage; i++) + { + // pick a race and kill some population + var race = Population.PickWeighted(dice); + if (race == null) + break; // no more population + double popHPPerPerson = Mod.Current.Settings.PopulationHitpoints; + // TODO - don't ceiling the popKilled, just stack it up + int popKilled = (int)Math.Ceiling(hit.Shot.DamageType.PopulationDamage.Evaluate(hit.Shot) / popHPPerPerson); + Population[race] -= popKilled; + if (Population[race] < 0) + Population[race] = 0; + inflicted += 1; + } + // clear population that was emptied out + foreach (var race in Population.Where(kvp => kvp.Value <= 0).Select(kvp => kvp.Key).ToArray()) + Population.Remove(race); + return damage - inflicted; + } + + private int TakeUnitDamage(Hit hit, int damage, PRNG dice = null) + { + // units with more HP are more likely to get hit first, like with leaky armor + var units = Units.Where(u => !u.IsDestroyed).ToDictionary(u => u, u => u.MaxHitpoints); + while (units.Any() && damage > 0) + { + var u = units.PickWeighted(dice); + damage = u.TakeDamage(hit, dice); + units = units.Where(x => !x.Key.IsDestroyed).ToDictionary(x => x.Key, x => x.Value); + } + return damage; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/CargoDelta.cs b/FrEee/Objects/Civilization/CargoDelta.cs similarity index 93% rename from FrEee/Game/Objects/Civilization/CargoDelta.cs rename to FrEee/Objects/Civilization/CargoDelta.cs index 4005ba5a7..626f3e7ca 100644 --- a/FrEee/Game/Objects/Civilization/CargoDelta.cs +++ b/FrEee/Objects/Civilization/CargoDelta.cs @@ -1,126 +1,127 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// A change in cargo. - /// - public class CargoDelta : IPromotable - { - public CargoDelta() - { - RacePopulation = new GalaxyReferenceKeyedDictionary(); - AllPopulation = false; - AnyPopulation = 0L; - Units = new GalaxyReferenceSet(); - UnitDesignTonnage = new GalaxyReferenceKeyedDictionary, int?>(); - UnitRoleTonnage = new SafeDictionary(); - UnitTypeTonnage = new SafeDictionary(); - } - - /// - /// Should we transfer as much population as possible, regardless of race? - /// - public bool AllPopulation { get; set; } - - /// - /// Amount of population to transfer where the race of the population is irrelevant. - /// - public long AnyPopulation { get; set; } - - /// - /// Estimated tonnage of the cargo delta. - /// Will return null if there is any "All" quantity specified. - /// - public int? EstimatedTonnage - { - get - { - int? tonnage = 0; - foreach (var kvp in RacePopulation) - { - if (kvp.Value == null) - return null; - tonnage += (int)Math.Ceiling(kvp.Value.Value * Mod.Current.Settings.PopulationSize); - } - if (AllPopulation) - return null; - tonnage += (int)Math.Ceiling(AnyPopulation * Mod.Current.Settings.PopulationSize); - foreach (var u in Units) - tonnage += u.Design.Hull.Size; - foreach (var d in UnitDesignTonnage) - tonnage += d.Value; - foreach (var r in UnitRoleTonnage) - tonnage += r.Value; - foreach (var t in UnitTypeTonnage) - tonnage += t.Value; - return tonnage; - } - } - - public GalaxyReferenceKeyedDictionary RacePopulation { get; private set; } - public GalaxyReferenceKeyedDictionary, int?> UnitDesignTonnage { get; private set; } - public SafeDictionary UnitRoleTonnage { get; private set; } - public GalaxyReferenceSet Units { get; private set; } - public SafeDictionary UnitTypeTonnage { get; private set; } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - RacePopulation.ReplaceClientIDs(idmap, done); - UnitDesignTonnage.ReplaceClientIDs(idmap, done); - Units.ReplaceClientIDs(idmap, done); - } - } - - public override string ToString() - { - var items = new List(); - foreach (var kvp in RacePopulation) - { - if (kvp.Value == null) - items.Add("All " + kvp.Key + " Population"); - else - items.Add(kvp.Value.ToUnitString() + " " + kvp.Key + " Population"); - } - if (AllPopulation) - items.Add("All Population"); - else if (AnyPopulation != 0) - items.Add(AnyPopulation.ToUnitString() + " Population of Any Race"); - foreach (var unit in Units) - items.Add(unit.ToString()); - foreach (var kvp in UnitDesignTonnage) - { - if (kvp.Value == null) - items.Add("All \"" + kvp.Key + "\" " + kvp.Key.VehicleTypeName + "s"); - else - items.Add(kvp.Value.Kilotons() + " of " + kvp.Key + "\" " + kvp.Key.VehicleTypeName + "s"); - } - foreach (var kvp in UnitRoleTonnage) - { - if (kvp.Value == null) - items.Add("All " + kvp.Key + " Units"); - else - items.Add(kvp.Value.Kilotons() + " of " + kvp.Key + " Units"); - } - foreach (var kvp in UnitTypeTonnage) - { - if (kvp.Value == null) - items.Add("All " + kvp.Key + "s"); - else - items.Add(kvp.Value.Kilotons() + " of " + kvp.Key + "s"); - } - return string.Join(", ", items.ToArray()); - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Modding; +using FrEee.Utility; +using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.Civilization +{ + /// + /// A change in cargo. + /// + public class CargoDelta : IPromotable + { + public CargoDelta() + { + RacePopulation = new GalaxyReferenceKeyedDictionary(); + AllPopulation = false; + AnyPopulation = 0L; + Units = new GalaxyReferenceSet(); + UnitDesignTonnage = new GalaxyReferenceKeyedDictionary, int?>(); + UnitRoleTonnage = new SafeDictionary(); + UnitTypeTonnage = new SafeDictionary(); + } + + /// + /// Should we transfer as much population as possible, regardless of race? + /// + public bool AllPopulation { get; set; } + + /// + /// Amount of population to transfer where the race of the population is irrelevant. + /// + public long AnyPopulation { get; set; } + + /// + /// Estimated tonnage of the cargo delta. + /// Will return null if there is any "All" quantity specified. + /// + public int? EstimatedTonnage + { + get + { + int? tonnage = 0; + foreach (var kvp in RacePopulation) + { + if (kvp.Value == null) + return null; + tonnage += (int)Math.Ceiling(kvp.Value.Value * Mod.Current.Settings.PopulationSize); + } + if (AllPopulation) + return null; + tonnage += (int)Math.Ceiling(AnyPopulation * Mod.Current.Settings.PopulationSize); + foreach (var u in Units) + tonnage += u.Design.Hull.Size; + foreach (var d in UnitDesignTonnage) + tonnage += d.Value; + foreach (var r in UnitRoleTonnage) + tonnage += r.Value; + foreach (var t in UnitTypeTonnage) + tonnage += t.Value; + return tonnage; + } + } + + public GalaxyReferenceKeyedDictionary RacePopulation { get; private set; } + public GalaxyReferenceKeyedDictionary, int?> UnitDesignTonnage { get; private set; } + public SafeDictionary UnitRoleTonnage { get; private set; } + public GalaxyReferenceSet Units { get; private set; } + public SafeDictionary UnitTypeTonnage { get; private set; } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + RacePopulation.ReplaceClientIDs(idmap, done); + UnitDesignTonnage.ReplaceClientIDs(idmap, done); + Units.ReplaceClientIDs(idmap, done); + } + } + + public override string ToString() + { + var items = new List(); + foreach (var kvp in RacePopulation) + { + if (kvp.Value == null) + items.Add("All " + kvp.Key + " Population"); + else + items.Add(kvp.Value.ToUnitString() + " " + kvp.Key + " Population"); + } + if (AllPopulation) + items.Add("All Population"); + else if (AnyPopulation != 0) + items.Add(AnyPopulation.ToUnitString() + " Population of Any Race"); + foreach (var unit in Units) + items.Add(unit.ToString()); + foreach (var kvp in UnitDesignTonnage) + { + if (kvp.Value == null) + items.Add("All \"" + kvp.Key + "\" " + kvp.Key.VehicleTypeName + "s"); + else + items.Add(kvp.Value.Kilotons() + " of " + kvp.Key + "\" " + kvp.Key.VehicleTypeName + "s"); + } + foreach (var kvp in UnitRoleTonnage) + { + if (kvp.Value == null) + items.Add("All " + kvp.Key + " Units"); + else + items.Add(kvp.Value.Kilotons() + " of " + kvp.Key + " Units"); + } + foreach (var kvp in UnitTypeTonnage) + { + if (kvp.Value == null) + items.Add("All " + kvp.Key + "s"); + else + items.Add(kvp.Value.Kilotons() + " of " + kvp.Key + "s"); + } + return string.Join(", ", items.ToArray()); + } + } +} diff --git a/FrEee/Game/Objects/Civilization/Colony.cs b/FrEee/Objects/Civilization/Colony.cs similarity index 92% rename from FrEee/Game/Objects/Civilization/Colony.cs rename to FrEee/Objects/Civilization/Colony.cs index e1b382358..e4e6793bc 100644 --- a/FrEee/Game/Objects/Civilization/Colony.cs +++ b/FrEee/Objects/Civilization/Colony.cs @@ -1,260 +1,260 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// A colony on a planet. - /// - [Serializable] - public class Colony : IOwnableAbilityObject, IFoggable, IContainable, IIncomeProducer, IReferrable - { - public Colony() - { - Facilities = new List(); - Population = new SafeDictionary(); - Cargo = new Cargo(); - } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.Planet; } - } - - /// - /// The anger level of each race on this colony. - /// - public SafeDictionary Anger { get; private set; } = new SafeDictionary(); - - /// - /// The anger changes this turn of each race on this colony. - /// - public SafeDictionary AngerDeltas { get; private set; } = new SafeDictionary(); - - /// - /// The average anger of all races on this colony, weighted by population. - /// - public int AverageAnger => (int)Anger.WeightedAverage(kvp => Population[kvp.Key], kvp => kvp.Value); - - /// - /// The cargo stored on this colony. - /// - public Cargo Cargo { get; set; } - - public IEnumerable Children - { - get - { - return Facilities.Cast().Concat(Cargo.Units.Cast()); - } - } - - /// - /// This colony's construction queue. - /// - public ConstructionQueue ConstructionQueue - { - get; - set; - } - - public Planet Container - { - get - { - return Galaxy.Current.FindSpaceObjects().SingleOrDefault(p => p.Colony == this); - } - } - - /// - /// The facilities on this colony. - /// - public ICollection Facilities { get; set; } - - public long ID - { - get; - set; - } - - public IEnumerable IntrinsicAbilities - { - get { yield break; } - } - - public bool IsDisposed { get; set; } - - public bool IsHomeworld { get; set; } - - public bool IsMemory - { - get; - set; - } - - /// - /// Ratio of population that has the "No Spaceports" ability. - /// - public double MerchantsRatio - { - get - { - var merchants = Population.Where(kvp => kvp.Key.HasAbility("No Spaceports")).Sum(kvp => kvp.Value); - var totalPop = Population.Sum(kvp => kvp.Value); - var ratio = (double)merchants / (double)totalPop; - return ratio; - } - } - - /// - /// The overall mood of the population of this colony. - /// - public Mood Mood => Mod.Current.Settings.MoodThresholds.Where(kvp => kvp.Value <= AverageAnger).WithMax(kvp => kvp.Value).Single().Key; - - /// - /// The mood of each race on this colony. - /// - public IReadOnlyDictionary Moods => Anger.Select(kvp => new KeyValuePair(kvp.Key, Mod.Current.Settings.MoodThresholds.Where(kvp2 => kvp2.Value <= Anger[kvp.Key]).WithMax(kvp2 => kvp2.Value).Single().Key)).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); - - /// - /// The empire which owns this colony. - /// - public Empire Owner { get; set; } - - public IEnumerable Parents - { - get - { - yield return Container; - } - } - - /// - /// The population of this colony, by race. - /// - public SafeDictionary Population { get; private set; } - - public ResourceQuantity RemoteMiningIncomePercentages - { - get { return Owner.PrimaryRace.IncomePercentages; } - } - - public ResourceQuantity ResourceValue - { - get { return Container.ResourceValue; } - } - - [DoNotSerialize(false)] - public Sector Sector { get => Container.Sector; set => throw new NotSupportedException("Can't set the sector of a colony."); } - - public ResourceQuantity StandardIncomePercentages - { - get - { - // do modifiers to income - var totalpop = Population.Sum(kvp => kvp.Value); - var popfactor = Mod.Current.Settings.GetPopulationProductionFactor(totalpop); - var moodfactor = Mod.Current.Settings.MoodProductivityModifiers[Mood] / 100d; - - var result = new ResourceQuantity(); - - foreach (var r in Resource.All) - { - var aptfactor = 1d; - if (r.Aptitude != null) - aptfactor = Population.Sum(kvp => (kvp.Key.Aptitudes[r.Aptitude.Name] / 100d) * (double)kvp.Value / (double)totalpop); - var cultfactor = (100 + r.GetCultureModifier(Owner.Culture)) / 100d; - - result += (int)(100 * popfactor * aptfactor * cultfactor * moodfactor) * r; - } - - return result; - } - } - - public StarSystem StarSystem => Container?.StarSystem; - - public double Timestamp { get; set; } - - public void ChangePopulation(long amount) - { - var pop = Population.ToArray(); - var total = Population.Sum(q => q.Value); - foreach (var kvp in pop) - Population[kvp.Key] += amount * kvp.Value / total; - } - - public Visibility CheckVisibility(Empire emp) - { - // should be visible, assuming the planet is visible - we don't have colony cloaking at the moment... - if (emp == Owner) - return Visibility.Owned; - else if (Container == null) - return Visibility.Unknown; // HACK - why would a colony not be on a planet?! - else - return Container.CheckVisibility(emp); - } - - public void Dispose() - { - if (IsDisposed) - return; - if (Container != null) - Container.Colony = null; - ConstructionQueue.SafeDispose(); - Galaxy.Current.UnassignID(this); - if (!IsMemory) - this.UpdateEmpireMemories(); - IsDisposed = true; - } - - public bool IsObsoleteMemory(Empire emp) - { - return Container == null || Container.StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; - } - - public void Redact(Empire emp) - { - var visibility = CheckVisibility(emp); - if (visibility < Visibility.Owned) - { - // can only see space used by cargo, not actual cargo - Cargo.SetFakeSize(true); - } - if (visibility < Visibility.Scanned) - { - var unknownFacilityTemplate = FacilityTemplate.Unknown; - var facilCount = Facilities.Count; - Facilities.Clear(); - for (int i = 0; i < facilCount; i++) - Facilities.Add(new Facility(unknownFacilityTemplate)); - Anger.Clear(); - AngerDeltas.Clear(); - } - if (visibility < Visibility.Fogged) - Dispose(); - } - - /// - /// Triggers a happiness change at this colony. - /// - /// The trigger function. - public void TriggerHappinessChange(Func trigger) - { - foreach (var race in Population.Keys) - { - if (race.HappinessModel != null) - AngerDeltas[race] += trigger(race.HappinessModel); - } - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Civilization +{ + /// + /// A colony on a planet. + /// + [Serializable] + public class Colony : IOwnableAbilityObject, IFoggable, IContainable, IIncomeProducer, IReferrable + { + public Colony() + { + Facilities = new List(); + Population = new SafeDictionary(); + Cargo = new Cargo(); + } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.Planet; } + } + + /// + /// The anger level of each race on this colony. + /// + public SafeDictionary Anger { get; private set; } = new SafeDictionary(); + + /// + /// The anger changes this turn of each race on this colony. + /// + public SafeDictionary AngerDeltas { get; private set; } = new SafeDictionary(); + + /// + /// The average anger of all races on this colony, weighted by population. + /// + public int AverageAnger => (int)Anger.WeightedAverage(kvp => Population[kvp.Key], kvp => kvp.Value); + + /// + /// The cargo stored on this colony. + /// + public Cargo Cargo { get; set; } + + public IEnumerable Children + { + get + { + return Facilities.Cast().Concat(Cargo.Units.Cast()); + } + } + + /// + /// This colony's construction queue. + /// + public ConstructionQueue ConstructionQueue + { + get; + set; + } + + public Planet Container + { + get + { + return Galaxy.Current.FindSpaceObjects().SingleOrDefault(p => p.Colony == this); + } + } + + /// + /// The facilities on this colony. + /// + public ICollection Facilities { get; set; } + + public long ID + { + get; + set; + } + + public IEnumerable IntrinsicAbilities + { + get { yield break; } + } + + public bool IsDisposed { get; set; } + + public bool IsHomeworld { get; set; } + + public bool IsMemory + { + get; + set; + } + + /// + /// Ratio of population that has the "No Spaceports" ability. + /// + public double MerchantsRatio + { + get + { + var merchants = Population.Where(kvp => kvp.Key.HasAbility("No Spaceports")).Sum(kvp => kvp.Value); + var totalPop = Population.Sum(kvp => kvp.Value); + var ratio = (double)merchants / (double)totalPop; + return ratio; + } + } + + /// + /// The overall mood of the population of this colony. + /// + public Mood Mood => Mod.Current.Settings.MoodThresholds.Where(kvp => kvp.Value <= AverageAnger).WithMax(kvp => kvp.Value).Single().Key; + + /// + /// The mood of each race on this colony. + /// + public IReadOnlyDictionary Moods => Anger.Select(kvp => new KeyValuePair(kvp.Key, Mod.Current.Settings.MoodThresholds.Where(kvp2 => kvp2.Value <= Anger[kvp.Key]).WithMax(kvp2 => kvp2.Value).Single().Key)).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + + /// + /// The empire which owns this colony. + /// + public Empire Owner { get; set; } + + public IEnumerable Parents + { + get + { + yield return Container; + } + } + + /// + /// The population of this colony, by race. + /// + public SafeDictionary Population { get; private set; } + + public ResourceQuantity RemoteMiningIncomePercentages + { + get { return Owner.PrimaryRace.IncomePercentages; } + } + + public ResourceQuantity ResourceValue + { + get { return Container.ResourceValue; } + } + + [DoNotSerialize(false)] + public Sector Sector { get => Container.Sector; set => throw new NotSupportedException("Can't set the sector of a colony."); } + + public ResourceQuantity StandardIncomePercentages + { + get + { + // do modifiers to income + var totalpop = Population.Sum(kvp => kvp.Value); + var popfactor = Mod.Current.Settings.GetPopulationProductionFactor(totalpop); + var moodfactor = Mod.Current.Settings.MoodProductivityModifiers[Mood] / 100d; + + var result = new ResourceQuantity(); + + foreach (var r in Resource.All) + { + var aptfactor = 1d; + if (r.Aptitude != null) + aptfactor = Population.Sum(kvp => (kvp.Key.Aptitudes[r.Aptitude.Name] / 100d) * (double)kvp.Value / (double)totalpop); + var cultfactor = (100 + r.GetCultureModifier(Owner.Culture)) / 100d; + + result += (int)(100 * popfactor * aptfactor * cultfactor * moodfactor) * r; + } + + return result; + } + } + + public StarSystem StarSystem => Container?.StarSystem; + + public double Timestamp { get; set; } + + public void ChangePopulation(long amount) + { + var pop = Population.ToArray(); + var total = Population.Sum(q => q.Value); + foreach (var kvp in pop) + Population[kvp.Key] += amount * kvp.Value / total; + } + + public Visibility CheckVisibility(Empire emp) + { + // should be visible, assuming the planet is visible - we don't have colony cloaking at the moment... + if (emp == Owner) + return Visibility.Owned; + else if (Container == null) + return Visibility.Unknown; // HACK - why would a colony not be on a planet?! + else + return Container.CheckVisibility(emp); + } + + public void Dispose() + { + if (IsDisposed) + return; + if (Container != null) + Container.Colony = null; + ConstructionQueue.SafeDispose(); + Galaxy.Current.UnassignID(this); + if (!IsMemory) + this.UpdateEmpireMemories(); + IsDisposed = true; + } + + public bool IsObsoleteMemory(Empire emp) + { + return Container == null || Container.StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; + } + + public void Redact(Empire emp) + { + var visibility = CheckVisibility(emp); + if (visibility < Visibility.Owned) + { + // can only see space used by cargo, not actual cargo + Cargo.SetFakeSize(true); + } + if (visibility < Visibility.Scanned) + { + var unknownFacilityTemplate = FacilityTemplate.Unknown; + var facilCount = Facilities.Count; + Facilities.Clear(); + for (int i = 0; i < facilCount; i++) + Facilities.Add(new Facility(unknownFacilityTemplate)); + Anger.Clear(); + AngerDeltas.Clear(); + } + if (visibility < Visibility.Fogged) + Dispose(); + } + + /// + /// Triggers a happiness change at this colony. + /// + /// The trigger function. + public void TriggerHappinessChange(Func trigger) + { + foreach (var race in Population.Keys) + { + if (race.HappinessModel != null) + AngerDeltas[race] += trigger(race.HappinessModel); + } + } + } +} diff --git a/FrEee/Game/Objects/Civilization/ConstructionQueue.cs b/FrEee/Objects/Civilization/ConstructionQueue.cs similarity index 94% rename from FrEee/Game/Objects/Civilization/ConstructionQueue.cs rename to FrEee/Objects/Civilization/ConstructionQueue.cs index 5d8224571..ea15a4b89 100644 --- a/FrEee/Game/Objects/Civilization/ConstructionQueue.cs +++ b/FrEee/Objects/Civilization/ConstructionQueue.cs @@ -1,580 +1,580 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// Something which can construct objects. - /// - [Serializable] - public class ConstructionQueue : IOrderable, IOwnable, IFoggable, IContainable - { - public ConstructionQueue(IConstructor c) - { - Orders = new List(); - Container = c; - UnspentRate = new ResourceQuantity(); - } - - /// - /// Are this object's orders on hold? - /// - public bool AreOrdersOnHold { get; set; } - - /// - /// Should this object's orders repeat once they are completed? - /// - public bool AreRepeatOrdersEnabled { get; set; } - - /// - /// Cargo space free, counting queued items as already constructed and in cargo. - /// - public int CargoStorageFree - { - get - { - if (!(Container is ICargoContainer)) - return 0; - return ((ICargoContainer)Container).CargoStorageFree() - Orders.Select(o => o.Template).OfType>().Sum(t => t.Hull.Size); - } - } - - /// - /// Cargo space free in the entire sector, counting queued items as already constructed and in cargo. - /// - public int CargoStorageFreeInSector - { - get - { - var storage = Container.Sector.SpaceObjects.Where(sobj => sobj.Owner == Owner) - .OfType().Sum(cc => cc.CargoStorageFree()); - var queues = Container.Sector.SpaceObjects.OfType().Where - (sobj => sobj.Owner == Owner && sobj.ConstructionQueue != null) - .Select(sobj => sobj.ConstructionQueue); - return storage - queues.Sum(q => q.Orders.Select(o => o.Template).OfType>().Sum(t => t.Hull.Size)); - } - } - - /// - /// The colony (if any) associated with this queue. - /// - public Colony Colony - { - get - { - if (Container is Planet) - return ((Planet)Container).Colony; - return null; - } - } - - [DoNotCopy] - public IConstructor Container { get; set; } - - /// - /// The ETA for completion of the whole queue, in turns. - /// Null if there is nothing being built. - /// - public double? Eta - { - get - { - if (!Orders.Any()) - return null; - if (!Rate.Any(kvp => kvp.Value > 0)) - return double.PositiveInfinity; - if (!Orders.Any()) - return 0d; - var remainingCost = Orders.Select(o => o.Cost - (o.Item == null ? new ResourceQuantity() : o.Item.ConstructionProgress)).Aggregate((r1, r2) => r1 + r2); - return remainingCost.Max(kvp => (double)kvp.Value / (double)Rate[kvp.Key]); - } - } - - /// - /// Facility slots free, counting queued items as already constructed and on the colony. - /// - public int FacilitySlotsFree - { - get - { - if (Colony == null) - return 0; - // TODO - storage racial trait - return ((Planet)Container).MaxFacilities - Colony.Facilities.Count - Orders.OfType>().Count(); - } - } - - /// - /// The ETA for completion of the first item, in turns. - /// - public double? FirstItemEta - { - get - { - if (!Orders.Any()) - return null; - var remainingCost = Orders[0].Cost - (Orders[0].Item == null ? new ResourceQuantity() : Orders[0].Item.ConstructionProgress); - return remainingCost.Max(kvp => (double)kvp.Value / (double)Rate[kvp.Key]); - } - } - - /// - /// The icon for the item being constructed. - /// - public Image FirstItemIcon - { - get - { - if (!Orders.Any()) - return Pictures.GetSolidColorImage(Color.Transparent); - return Orders.First().Template.Icon; - } - } - - /// - /// The name of the first item. - /// - public string FirstItemName - { - get - { - if (!Orders.Any()) - return null; - return Orders[0].Template.Name; - } - } - - [DoNotSerialize] - public Image Icon - { - get - { - return (Container as ISpaceObject)?.Icon; - } - } - - public long ID - { - get; - set; - } - - /// - /// Is this a colony queue? - /// - public bool IsColonyQueue { get { return Colony != null; } } - - /// - /// Has construction been delayed this turn due to lack of resources etc? - /// For avoiding spamming log messages for every item in the queue. - /// - [DoNotSerialize] - public bool IsConstructionDelayed { get; set; } - - public bool IsDisposed { get; set; } - - public bool IsIdle - { - get - { - var unlockedHulls = Mod.Current.Hulls.OfType>().Where(h => h.IsUnlocked()); - return (Eta == null || Eta < 1 && !AreRepeatOrdersEnabled) - && (IsSpaceYardQueue || FacilitySlotsFree > 0 || unlockedHulls.Any() && unlockedHulls.Min(h => h.Size) <= CargoStorageFreeInSector); - } - } - - // TODO - make this a DoNotSerialize property after the game ends - public bool IsMemory - { - get - { - return Container?.IsMemory ?? true; - } - set - { - if (Container == null) - return; - Container.IsMemory = value; - } - } - - /// - /// Is this a space yard queue? - /// - public bool IsSpaceYardQueue { get { return Container.HasAbility("Space Yard"); } } - - public string Name - { - get { return Container.Name; } - } - - public IList Orders - { - get; - private set; - } - - IEnumerable IOrderable.Orders - => Orders; - - public Empire Owner - { - get { return Container.Owner; } - } - - /// - /// The rate at which this queue can construct. - /// - public ResourceQuantity Rate - { - get - { - if (Empire.Current != null) - { - // try to use cache, rate can't change client side! - if (rate == null) - rate = ComputeRate(); - return rate; - } - else - return ComputeRate(); - } - } - - public int RateMinerals { get { return Rate[Resource.Minerals]; } } - public int RateOrganics { get { return Rate[Resource.Organics]; } } - public int RateRadioactives { get { return Rate[Resource.Radioactives]; } } - public double Timestamp { get; set; } - - /// - /// Unspent build rate for this turn. - /// Does not update as orders are changed on the client; only during turn processing! - /// - public ResourceQuantity UnspentRate { get; set; } - - /// - /// Upcoming spending on construction this turn. - /// - public ResourceQuantity UpcomingSpending - { - get - { - var spent = new ResourceQuantity(); - if (AreOrdersOnHold) - return spent; - do - { - var spentThisRound = new ResourceQuantity(); - foreach (var o in Orders) - { - var left = o.Cost; - if (o.Item != null) - left -= o.Item.ConstructionProgress; - left = ResourceQuantity.Min(left, Rate - spent); - spent += left; - spentThisRound += left; - } - if (!spentThisRound.Any(kvp => kvp.Value > 0)) - break; - } while (AreRepeatOrdersEnabled); - return spent; - } - } - - private ResourceQuantity rate; - - public void AddOrder(IOrder order) - { - if (order == null) - Owner.Log.Append(Container.CreateLogMessage($"Can't add a null order to {this}. Probably a bug...",logMessageType: LogMessages.LogMessageType.Error)); - else if (!(order is IConstructionOrder)) - Owner.Log.Append(Container.CreateLogMessage($"Can't add a {order.GetType()} to {this}. Probably a bug...", logMessageType: LogMessages.LogMessageType.Error)); - else - { - var co = (IConstructionOrder)order; - if (co.Template == null) - Owner.Log.Append(Container.CreateLogMessage($"Can't add an order with no template to {this}. Probably a bug...", logMessageType: LogMessages.LogMessageType.Error)); - else - Orders.Add(co); - } - } - - /// - /// Can this queue construct something? - /// - /// - /// - public bool CanConstruct(IConstructionTemplate item) - { - return GetReasonForBeingUnableToConstruct(item) == null; - } - - /// - /// Only the owner of a space object can see its construction queue. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (IsMemory && this.MemoryOwner() != emp) - return Visibility.Unknown; // can't see from opponents' memories! - var vis = Container.CheckVisibility(emp); - if (vis == Visibility.Owned) - return vis; - return Visibility.Unknown; - } - - public void Dispose() - { - if (IsDisposed) - return; - if (!IsMemory && Mod.Current != null) - this.UpdateEmpireMemories(); - Galaxy.Current.UnassignID(this); - Orders.Clear(); - IsDisposed = true; - } - - /// - /// Executes orders for a turn. - /// - public bool ExecuteOrders() - { - bool didStuff = false; - - if (AreOrdersOnHold) - return didStuff; - - UnspentRate = Rate; - var empty = new ResourceQuantity(); - var builtThisTurn = new HashSet(); - bool done = false; - while (!done && Orders.Any() && (Owner.StoredResources > empty || UpcomingSpending.IsEmpty)) - { - var numOrders = Orders.Count; - var spentThisRound = new ResourceQuantity(); - - foreach (var order in Orders.Cast().ToArray()) - { - if (order == null) - { - // WTF - Orders.Remove(order); - continue; - } - var reasonForNotBuilding = GetReasonForBeingUnableToConstruct(order.Template); - if (reasonForNotBuilding != null) - { - // can't build that here! - Orders.RemoveAt(0); - Owner.Log.Add(Container.CreateLogMessage(order.Template + " cannot be built at " + this + " because " + reasonForNotBuilding, LogMessages.LogMessageType.Error)); - } - else - { - var oldProgress = new ResourceQuantity(order.Item?.ConstructionProgress); - order.Execute(this); - var newProgress = new ResourceQuantity(order.Item?.ConstructionProgress); - if (newProgress < (order.Item?.Cost ?? new ResourceQuantity()) && newProgress == oldProgress && order == Orders.Last()) - done = true; // made no progress and nothing else to try and build - if (order.CheckCompletion(this)) - { - // upgrade facility orders place their own facilities - if (!(order is UpgradeFacilityOrder)) - order.Item.Place(Container); - Orders.Remove(order); - if (AreRepeatOrdersEnabled) - { - var copy = order.Copy(); - copy.Reset(); - Orders.Add(copy); - } - builtThisTurn.Add(order.Item); - if (order.Item is Ship || order.Item is Base) - { - // trigger ship built happiness changes - Owner.TriggerHappinessChange(hm => hm.AnyShipConstructed); - if (Container is Planet p) - p.Colony.TriggerHappinessChange(hm => hm.ShipConstructed); - - } - if (order.Item is Facility) - { - // trigger facility built happiness changes - if (Container is Planet p) - p.Colony.TriggerHappinessChange(hm => hm.FacilityConstructed); - - } - } - } - } - - didStuff = true; - - if (!AreRepeatOrdersEnabled) - done = true; - } - foreach (var g in builtThisTurn.GroupBy(i => i.Template)) - { - if (g.Count() == 1) - Owner.Log.Add(g.First().CreateLogMessage(g.First() + " has been constructed at " + Name + ".", logMessageType: LogMessages.LogMessageType.ConstructionComplete)); - else - Owner.Log.Add(g.First().CreateLogMessage(g.Count() + "x " + g.Key + " have been constructed at " + Name + ".", logMessageType: LogMessages.LogMessageType.ConstructionComplete)); - } - return didStuff; - } - - /// - /// Gets the reason why this queue cannot construct an item, or null if it can be constructed. - /// - /// - /// - public string GetReasonForBeingUnableToConstruct(IConstructionTemplate item) - { - if (item == null) - return "Construction template does not exist."; - if (!item.HasBeenUnlockedBy(Owner)) - return Owner + " has not yet unlocked " + item + "."; - if (!IsSpaceYardQueue && item.RequiresSpaceYardQueue) - return item + " requires a space yard queue."; - if (!IsColonyQueue && item.RequiresColonyQueue) - return item + " requires a colony queue."; - return null; - } - - public bool IsObsoleteMemory(Empire emp) - { - return Container == null || Container.StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; - } - - public void RearrangeOrder(IOrder order, int delta) - { - if (order != null && !(order is IConstructionOrder)) - throw new Exception("Can't rearrange a " + order.GetType() + " in a construction queue's orders."); - var o = (IConstructionOrder)order; - var newpos = Orders.IndexOf(o) + delta; - if (newpos < 0) - newpos = 0; - Orders.Remove(o); - if (newpos >= Orders.Count) - Orders.Add(o); - else - Orders.Insert(newpos, o); - } - - public void Redact(Empire emp) - { - // TODO - see first order in queue if queue is scanned? - // need to add design being built to known designs too? - if (CheckVisibility(emp) < Visibility.Owned) - { - Orders.DisposeAll(); - Orders.Clear(); - AreOrdersOnHold = false; - AreRepeatOrdersEnabled = false; - } - if (CheckVisibility(emp) < Visibility.Fogged) - Dispose(); - } - - public void RemoveOrder(IOrder order) - { - if (order == null) - Owner.Log.Add(Container.CreateLogMessage("Attempted to remove a null order from " + this + ". This is likely a game bug.", LogMessages.LogMessageType.Error)); - else if (!(order is IConstructionOrder)) - return; // order can't exist here anyway - else - Orders.Remove((IConstructionOrder)order); - } - - public override string ToString() - { - return Container + "'s construction queue"; - } - - private ResourceQuantity ComputeRate() - { - var rate = ComputeSYAbilityRate(); - if (Colony != null) - { - if (rate == null) - rate = Mod.Current.Settings.DefaultColonyConstructionRate; - - // apply population modifier - var pop = Colony.Population.Sum(p => p.Value); - if (pop == 0) - return new ResourceQuantity(); - rate *= Mod.Current.Settings.GetPopulationConstructionFactor(pop); - - // apply mood modifier - // TODO - load mood modifier from mod - var moodModifier = Colony.Mood == Mood.Rioting ? 0 : 100; - rate *= moodModifier / 100d; - - var ratios = Colony.Population.Select(p => new { Race = p.Key, Ratio = (double)p.Value / (double)pop }); - - // apply racial trait planetary SY modifier - // TODO - should Planetary SY Rate apply only to planets that have space yards, or to all planetary construction queues? - double traitmod = 1d; - foreach (var ratio in ratios) - traitmod += (ratio.Race.GetAbilityValue("Planetary SY Rate").ToDouble() / 100d) * ratio.Ratio; - rate *= traitmod; - - // apply aptitude modifier - if (IsSpaceYardQueue) - { - double aptmod = 0d; - foreach (var ratio in ratios) - aptmod += ((ratio.Race.Aptitudes[Aptitude.Construction.Name] / 100d)) * ratio.Ratio; - rate *= aptmod; - - // apply culture modifier - rate *= (100d + (Owner?.Culture?.Construction ?? 0)) / 100d; - } - } - if (rate == null) - rate = new ResourceQuantity(); - if (Container is IVehicle) - { - // apply aptitude modifier for empire's primary race - rate *= Owner.PrimaryRace.Aptitudes[Aptitude.Construction.Name] / 100d; - } - - return rate; - } - - private ResourceQuantity ComputeSYAbilityRate() - { - if (Container.HasAbility("Space Yard")) - { - var rate = new ResourceQuantity(); - // TODO - moddable resources? - for (int i = 1; i <= 3; i++) - { - var amount = Container.GetAbilityValue("Space Yard", 2, true, true, a => a.Value1 == i.ToString()).ToInt(); - Resource res = null; - if (i == 1) - res = Resource.Minerals; - else if (i == 2) - res = Resource.Organics; - else if (i == 3) - res = Resource.Radioactives; - rate[res] = amount; - } - return rate; - } - else - return null; - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace FrEee.Objects.Civilization +{ + /// + /// Something which can construct objects. + /// + [Serializable] + public class ConstructionQueue : IOrderable, IOwnable, IFoggable, IContainable + { + public ConstructionQueue(IConstructor c) + { + Orders = new List(); + Container = c; + UnspentRate = new ResourceQuantity(); + } + + /// + /// Are this object's orders on hold? + /// + public bool AreOrdersOnHold { get; set; } + + /// + /// Should this object's orders repeat once they are completed? + /// + public bool AreRepeatOrdersEnabled { get; set; } + + /// + /// Cargo space free, counting queued items as already constructed and in cargo. + /// + public int CargoStorageFree + { + get + { + if (!(Container is ICargoContainer)) + return 0; + return ((ICargoContainer)Container).CargoStorageFree() - Orders.Select(o => o.Template).OfType>().Sum(t => t.Hull.Size); + } + } + + /// + /// Cargo space free in the entire sector, counting queued items as already constructed and in cargo. + /// + public int CargoStorageFreeInSector + { + get + { + var storage = Container.Sector.SpaceObjects.Where(sobj => sobj.Owner == Owner) + .OfType().Sum(cc => cc.CargoStorageFree()); + var queues = Container.Sector.SpaceObjects.OfType().Where + (sobj => sobj.Owner == Owner && sobj.ConstructionQueue != null) + .Select(sobj => sobj.ConstructionQueue); + return storage - queues.Sum(q => q.Orders.Select(o => o.Template).OfType>().Sum(t => t.Hull.Size)); + } + } + + /// + /// The colony (if any) associated with this queue. + /// + public Colony Colony + { + get + { + if (Container is Planet) + return ((Planet)Container).Colony; + return null; + } + } + + [DoNotCopy] + public IConstructor Container { get; set; } + + /// + /// The ETA for completion of the whole queue, in turns. + /// Null if there is nothing being built. + /// + public double? Eta + { + get + { + if (!Orders.Any()) + return null; + if (!Rate.Any(kvp => kvp.Value > 0)) + return double.PositiveInfinity; + if (!Orders.Any()) + return 0d; + var remainingCost = Orders.Select(o => o.Cost - (o.Item == null ? new ResourceQuantity() : o.Item.ConstructionProgress)).Aggregate((r1, r2) => r1 + r2); + return remainingCost.Max(kvp => (double)kvp.Value / (double)Rate[kvp.Key]); + } + } + + /// + /// Facility slots free, counting queued items as already constructed and on the colony. + /// + public int FacilitySlotsFree + { + get + { + if (Colony == null) + return 0; + // TODO - storage racial trait + return ((Planet)Container).MaxFacilities - Colony.Facilities.Count - Orders.OfType>().Count(); + } + } + + /// + /// The ETA for completion of the first item, in turns. + /// + public double? FirstItemEta + { + get + { + if (!Orders.Any()) + return null; + var remainingCost = Orders[0].Cost - (Orders[0].Item == null ? new ResourceQuantity() : Orders[0].Item.ConstructionProgress); + return remainingCost.Max(kvp => (double)kvp.Value / (double)Rate[kvp.Key]); + } + } + + /// + /// The icon for the item being constructed. + /// + public Image FirstItemIcon + { + get + { + if (!Orders.Any()) + return Pictures.GetSolidColorImage(Color.Transparent); + return Orders.First().Template.Icon; + } + } + + /// + /// The name of the first item. + /// + public string FirstItemName + { + get + { + if (!Orders.Any()) + return null; + return Orders[0].Template.Name; + } + } + + [DoNotSerialize] + public Image Icon + { + get + { + return (Container as ISpaceObject)?.Icon; + } + } + + public long ID + { + get; + set; + } + + /// + /// Is this a colony queue? + /// + public bool IsColonyQueue { get { return Colony != null; } } + + /// + /// Has construction been delayed this turn due to lack of resources etc? + /// For avoiding spamming log messages for every item in the queue. + /// + [DoNotSerialize] + public bool IsConstructionDelayed { get; set; } + + public bool IsDisposed { get; set; } + + public bool IsIdle + { + get + { + var unlockedHulls = Mod.Current.Hulls.OfType>().Where(h => h.IsUnlocked()); + return (Eta == null || Eta < 1 && !AreRepeatOrdersEnabled) + && (IsSpaceYardQueue || FacilitySlotsFree > 0 || unlockedHulls.Any() && unlockedHulls.Min(h => h.Size) <= CargoStorageFreeInSector); + } + } + + // TODO - make this a DoNotSerialize property after the game ends + public bool IsMemory + { + get + { + return Container?.IsMemory ?? true; + } + set + { + if (Container == null) + return; + Container.IsMemory = value; + } + } + + /// + /// Is this a space yard queue? + /// + public bool IsSpaceYardQueue { get { return Container.HasAbility("Space Yard"); } } + + public string Name + { + get { return Container.Name; } + } + + public IList Orders + { + get; + private set; + } + + IEnumerable IOrderable.Orders + => Orders; + + public Empire Owner + { + get { return Container.Owner; } + } + + /// + /// The rate at which this queue can construct. + /// + public ResourceQuantity Rate + { + get + { + if (Empire.Current != null) + { + // try to use cache, rate can't change client side! + if (rate == null) + rate = ComputeRate(); + return rate; + } + else + return ComputeRate(); + } + } + + public int RateMinerals { get { return Rate[Resource.Minerals]; } } + public int RateOrganics { get { return Rate[Resource.Organics]; } } + public int RateRadioactives { get { return Rate[Resource.Radioactives]; } } + public double Timestamp { get; set; } + + /// + /// Unspent build rate for this turn. + /// Does not update as orders are changed on the client; only during turn processing! + /// + public ResourceQuantity UnspentRate { get; set; } + + /// + /// Upcoming spending on construction this turn. + /// + public ResourceQuantity UpcomingSpending + { + get + { + var spent = new ResourceQuantity(); + if (AreOrdersOnHold) + return spent; + do + { + var spentThisRound = new ResourceQuantity(); + foreach (var o in Orders) + { + var left = o.Cost; + if (o.Item != null) + left -= o.Item.ConstructionProgress; + left = ResourceQuantity.Min(left, Rate - spent); + spent += left; + spentThisRound += left; + } + if (!spentThisRound.Any(kvp => kvp.Value > 0)) + break; + } while (AreRepeatOrdersEnabled); + return spent; + } + } + + private ResourceQuantity rate; + + public void AddOrder(IOrder order) + { + if (order == null) + Owner.Log.Append(Container.CreateLogMessage($"Can't add a null order to {this}. Probably a bug...",logMessageType: LogMessages.LogMessageType.Error)); + else if (!(order is IConstructionOrder)) + Owner.Log.Append(Container.CreateLogMessage($"Can't add a {order.GetType()} to {this}. Probably a bug...", logMessageType: LogMessages.LogMessageType.Error)); + else + { + var co = (IConstructionOrder)order; + if (co.Template == null) + Owner.Log.Append(Container.CreateLogMessage($"Can't add an order with no template to {this}. Probably a bug...", logMessageType: LogMessages.LogMessageType.Error)); + else + Orders.Add(co); + } + } + + /// + /// Can this queue construct something? + /// + /// + /// + public bool CanConstruct(IConstructionTemplate item) + { + return GetReasonForBeingUnableToConstruct(item) == null; + } + + /// + /// Only the owner of a space object can see its construction queue. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (IsMemory && this.MemoryOwner() != emp) + return Visibility.Unknown; // can't see from opponents' memories! + var vis = Container.CheckVisibility(emp); + if (vis == Visibility.Owned) + return vis; + return Visibility.Unknown; + } + + public void Dispose() + { + if (IsDisposed) + return; + if (!IsMemory && Mod.Current != null) + this.UpdateEmpireMemories(); + Galaxy.Current.UnassignID(this); + Orders.Clear(); + IsDisposed = true; + } + + /// + /// Executes orders for a turn. + /// + public bool ExecuteOrders() + { + bool didStuff = false; + + if (AreOrdersOnHold) + return didStuff; + + UnspentRate = Rate; + var empty = new ResourceQuantity(); + var builtThisTurn = new HashSet(); + bool done = false; + while (!done && Orders.Any() && (Owner.StoredResources > empty || UpcomingSpending.IsEmpty)) + { + var numOrders = Orders.Count; + var spentThisRound = new ResourceQuantity(); + + foreach (var order in Orders.Cast().ToArray()) + { + if (order == null) + { + // WTF + Orders.Remove(order); + continue; + } + var reasonForNotBuilding = GetReasonForBeingUnableToConstruct(order.Template); + if (reasonForNotBuilding != null) + { + // can't build that here! + Orders.RemoveAt(0); + Owner.Log.Add(Container.CreateLogMessage(order.Template + " cannot be built at " + this + " because " + reasonForNotBuilding, LogMessages.LogMessageType.Error)); + } + else + { + var oldProgress = new ResourceQuantity(order.Item?.ConstructionProgress); + order.Execute(this); + var newProgress = new ResourceQuantity(order.Item?.ConstructionProgress); + if (newProgress < (order.Item?.Cost ?? new ResourceQuantity()) && newProgress == oldProgress && order == Orders.Last()) + done = true; // made no progress and nothing else to try and build + if (order.CheckCompletion(this)) + { + // upgrade facility orders place their own facilities + if (!(order is UpgradeFacilityOrder)) + order.Item.Place(Container); + Orders.Remove(order); + if (AreRepeatOrdersEnabled) + { + var copy = order.Copy(); + copy.Reset(); + Orders.Add(copy); + } + builtThisTurn.Add(order.Item); + if (order.Item is Ship || order.Item is Base) + { + // trigger ship built happiness changes + Owner.TriggerHappinessChange(hm => hm.AnyShipConstructed); + if (Container is Planet p) + p.Colony.TriggerHappinessChange(hm => hm.ShipConstructed); + + } + if (order.Item is Facility) + { + // trigger facility built happiness changes + if (Container is Planet p) + p.Colony.TriggerHappinessChange(hm => hm.FacilityConstructed); + + } + } + } + } + + didStuff = true; + + if (!AreRepeatOrdersEnabled) + done = true; + } + foreach (var g in builtThisTurn.GroupBy(i => i.Template)) + { + if (g.Count() == 1) + Owner.Log.Add(g.First().CreateLogMessage(g.First() + " has been constructed at " + Name + ".", logMessageType: LogMessages.LogMessageType.ConstructionComplete)); + else + Owner.Log.Add(g.First().CreateLogMessage(g.Count() + "x " + g.Key + " have been constructed at " + Name + ".", logMessageType: LogMessages.LogMessageType.ConstructionComplete)); + } + return didStuff; + } + + /// + /// Gets the reason why this queue cannot construct an item, or null if it can be constructed. + /// + /// + /// + public string GetReasonForBeingUnableToConstruct(IConstructionTemplate item) + { + if (item == null) + return "Construction template does not exist."; + if (!item.HasBeenUnlockedBy(Owner)) + return Owner + " has not yet unlocked " + item + "."; + if (!IsSpaceYardQueue && item.RequiresSpaceYardQueue) + return item + " requires a space yard queue."; + if (!IsColonyQueue && item.RequiresColonyQueue) + return item + " requires a colony queue."; + return null; + } + + public bool IsObsoleteMemory(Empire emp) + { + return Container == null || Container.StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; + } + + public void RearrangeOrder(IOrder order, int delta) + { + if (order != null && !(order is IConstructionOrder)) + throw new Exception("Can't rearrange a " + order.GetType() + " in a construction queue's orders."); + var o = (IConstructionOrder)order; + var newpos = Orders.IndexOf(o) + delta; + if (newpos < 0) + newpos = 0; + Orders.Remove(o); + if (newpos >= Orders.Count) + Orders.Add(o); + else + Orders.Insert(newpos, o); + } + + public void Redact(Empire emp) + { + // TODO - see first order in queue if queue is scanned? + // need to add design being built to known designs too? + if (CheckVisibility(emp) < Visibility.Owned) + { + Orders.DisposeAll(); + Orders.Clear(); + AreOrdersOnHold = false; + AreRepeatOrdersEnabled = false; + } + if (CheckVisibility(emp) < Visibility.Fogged) + Dispose(); + } + + public void RemoveOrder(IOrder order) + { + if (order == null) + Owner.Log.Add(Container.CreateLogMessage("Attempted to remove a null order from " + this + ". This is likely a game bug.", LogMessages.LogMessageType.Error)); + else if (!(order is IConstructionOrder)) + return; // order can't exist here anyway + else + Orders.Remove((IConstructionOrder)order); + } + + public override string ToString() + { + return Container + "'s construction queue"; + } + + private ResourceQuantity ComputeRate() + { + var rate = ComputeSYAbilityRate(); + if (Colony != null) + { + if (rate == null) + rate = Mod.Current.Settings.DefaultColonyConstructionRate; + + // apply population modifier + var pop = Colony.Population.Sum(p => p.Value); + if (pop == 0) + return new ResourceQuantity(); + rate *= Mod.Current.Settings.GetPopulationConstructionFactor(pop); + + // apply mood modifier + // TODO - load mood modifier from mod + var moodModifier = Colony.Mood == Mood.Rioting ? 0 : 100; + rate *= moodModifier / 100d; + + var ratios = Colony.Population.Select(p => new { Race = p.Key, Ratio = (double)p.Value / (double)pop }); + + // apply racial trait planetary SY modifier + // TODO - should Planetary SY Rate apply only to planets that have space yards, or to all planetary construction queues? + double traitmod = 1d; + foreach (var ratio in ratios) + traitmod += (ratio.Race.GetAbilityValue("Planetary SY Rate").ToDouble() / 100d) * ratio.Ratio; + rate *= traitmod; + + // apply aptitude modifier + if (IsSpaceYardQueue) + { + double aptmod = 0d; + foreach (var ratio in ratios) + aptmod += ((ratio.Race.Aptitudes[Aptitude.Construction.Name] / 100d)) * ratio.Ratio; + rate *= aptmod; + + // apply culture modifier + rate *= (100d + (Owner?.Culture?.Construction ?? 0)) / 100d; + } + } + if (rate == null) + rate = new ResourceQuantity(); + if (Container is IVehicle) + { + // apply aptitude modifier for empire's primary race + rate *= Owner.PrimaryRace.Aptitudes[Aptitude.Construction.Name] / 100d; + } + + return rate; + } + + private ResourceQuantity ComputeSYAbilityRate() + { + if (Container.HasAbility("Space Yard")) + { + var rate = new ResourceQuantity(); + // TODO - moddable resources? + for (int i = 1; i <= 3; i++) + { + var amount = Container.GetAbilityValue("Space Yard", 2, true, true, a => a.Value1 == i.ToString()).ToInt(); + Resource res = null; + if (i == 1) + res = Resource.Minerals; + else if (i == 2) + res = Resource.Organics; + else if (i == 3) + res = Resource.Radioactives; + rate[res] = amount; + } + return rate; + } + else + return null; + } + } +} diff --git a/FrEee/Game/Objects/Civilization/Culture.cs b/FrEee/Objects/Civilization/Culture.cs similarity index 89% rename from FrEee/Game/Objects/Civilization/Culture.cs rename to FrEee/Objects/Civilization/Culture.cs index 5b63d2c4b..ef850d7e3 100644 --- a/FrEee/Game/Objects/Civilization/Culture.cs +++ b/FrEee/Objects/Civilization/Culture.cs @@ -1,73 +1,73 @@ -using FrEee.Game.Interfaces; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// An empire's culture. Provides percentage modifiers to various abilities. - /// - [Serializable] - public class Culture : IModObject - { - public int Construction { get; set; } - public string Description { get; set; } - public int GroundCombat { get; set; } - public int Happiness { get; set; } - - /// - /// Resource income percentages based on cultural modifiers. - /// - public ResourceQuantity IncomePercentages - { - get - { - var result = new ResourceQuantity(); - foreach (var r in Resource.All) - result += (100 + r.GetCultureModifier(this)) * r; - return result; - } - } - - public int Intelligence { get; set; } - - public bool IsDisposed - { - get - { - // can't be disposed of - return false; - } - } - - public int MaintenanceReduction { get; set; } - public string ModID { get; set; } - public string Name { get; set; } - - string INamed.Name { get { return Name; } } - public int Production { get; set; } - - public int Repair { get; set; } - public int Research { get; set; } - public int SpaceCombat { get; set; } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - public int Trade { get; set; } - - public void Dispose() - { - // nothing to do - } - - public override string ToString() - { - return Name; - } - } -} +using FrEee.Interfaces; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.Civilization +{ + /// + /// An empire's culture. Provides percentage modifiers to various abilities. + /// + [Serializable] + public class Culture : IModObject + { + public int Construction { get; set; } + public string Description { get; set; } + public int GroundCombat { get; set; } + public int Happiness { get; set; } + + /// + /// Resource income percentages based on cultural modifiers. + /// + public ResourceQuantity IncomePercentages + { + get + { + var result = new ResourceQuantity(); + foreach (var r in Resource.All) + result += (100 + r.GetCultureModifier(this)) * r; + return result; + } + } + + public int Intelligence { get; set; } + + public bool IsDisposed + { + get + { + // can't be disposed of + return false; + } + } + + public int MaintenanceReduction { get; set; } + public string ModID { get; set; } + public string Name { get; set; } + + string INamed.Name { get { return Name; } } + public int Production { get; set; } + + public int Repair { get; set; } + public int Research { get; set; } + public int SpaceCombat { get; set; } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + public int Trade { get; set; } + + public void Dispose() + { + // nothing to do + } + + public override string ToString() + { + return Name; + } + } +} diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/AcceptProposalAction.cs b/FrEee/Objects/Civilization/Diplomacy/AcceptProposalAction.cs similarity index 87% rename from FrEee/Game/Objects/Civilization/Diplomacy/AcceptProposalAction.cs rename to FrEee/Objects/Civilization/Diplomacy/AcceptProposalAction.cs index 4456c596b..bfc4d0783 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/AcceptProposalAction.cs +++ b/FrEee/Objects/Civilization/Diplomacy/AcceptProposalAction.cs @@ -1,56 +1,56 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// An action that accepts a proposal. - /// - /// - public class AcceptProposalAction : Action - { - public AcceptProposalAction(Proposal proposal) - : base(proposal.Executor) - { - Proposal = proposal; - } - - public override string Description - { - get { return "Reject " + Proposal; } - } - - /// - /// The proposal in question. - /// - [DoNotSerialize] - public Proposal Proposal { get { return proposal; } set { proposal = value; } } - - private GalaxyReference proposal { get; set; } - - public override void Execute() - { - if (Proposal.IsResolved) - Executor.Log.Add(Target.CreateLogMessage("The proposal \"" + Proposal + "\" has already been resolved and cannot be accepted now.", LogMessages.LogMessageType.Error)); - else - { - Target.Log.Add(Executor.CreateLogMessage("The " + Executor + " has accepted our proposal (" + Proposal + ").", LogMessages.LogMessageType.Generic)); - Proposal.Execute(); - } - } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - base.ReplaceClientIDs(idmap, done); - proposal.ReplaceClientIDs(idmap, done); - } - } - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// An action that accepts a proposal. + /// + /// + public class AcceptProposalAction : Action + { + public AcceptProposalAction(Proposal proposal) + : base(proposal.Executor) + { + Proposal = proposal; + } + + public override string Description + { + get { return "Reject " + Proposal; } + } + + /// + /// The proposal in question. + /// + [DoNotSerialize] + public Proposal Proposal { get { return proposal; } set { proposal = value; } } + + private GalaxyReference proposal { get; set; } + + public override void Execute() + { + if (Proposal.IsResolved) + Executor.Log.Add(Target.CreateLogMessage("The proposal \"" + Proposal + "\" has already been resolved and cannot be accepted now.", LogMessages.LogMessageType.Error)); + else + { + Target.Log.Add(Executor.CreateLogMessage("The " + Executor + " has accepted our proposal (" + Proposal + ").", LogMessages.LogMessageType.Generic)); + Proposal.Execute(); + } + } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + base.ReplaceClientIDs(idmap, done); + proposal.ReplaceClientIDs(idmap, done); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Action.cs b/FrEee/Objects/Civilization/Diplomacy/Action.cs similarity index 78% rename from FrEee/Game/Objects/Civilization/Diplomacy/Action.cs rename to FrEee/Objects/Civilization/Diplomacy/Action.cs index 6fc94c4ac..55582d36d 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Action.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Action.cs @@ -1,27 +1,27 @@ -using FrEee.Game.Objects.Commands; -using FrEee.Utility; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// A unilateral diplomatic action. - /// - public abstract class Action : Command - { - protected Action(Empire target) - : base(Empire.Current) - { - Target = target; - } - - public abstract string Description { get; } - - /// - /// The empire that is the target of this action. - /// - [DoNotSerialize] - public Empire Target { get { return target; } set { target = value; } } - - private GalaxyReference target { get; set; } - } +using FrEee.Objects.Commands; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// A unilateral diplomatic action. + /// + public abstract class Action : Command + { + protected Action(Empire target) + : base(Empire.Current) + { + Target = target; + } + + public abstract string Description { get; } + + /// + /// The empire that is the target of this action. + /// + [DoNotSerialize] + public Empire Target { get { return target; } set { target = value; } } + + private GalaxyReference target { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/ActionMessage.cs b/FrEee/Objects/Civilization/Diplomacy/ActionMessage.cs similarity index 86% rename from FrEee/Game/Objects/Civilization/Diplomacy/ActionMessage.cs rename to FrEee/Objects/Civilization/Diplomacy/ActionMessage.cs index a37c2e280..4748047cb 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/ActionMessage.cs +++ b/FrEee/Objects/Civilization/Diplomacy/ActionMessage.cs @@ -1,45 +1,45 @@ -using FrEee.Game.Interfaces; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// A message specifying some unilateral action. - /// - public class ActionMessage : Message - { - public ActionMessage(Empire recipient) - : base(recipient) - { - if (Recipient == Owner) - throw new Exception("You can't perform a diplomatic action on yourself!"); - } - - /// - /// The action in question. - /// - public Action Action { get; set; } - - public override IEnumerable IconPaths - { - get - { - return Owner.IconPaths; - } - } - - public override IEnumerable PortraitPaths - { - get - { - return Owner.PortraitPaths; - } - } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - Action.ReplaceClientIDs(idmap); - } - } +using FrEee.Interfaces; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// A message specifying some unilateral action. + /// + public class ActionMessage : Message + { + public ActionMessage(Empire recipient) + : base(recipient) + { + if (Recipient == Owner) + throw new Exception("You can't perform a diplomatic action on yourself!"); + } + + /// + /// The action in question. + /// + public Action Action { get; set; } + + public override IEnumerable IconPaths + { + get + { + return Owner.IconPaths; + } + } + + public override IEnumerable PortraitPaths + { + get + { + return Owner.PortraitPaths; + } + } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + Action.ReplaceClientIDs(idmap); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/BreakTreatyAction.cs b/FrEee/Objects/Civilization/Diplomacy/BreakTreatyAction.cs similarity index 86% rename from FrEee/Game/Objects/Civilization/Diplomacy/BreakTreatyAction.cs rename to FrEee/Objects/Civilization/Diplomacy/BreakTreatyAction.cs index cf34ea506..eda567d11 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/BreakTreatyAction.cs +++ b/FrEee/Objects/Civilization/Diplomacy/BreakTreatyAction.cs @@ -1,32 +1,32 @@ -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// Breaks a treaty with the target empire. - /// - public class BreakTreatyAction : Action - { - public BreakTreatyAction(Empire target) - : base(target) - { - } - - public override string Description - { - get { return "Break Treaty"; } - } - - public override void Execute() - { - foreach (var clause in Executor.GetTreaty(Target)) - clause.Dispose(); - - Executor.Log.Add(Target.CreateLogMessage("We have broken our treaty with the " + Target + ".", LogMessages.LogMessageType.Generic)); - Target.Log.Add(Executor.CreateLogMessage("The " + Target + " has broken its treaty with us.", LogMessages.LogMessageType.Generic)); - - Executor.TriggerHappinessChange(hm => hm.TreatyNone); - Target.TriggerHappinessChange(hm => hm.TreatyNone); - } - } +using FrEee.Extensions; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// Breaks a treaty with the target empire. + /// + public class BreakTreatyAction : Action + { + public BreakTreatyAction(Empire target) + : base(target) + { + } + + public override string Description + { + get { return "Break Treaty"; } + } + + public override void Execute() + { + foreach (var clause in Executor.GetTreaty(Target)) + clause.Dispose(); + + Executor.Log.Add(Target.CreateLogMessage("We have broken our treaty with the " + Target + ".", LogMessages.LogMessageType.Generic)); + Target.Log.Add(Executor.CreateLogMessage("The " + Target + " has broken its treaty with us.", LogMessages.LogMessageType.Generic)); + + Executor.TriggerHappinessChange(hm => hm.TreatyNone); + Target.TriggerHappinessChange(hm => hm.TreatyNone); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/AllianceClause.cs b/FrEee/Objects/Civilization/Diplomacy/Clauses/AllianceClause.cs similarity index 92% rename from FrEee/Game/Objects/Civilization/Diplomacy/Clauses/AllianceClause.cs rename to FrEee/Objects/Civilization/Diplomacy/Clauses/AllianceClause.cs index 50366b657..96107738b 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/AllianceClause.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Clauses/AllianceClause.cs @@ -1,93 +1,93 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Commands; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Civilization.Diplomacy.Clauses -{ - /// - /// An alliance, which can range from simple non-aggression to a full-fledged military alliance. - /// - public class AllianceClause : Clause - { - public AllianceClause(Empire giver, Empire receiver, AllianceLevel level) - : base(giver, receiver) - { - AllianceLevel = level; - } - - /// - /// The level of alliance. - /// - public AllianceLevel AllianceLevel { get; set; } - - public override string BriefDescription - { - get - { - return AllianceLevel.ToSpacedString(); - } - } - - public override string FullDescription - { - get - { - var list = new List(); - if (AllianceLevel >= AllianceLevel.MilitaryAlliance) - list.Add(Giver.WeOrName() + " will declare war on anyone whom " + Receiver.WeOrName(false) + " declare" + (Receiver == Empire.Current ? "" : "s") + " war on."); - if (AllianceLevel >= AllianceLevel.DefensivePact) - list.Add(Giver.WeOrName() + " will declare war on anyone who declares war on " + Receiver.UsOrName() + "."); - if (AllianceLevel >= AllianceLevel.NonAggression) - list.Add(Giver.WeOrName() + " will not attack " + Receiver.UsOrName() + "."); - else if (AllianceLevel >= AllianceLevel.NeutralZone) - list.Add(Giver.WeOrName() + " will not attack " + Receiver.UsOrName() + " except in systems colonized by " + Giver.UsOrName() + "."); - else // no alliance - list.Add(Giver.WeOrName() + " is hostile to " + Receiver.UsOrName() + "."); - return string.Join("\n", list.ToArray()); - } - } - - /// - /// Defensive pacts and military alliances will cause war to be delcared automatically. - /// - public override void PerformAction() - { - if (AllianceLevel >= AllianceLevel.DefensivePact) - { - // declare war on anyone who declares war on the recipient - foreach (var msg in Receiver.IncomingMessages.OfType()) - { - var action = msg.Action; - if (action is DeclareWarAction) - DeclareWar(action.Executor); - } - } - if (AllianceLevel >= AllianceLevel.MilitaryAlliance) - { - // declare war on anyone who the recipient declares war on - foreach (var msg in Receiver.Commands.OfType()) - { - var action = msg.Action; - if (action is DeclareWarAction) - DeclareWar(action.Target); - } - } - } - - private void DeclareWar(Empire emp) - { - // send declaration of war to the empire in question - // note that you might not have even encountered them yet, but meh... - var response = new ActionMessage(emp); - response.Recipient = emp; - response.Text = "Our allies have forced our hand. We must declare war!"; - response.Action = new DeclareWarAction(emp); - var cmd = new SendMessageCommand(response); - Empire.Current.Commands.Add(cmd); - Empire.Current.TriggerHappinessChange(hm => hm.TreatyWar); - emp.TriggerHappinessChange(hm => hm.TreatyWar); - } - } +using FrEee.Enumerations; +using FrEee.Objects.Commands; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Civilization.Diplomacy.Clauses +{ + /// + /// An alliance, which can range from simple non-aggression to a full-fledged military alliance. + /// + public class AllianceClause : Clause + { + public AllianceClause(Empire giver, Empire receiver, AllianceLevel level) + : base(giver, receiver) + { + AllianceLevel = level; + } + + /// + /// The level of alliance. + /// + public AllianceLevel AllianceLevel { get; set; } + + public override string BriefDescription + { + get + { + return AllianceLevel.ToSpacedString(); + } + } + + public override string FullDescription + { + get + { + var list = new List(); + if (AllianceLevel >= AllianceLevel.MilitaryAlliance) + list.Add(Giver.WeOrName() + " will declare war on anyone whom " + Receiver.WeOrName(false) + " declare" + (Receiver == Empire.Current ? "" : "s") + " war on."); + if (AllianceLevel >= AllianceLevel.DefensivePact) + list.Add(Giver.WeOrName() + " will declare war on anyone who declares war on " + Receiver.UsOrName() + "."); + if (AllianceLevel >= AllianceLevel.NonAggression) + list.Add(Giver.WeOrName() + " will not attack " + Receiver.UsOrName() + "."); + else if (AllianceLevel >= AllianceLevel.NeutralZone) + list.Add(Giver.WeOrName() + " will not attack " + Receiver.UsOrName() + " except in systems colonized by " + Giver.UsOrName() + "."); + else // no alliance + list.Add(Giver.WeOrName() + " is hostile to " + Receiver.UsOrName() + "."); + return string.Join("\n", list.ToArray()); + } + } + + /// + /// Defensive pacts and military alliances will cause war to be delcared automatically. + /// + public override void PerformAction() + { + if (AllianceLevel >= AllianceLevel.DefensivePact) + { + // declare war on anyone who declares war on the recipient + foreach (var msg in Receiver.IncomingMessages.OfType()) + { + var action = msg.Action; + if (action is DeclareWarAction) + DeclareWar(action.Executor); + } + } + if (AllianceLevel >= AllianceLevel.MilitaryAlliance) + { + // declare war on anyone who the recipient declares war on + foreach (var msg in Receiver.Commands.OfType()) + { + var action = msg.Action; + if (action is DeclareWarAction) + DeclareWar(action.Target); + } + } + } + + private void DeclareWar(Empire emp) + { + // send declaration of war to the empire in question + // note that you might not have even encountered them yet, but meh... + var response = new ActionMessage(emp); + response.Recipient = emp; + response.Text = "Our allies have forced our hand. We must declare war!"; + response.Action = new DeclareWarAction(emp); + var cmd = new SendMessageCommand(response); + Empire.Current.Commands.Add(cmd); + Empire.Current.TriggerHappinessChange(hm => hm.TreatyWar); + emp.TriggerHappinessChange(hm => hm.TreatyWar); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/Clause.cs b/FrEee/Objects/Civilization/Diplomacy/Clauses/Clause.cs similarity index 88% rename from FrEee/Game/Objects/Civilization/Diplomacy/Clauses/Clause.cs rename to FrEee/Objects/Civilization/Diplomacy/Clauses/Clause.cs index 5bbf9b15a..50070ab4c 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/Clause.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Clauses/Clause.cs @@ -1,119 +1,119 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Civilization.Diplomacy.Clauses -{ - /// - /// A clause in a treaty. - /// - public abstract class Clause : IOwnable, IFoggable, IPromotable, IReferrable - { - protected Clause(Empire giver, Empire receiver) - { - Giver = giver; - Receiver = receiver; - } - - /// - /// A description of the effects of this clause. - /// - public abstract string BriefDescription { get; } - - /// - /// A description of the effects of this clause. - /// - public abstract string FullDescription { get; } - - /// - /// The empire that is offering something in this clause. - /// - [DoNotSerialize] - public Empire Giver { get { return giver; } set { giver = value; } } - - public long ID - { - get; - set; - } - - public bool IsDisposed { get; set; } - - /// - /// Is this clause in effect, or is it still a proposal? - /// - public bool IsInEffect { get; set; } - - public bool IsMemory - { - get; - set; - } - - public Empire Owner - { - get { return Receiver; } - } - - /// - /// The empire that is receiving a benefit from this clause. - /// - [DoNotSerialize] - public Empire Receiver { get { return receiver; } set { receiver = value; } } - - public double Timestamp - { - get; - set; - } - - private GalaxyReference giver { get; set; } - private GalaxyReference receiver { get; set; } - - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Owned; - if (emp == Giver) - return Visibility.Scanned; - // TODO - espionage on treaties - return Visibility.Unknown; - } - - public void Dispose() - { - if (IsDisposed) - return; - Galaxy.Current.UnassignID(this); - IsInEffect = false; - } - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - /// - /// Performs any per-turn action for this treaty clause, if applicable. - /// - public abstract void PerformAction(); - - public void Redact(Empire emp) - { - if (CheckVisibility(emp) < Visibility.Fogged) - Dispose(); - } - - public virtual void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // nothing to do here... - } - - public override string ToString() - { - return BriefDescription; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using System.Collections.Generic; + +namespace FrEee.Objects.Civilization.Diplomacy.Clauses +{ + /// + /// A clause in a treaty. + /// + public abstract class Clause : IOwnable, IFoggable, IPromotable, IReferrable + { + protected Clause(Empire giver, Empire receiver) + { + Giver = giver; + Receiver = receiver; + } + + /// + /// A description of the effects of this clause. + /// + public abstract string BriefDescription { get; } + + /// + /// A description of the effects of this clause. + /// + public abstract string FullDescription { get; } + + /// + /// The empire that is offering something in this clause. + /// + [DoNotSerialize] + public Empire Giver { get { return giver; } set { giver = value; } } + + public long ID + { + get; + set; + } + + public bool IsDisposed { get; set; } + + /// + /// Is this clause in effect, or is it still a proposal? + /// + public bool IsInEffect { get; set; } + + public bool IsMemory + { + get; + set; + } + + public Empire Owner + { + get { return Receiver; } + } + + /// + /// The empire that is receiving a benefit from this clause. + /// + [DoNotSerialize] + public Empire Receiver { get { return receiver; } set { receiver = value; } } + + public double Timestamp + { + get; + set; + } + + private GalaxyReference giver { get; set; } + private GalaxyReference receiver { get; set; } + + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Owned; + if (emp == Giver) + return Visibility.Scanned; + // TODO - espionage on treaties + return Visibility.Unknown; + } + + public void Dispose() + { + if (IsDisposed) + return; + Galaxy.Current.UnassignID(this); + IsInEffect = false; + } + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + /// + /// Performs any per-turn action for this treaty clause, if applicable. + /// + public abstract void PerformAction(); + + public void Redact(Empire emp) + { + if (CheckVisibility(emp) < Visibility.Fogged) + Dispose(); + } + + public virtual void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // nothing to do here... + } + + public override string ToString() + { + return BriefDescription; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/CooperativeResearchClause.cs b/FrEee/Objects/Civilization/Diplomacy/Clauses/CooperativeResearchClause.cs similarity index 91% rename from FrEee/Game/Objects/Civilization/Diplomacy/Clauses/CooperativeResearchClause.cs rename to FrEee/Objects/Civilization/Diplomacy/Clauses/CooperativeResearchClause.cs index 04f7c5b99..d077c4669 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/CooperativeResearchClause.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Clauses/CooperativeResearchClause.cs @@ -1,71 +1,71 @@ -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Linq; -using Tech = FrEee.Game.Objects.Technology.Technology; - -namespace FrEee.Game.Objects.Civilization.Diplomacy.Clauses -{ - /// - /// A treaty clause which grants an empire an occasional breakthrough - /// if the other empire has researched or is researching - /// any technology that the first empire does not already know. - /// - public class CooperativeResearchClause : Clause - { - public CooperativeResearchClause(Empire giver, Empire receiver) - : base(giver, receiver) - { - } - - public override string BriefDescription - { - get { return "Cooperative Research"; } - } - - public override string FullDescription - { - get - { - return Receiver.WeOrName() + " has a " + Mod.Current.Settings.CooperativeResearchBreakthroughChance + "% chance of achieving a breakthrough each turn in any technology that " + Giver.WeOrName(false) + " " + (Giver == Empire.Current ? "are" : "is") + " more advanced in, provided " + Receiver.WeOrName() + " meet" + (Receiver == Empire.Current ? "" : "s") + " the prerequisites."; - } - } - - public override void PerformAction() - { - foreach (var tech in Receiver.UnlockedItems.OfType()) - { - var hasLevels = Receiver.ResearchedTechnologies[tech]; - var hasProgress = Receiver.ResearchProgress.SingleOrDefault(p => p.Item == tech); - var hasAmount = hasProgress == null ? 0 : hasProgress.Value; - var giveLevels = Giver.ResearchedTechnologies[tech]; - var giveProgress = Giver.ResearchProgress.SingleOrDefault(p => p.Item == tech); - var giveAmount = giveProgress == null ? 0 : giveProgress.Value; - if (giveLevels > hasLevels || giveLevels == hasLevels && giveAmount > hasAmount) - { - if (RandomHelper.Next(100d) < Mod.Current.Settings.CooperativeResearchBreakthroughChance) - { - // breakthrough! - // get 1 level if a full level or more below - // get up to current progress if working on same level - if (hasProgress == null) - { - // create a progress object so we can track progress on the learned tech - Receiver.Research(tech, 0); - hasProgress = Receiver.ResearchProgress.Single(p => p.Item == tech); - } - if (giveLevels > hasLevels) - { - Receiver.ResearchedTechnologies[tech]++; - hasProgress.Value = 0; - } - else - hasProgress.Value = giveProgress.Value; - Giver.Log.Add(Receiver.CreateLogMessage("The " + Receiver + " has achieved a breakthrough in " + tech + " due to our cooperative research treaty.", LogMessages.LogMessageType.Generic)); - Receiver.Log.Add(tech.CreateLogMessage("We have achieved a breakthrough in " + tech + " due to our cooperative research treaty with the " + Giver + ".", LogMessages.LogMessageType.ResearchComplete)); - } - } - } - } - } +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Linq; +using Tech = FrEee.Objects.Technology.Technology; + +namespace FrEee.Objects.Civilization.Diplomacy.Clauses +{ + /// + /// A treaty clause which grants an empire an occasional breakthrough + /// if the other empire has researched or is researching + /// any technology that the first empire does not already know. + /// + public class CooperativeResearchClause : Clause + { + public CooperativeResearchClause(Empire giver, Empire receiver) + : base(giver, receiver) + { + } + + public override string BriefDescription + { + get { return "Cooperative Research"; } + } + + public override string FullDescription + { + get + { + return Receiver.WeOrName() + " has a " + Mod.Current.Settings.CooperativeResearchBreakthroughChance + "% chance of achieving a breakthrough each turn in any technology that " + Giver.WeOrName(false) + " " + (Giver == Empire.Current ? "are" : "is") + " more advanced in, provided " + Receiver.WeOrName() + " meet" + (Receiver == Empire.Current ? "" : "s") + " the prerequisites."; + } + } + + public override void PerformAction() + { + foreach (var tech in Receiver.UnlockedItems.OfType()) + { + var hasLevels = Receiver.ResearchedTechnologies[tech]; + var hasProgress = Receiver.ResearchProgress.SingleOrDefault(p => p.Item == tech); + var hasAmount = hasProgress == null ? 0 : hasProgress.Value; + var giveLevels = Giver.ResearchedTechnologies[tech]; + var giveProgress = Giver.ResearchProgress.SingleOrDefault(p => p.Item == tech); + var giveAmount = giveProgress == null ? 0 : giveProgress.Value; + if (giveLevels > hasLevels || giveLevels == hasLevels && giveAmount > hasAmount) + { + if (RandomHelper.Next(100d) < Mod.Current.Settings.CooperativeResearchBreakthroughChance) + { + // breakthrough! + // get 1 level if a full level or more below + // get up to current progress if working on same level + if (hasProgress == null) + { + // create a progress object so we can track progress on the learned tech + Receiver.Research(tech, 0); + hasProgress = Receiver.ResearchProgress.Single(p => p.Item == tech); + } + if (giveLevels > hasLevels) + { + Receiver.ResearchedTechnologies[tech]++; + hasProgress.Value = 0; + } + else + hasProgress.Value = giveProgress.Value; + Giver.Log.Add(Receiver.CreateLogMessage("The " + Receiver + " has achieved a breakthrough in " + tech + " due to our cooperative research treaty.", LogMessages.LogMessageType.Generic)); + Receiver.Log.Add(tech.CreateLogMessage("We have achieved a breakthrough in " + tech + " due to our cooperative research treaty with the " + Giver + ".", LogMessages.LogMessageType.ResearchComplete)); + } + } + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/FreeTradeClause.cs b/FrEee/Objects/Civilization/Diplomacy/Clauses/FreeTradeClause.cs similarity index 91% rename from FrEee/Game/Objects/Civilization/Diplomacy/Clauses/FreeTradeClause.cs rename to FrEee/Objects/Civilization/Diplomacy/Clauses/FreeTradeClause.cs index 39df76a9f..310d40b48 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/FreeTradeClause.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Clauses/FreeTradeClause.cs @@ -1,75 +1,75 @@ -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Objects.Civilization.Diplomacy.Clauses -{ - /// - /// Gives the receiving empire a quantity of resources proportional to the giving empire's gross income. - /// Does not deduct any resources from the giving empire. - /// - public class FreeTradeClause : Clause - { - public FreeTradeClause(Empire giver, Empire receiver, Resource resource) - : base(giver, receiver) - { - Resource = resource; - TradePercentage = Mod.Current.Settings.StartTradePercent; - } - - /// - /// The amount of resources traded this turn. - /// - public int Amount { get; set; } - - public override string BriefDescription - { - get { return "Free Trade (" + Resource + ")"; } - } - - public override string FullDescription - { - get - { - return Receiver.WeOrName() + " will receive income equal to " + TradePercentage + "% of " + Giver.UsOrName().Possessive() + " gross " + Resource.Name.ToLower() + " income (will increase to " + Mod.Current.Settings.MaxTradePercent + "% over " + Math.Ceiling(Mod.Current.Settings.MaxTradePercent - TradePercentage) / Mod.Current.Settings.TradePercentPerTurn + " turns)."; - } - } - - /// - /// The resource being traded. - /// - public Resource Resource - { - get; - set; - } - - /// - /// The percentage of the giver's income that will be traded. - /// - public double TradePercentage - { - get; - set; - } - - public override void PerformAction() - { - // save off amount of trade so the player can see it - Amount = (int)(Giver.GrossDomesticIncome[Resource] * TradePercentage / 100d); - - // perform trade - Receiver.StoredResources[Resource] += Amount; - - // cap resources at max storage - if (Receiver.StoredResources[Resource] > Receiver.ResourceStorage[Resource]) - Receiver.StoredResources[Resource] = Receiver.ResourceStorage[Resource]; - - // increase trade percentage - TradePercentage += Mod.Current.Settings.TradePercentPerTurn; - if (TradePercentage > Mod.Current.Settings.MaxTradePercent) - TradePercentage = Mod.Current.Settings.MaxTradePercent; - } - } +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; + +namespace FrEee.Objects.Civilization.Diplomacy.Clauses +{ + /// + /// Gives the receiving empire a quantity of resources proportional to the giving empire's gross income. + /// Does not deduct any resources from the giving empire. + /// + public class FreeTradeClause : Clause + { + public FreeTradeClause(Empire giver, Empire receiver, Resource resource) + : base(giver, receiver) + { + Resource = resource; + TradePercentage = Mod.Current.Settings.StartTradePercent; + } + + /// + /// The amount of resources traded this turn. + /// + public int Amount { get; set; } + + public override string BriefDescription + { + get { return "Free Trade (" + Resource + ")"; } + } + + public override string FullDescription + { + get + { + return Receiver.WeOrName() + " will receive income equal to " + TradePercentage + "% of " + Giver.UsOrName().Possessive() + " gross " + Resource.Name.ToLower() + " income (will increase to " + Mod.Current.Settings.MaxTradePercent + "% over " + Math.Ceiling(Mod.Current.Settings.MaxTradePercent - TradePercentage) / Mod.Current.Settings.TradePercentPerTurn + " turns)."; + } + } + + /// + /// The resource being traded. + /// + public Resource Resource + { + get; + set; + } + + /// + /// The percentage of the giver's income that will be traded. + /// + public double TradePercentage + { + get; + set; + } + + public override void PerformAction() + { + // save off amount of trade so the player can see it + Amount = (int)(Giver.GrossDomesticIncome[Resource] * TradePercentage / 100d); + + // perform trade + Receiver.StoredResources[Resource] += Amount; + + // cap resources at max storage + if (Receiver.StoredResources[Resource] > Receiver.ResourceStorage[Resource]) + Receiver.StoredResources[Resource] = Receiver.ResourceStorage[Resource]; + + // increase trade percentage + TradePercentage += Mod.Current.Settings.TradePercentPerTurn; + if (TradePercentage > Mod.Current.Settings.MaxTradePercent) + TradePercentage = Mod.Current.Settings.MaxTradePercent; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareAbilityClause.cs b/FrEee/Objects/Civilization/Diplomacy/Clauses/ShareAbilityClause.cs similarity index 84% rename from FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareAbilityClause.cs rename to FrEee/Objects/Civilization/Diplomacy/Clauses/ShareAbilityClause.cs index a6d6c6417..99573cf6d 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareAbilityClause.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Clauses/ShareAbilityClause.cs @@ -1,49 +1,49 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Abilities; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Civilization.Diplomacy.Clauses -{ - /// - /// Allows empires to share usage of abilities that can affect other objects, such as resupply. - /// - public class ShareAbilityClause : Clause - { - public ShareAbilityClause(Empire giver, Empire receiver, AbilityRule rule, SharingPriority priority) - : base(giver, receiver) - { - AbilityRule = rule; - Priority = priority; - } - - /// - /// The type of ability being shared. - /// - public AbilityRule AbilityRule { get; set; } - - public override string BriefDescription - { - get { return "Share Ability (" + AbilityRule.Name + ") - " + Priority + " Priority"; } - } - - public override string FullDescription - { - get - { - return Giver.WeOrName() + " will share the " + AbilityRule.Name + " ability with " + Receiver.UsOrName() + " at " + Priority.ToString().ToLower() + " priority."; - } - } - - /// - /// The priority of sharing with this empire. - /// - public SharingPriority Priority { get; set; } - - /// - /// Doesn't do anything; this clause just affects ability scopes. - /// - public override void PerformAction() - { - } - } +using FrEee.Enumerations; +using FrEee.Objects.Abilities; +using FrEee.Extensions; + +namespace FrEee.Objects.Civilization.Diplomacy.Clauses +{ + /// + /// Allows empires to share usage of abilities that can affect other objects, such as resupply. + /// + public class ShareAbilityClause : Clause + { + public ShareAbilityClause(Empire giver, Empire receiver, AbilityRule rule, SharingPriority priority) + : base(giver, receiver) + { + AbilityRule = rule; + Priority = priority; + } + + /// + /// The type of ability being shared. + /// + public AbilityRule AbilityRule { get; set; } + + public override string BriefDescription + { + get { return "Share Ability (" + AbilityRule.Name + ") - " + Priority + " Priority"; } + } + + public override string FullDescription + { + get + { + return Giver.WeOrName() + " will share the " + AbilityRule.Name + " ability with " + Receiver.UsOrName() + " at " + Priority.ToString().ToLower() + " priority."; + } + } + + /// + /// The priority of sharing with this empire. + /// + public SharingPriority Priority { get; set; } + + /// + /// Doesn't do anything; this clause just affects ability scopes. + /// + public override void PerformAction() + { + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareCombatLogsClause.cs b/FrEee/Objects/Civilization/Diplomacy/Clauses/ShareCombatLogsClause.cs similarity index 76% rename from FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareCombatLogsClause.cs rename to FrEee/Objects/Civilization/Diplomacy/Clauses/ShareCombatLogsClause.cs index ddf248d06..99bda9dc6 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareCombatLogsClause.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Clauses/ShareCombatLogsClause.cs @@ -1,37 +1,37 @@ -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.LogMessages; -using FrEee.Utility.Extensions; -using System.Linq; - -namespace FrEee.Game.Objects.Civilization.Diplomacy.Clauses -{ - /// - /// A treaty clause which shares combat logs between empires. - /// - public class ShareCombatLogsClause : Clause - { - public ShareCombatLogsClause(Empire giver, Empire receiver) - : base(giver, receiver) - { - } - - public override string BriefDescription - { - get { return "Share Combat Logs"; } - } - - public override string FullDescription - { - get - { - return Giver.WeOrName() + " will share all combat logs with " + Receiver.UsOrName(); - } - } - - public override void PerformAction() - { - foreach (var msg in Giver.Log.OfType>()) - Receiver.Log.Add(msg.Copy()); - } - } +using FrEee.Objects.Combat; +using FrEee.Objects.LogMessages; +using FrEee.Extensions; +using System.Linq; + +namespace FrEee.Objects.Civilization.Diplomacy.Clauses +{ + /// + /// A treaty clause which shares combat logs between empires. + /// + public class ShareCombatLogsClause : Clause + { + public ShareCombatLogsClause(Empire giver, Empire receiver) + : base(giver, receiver) + { + } + + public override string BriefDescription + { + get { return "Share Combat Logs"; } + } + + public override string FullDescription + { + get + { + return Giver.WeOrName() + " will share all combat logs with " + Receiver.UsOrName(); + } + } + + public override void PerformAction() + { + foreach (var msg in Giver.Log.OfType>()) + Receiver.Log.Add(msg.Copy()); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareDesignsClause.cs b/FrEee/Objects/Civilization/Diplomacy/Clauses/ShareDesignsClause.cs similarity index 83% rename from FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareDesignsClause.cs rename to FrEee/Objects/Civilization/Diplomacy/Clauses/ShareDesignsClause.cs index c49cae629..118e9c3de 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareDesignsClause.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Clauses/ShareDesignsClause.cs @@ -1,34 +1,34 @@ -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Civilization.Diplomacy.Clauses -{ - /// - /// A treaty clause which shares knowledge of vehicle designs between empires. - /// - public class ShareDesignsClause : Clause - { - public ShareDesignsClause(Empire giver, Empire receiver) - : base(giver, receiver) - { - } - - public override string BriefDescription - { - get { return "Share Designs"; } - } - - public override string FullDescription - { - get - { - return Giver.WeOrName() + " will share all known vehicle designs with " + Receiver.UsOrName(); - } - } - - public override void PerformAction() - { - foreach (var d in Giver.KnownDesigns) - Receiver.KnownDesigns.Add(d); - } - } +using FrEee.Extensions; + +namespace FrEee.Objects.Civilization.Diplomacy.Clauses +{ + /// + /// A treaty clause which shares knowledge of vehicle designs between empires. + /// + public class ShareDesignsClause : Clause + { + public ShareDesignsClause(Empire giver, Empire receiver) + : base(giver, receiver) + { + } + + public override string BriefDescription + { + get { return "Share Designs"; } + } + + public override string FullDescription + { + get + { + return Giver.WeOrName() + " will share all known vehicle designs with " + Receiver.UsOrName(); + } + } + + public override void PerformAction() + { + foreach (var d in Giver.KnownDesigns) + Receiver.KnownDesigns.Add(d); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareVisionClause.cs b/FrEee/Objects/Civilization/Diplomacy/Clauses/ShareVisionClause.cs similarity index 85% rename from FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareVisionClause.cs rename to FrEee/Objects/Civilization/Diplomacy/Clauses/ShareVisionClause.cs index da4586f2b..8ed228e09 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/ShareVisionClause.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Clauses/ShareVisionClause.cs @@ -1,42 +1,42 @@ -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Civilization.Diplomacy.Clauses -{ - /// - /// A treaty clause which shares vision between empires. - /// - public class ShareVisionClause : Clause - { - public ShareVisionClause(Empire giver, Empire receiver) - : base(giver, receiver) - { - } - - public override string BriefDescription - { - get { return "Share Vision"; } - } - - public override string FullDescription - { - get - { - return Giver.WeOrName() + " will share all vision memory with " + Receiver.UsOrName(); - } - } - - public override void PerformAction() - { - foreach (var kvp in Giver.Memory) - { - var existing = Receiver.Memory[kvp.Key]; - if (existing == null || existing.Timestamp < kvp.Value.Timestamp) - { - // copy memory - var copy = kvp.Value.CopyAndAssignNewID(); - Receiver.Memory[kvp.Key] = copy; - } - } - } - } +using FrEee.Extensions; + +namespace FrEee.Objects.Civilization.Diplomacy.Clauses +{ + /// + /// A treaty clause which shares vision between empires. + /// + public class ShareVisionClause : Clause + { + public ShareVisionClause(Empire giver, Empire receiver) + : base(giver, receiver) + { + } + + public override string BriefDescription + { + get { return "Share Vision"; } + } + + public override string FullDescription + { + get + { + return Giver.WeOrName() + " will share all vision memory with " + Receiver.UsOrName(); + } + } + + public override void PerformAction() + { + foreach (var kvp in Giver.Memory) + { + var existing = Receiver.Memory[kvp.Key]; + if (existing == null || existing.Timestamp < kvp.Value.Timestamp) + { + // copy memory + var copy = kvp.Value.CopyAndAssignNewID(); + Receiver.Memory[kvp.Key] = copy; + } + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/TributeClause.cs b/FrEee/Objects/Civilization/Diplomacy/Clauses/TributeClause.cs similarity index 93% rename from FrEee/Game/Objects/Civilization/Diplomacy/Clauses/TributeClause.cs rename to FrEee/Objects/Civilization/Diplomacy/Clauses/TributeClause.cs index b69ad0fbb..8805ee192 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Clauses/TributeClause.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Clauses/TributeClause.cs @@ -1,104 +1,104 @@ -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Linq; - -namespace FrEee.Game.Objects.Civilization.Diplomacy.Clauses -{ - /// - /// Gives the receiving empire a quantity of resources proportional to the giving empire's gross income, or a flat quantity of resources. - /// Deducts the resources from the giving empire. - /// If the giving empire does not have enough resources, the receiving empire will be notified. - /// - public class TributeClause : Clause - { - public TributeClause(Empire giver, Empire receiver, Resource resource, int quantity, bool isPercentage) - : base(giver, receiver) - { - Resource = resource; - Quantity = quantity; - IsPercentage = isPercentage; - } - - public override string BriefDescription - { - get - { - string qty; - if (IsPercentage) - qty = Quantity + "%"; - else - qty = Quantity.ToUnitString(true); - return "Tribute (" + Resource + ") - " + qty; - } - } - - /// - /// The amount of tribute owed. - /// - public int Debt - { - get - { - if (IsPercentage) - return Giver.GrossDomesticIncome[Resource] * Quantity / 100; - return Quantity; - } - } - - public override string FullDescription - { - get - { - if (IsPercentage) - return Giver.WeOrName() + " will pay " + Receiver.UsOrName() + " a tribute of " + Quantity + "% of " + Giver.WeOrName(false).Possessive() + " gross " + Resource.Name.ToLower() + " income."; - else - return Giver.WeOrName() + " will pay " + Receiver.UsOrName() + " a tribute of " + Quantity.ToUnitString(true) + " " + Resource.Name.ToLower() + " per turn."; - } - } - - /// - /// Is this a percentage or a flat rate? - /// - public bool IsPercentage { get; set; } - - /// - /// The quantity or percentage of resources or income. - /// - public int Quantity { get; set; } - - /// - /// The resource being traded. - /// - public Resource Resource - { - get; - set; - } - - public override void PerformAction() - { - // check total debt - var totalDebt = Giver.GivenTreatyClauses.OfType().Where(c => c.Resource == Resource).Sum(c => c.Debt); - - // check max amount giveable - var maxGiveable = Giver.StoredResources[Resource]; - - // how much to pay? - int toPay; - if (maxGiveable >= totalDebt) - toPay = Debt; - else - { - // pay proportional to debt to each empire - toPay = Debt / totalDebt * maxGiveable; - var unpaid = Debt - toPay; - Giver.Log.Add(Receiver.CreateLogMessage("We were unable to fulfill our tribute obligations to the " + Receiver + ". We fell short by " + unpaid.ToUnitString(true) + " " + Resource.Name.ToLower() + ".", LogMessages.LogMessageType.Generic)); - Receiver.Log.Add(Giver.CreateLogMessage("The " + Giver + "was unable to fulfill its tribute obligations. They fell short by " + unpaid.ToUnitString(true) + " " + Resource.Name.ToLower() + ".", LogMessages.LogMessageType.Generic)); - } - - // transfer resources - Giver.StoredResources[Resource] -= toPay; - Receiver.StoredResources[Resource] += toPay; - } - } +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Linq; + +namespace FrEee.Objects.Civilization.Diplomacy.Clauses +{ + /// + /// Gives the receiving empire a quantity of resources proportional to the giving empire's gross income, or a flat quantity of resources. + /// Deducts the resources from the giving empire. + /// If the giving empire does not have enough resources, the receiving empire will be notified. + /// + public class TributeClause : Clause + { + public TributeClause(Empire giver, Empire receiver, Resource resource, int quantity, bool isPercentage) + : base(giver, receiver) + { + Resource = resource; + Quantity = quantity; + IsPercentage = isPercentage; + } + + public override string BriefDescription + { + get + { + string qty; + if (IsPercentage) + qty = Quantity + "%"; + else + qty = Quantity.ToUnitString(true); + return "Tribute (" + Resource + ") - " + qty; + } + } + + /// + /// The amount of tribute owed. + /// + public int Debt + { + get + { + if (IsPercentage) + return Giver.GrossDomesticIncome[Resource] * Quantity / 100; + return Quantity; + } + } + + public override string FullDescription + { + get + { + if (IsPercentage) + return Giver.WeOrName() + " will pay " + Receiver.UsOrName() + " a tribute of " + Quantity + "% of " + Giver.WeOrName(false).Possessive() + " gross " + Resource.Name.ToLower() + " income."; + else + return Giver.WeOrName() + " will pay " + Receiver.UsOrName() + " a tribute of " + Quantity.ToUnitString(true) + " " + Resource.Name.ToLower() + " per turn."; + } + } + + /// + /// Is this a percentage or a flat rate? + /// + public bool IsPercentage { get; set; } + + /// + /// The quantity or percentage of resources or income. + /// + public int Quantity { get; set; } + + /// + /// The resource being traded. + /// + public Resource Resource + { + get; + set; + } + + public override void PerformAction() + { + // check total debt + var totalDebt = Giver.GivenTreatyClauses.OfType().Where(c => c.Resource == Resource).Sum(c => c.Debt); + + // check max amount giveable + var maxGiveable = Giver.StoredResources[Resource]; + + // how much to pay? + int toPay; + if (maxGiveable >= totalDebt) + toPay = Debt; + else + { + // pay proportional to debt to each empire + toPay = Debt / totalDebt * maxGiveable; + var unpaid = Debt - toPay; + Giver.Log.Add(Receiver.CreateLogMessage("We were unable to fulfill our tribute obligations to the " + Receiver + ". We fell short by " + unpaid.ToUnitString(true) + " " + Resource.Name.ToLower() + ".", LogMessages.LogMessageType.Generic)); + Receiver.Log.Add(Giver.CreateLogMessage("The " + Giver + "was unable to fulfill its tribute obligations. They fell short by " + unpaid.ToUnitString(true) + " " + Resource.Name.ToLower() + ".", LogMessages.LogMessageType.Generic)); + } + + // transfer resources + Giver.StoredResources[Resource] -= toPay; + Receiver.StoredResources[Resource] += toPay; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/DeclareWarAction.cs b/FrEee/Objects/Civilization/Diplomacy/DeclareWarAction.cs similarity index 85% rename from FrEee/Game/Objects/Civilization/Diplomacy/DeclareWarAction.cs rename to FrEee/Objects/Civilization/Diplomacy/DeclareWarAction.cs index aae48af12..ca61c3b37 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/DeclareWarAction.cs +++ b/FrEee/Objects/Civilization/Diplomacy/DeclareWarAction.cs @@ -1,29 +1,29 @@ -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// Declares war on the target empire. - /// - public class DeclareWarAction : Action - { - public DeclareWarAction(Empire target) - : base(target) - { - } - - public override string Description - { - get { return "Declare War"; } - } - - public override void Execute() - { - foreach (var clause in Executor.GetTreaty(Target)) - clause.Dispose(); - // TODO - some sort of formal war state - Executor.Log.Add(Target.CreateLogMessage("We have declared war on the " + Target + ".", LogMessages.LogMessageType.Diplomacy)); - Target.Log.Add(Executor.CreateLogMessage("The " + Executor + " has declared war on us!", LogMessages.LogMessageType.Diplomacy)); - } - } +using FrEee.Extensions; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// Declares war on the target empire. + /// + public class DeclareWarAction : Action + { + public DeclareWarAction(Empire target) + : base(target) + { + } + + public override string Description + { + get { return "Declare War"; } + } + + public override void Execute() + { + foreach (var clause in Executor.GetTreaty(Target)) + clause.Dispose(); + // TODO - some sort of formal war state + Executor.Log.Add(Target.CreateLogMessage("We have declared war on the " + Target + ".", LogMessages.LogMessageType.Diplomacy)); + Target.Log.Add(Executor.CreateLogMessage("The " + Executor + " has declared war on us!", LogMessages.LogMessageType.Diplomacy)); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/GeneralMessage.cs b/FrEee/Objects/Civilization/Diplomacy/GeneralMessage.cs similarity index 82% rename from FrEee/Game/Objects/Civilization/Diplomacy/GeneralMessage.cs rename to FrEee/Objects/Civilization/Diplomacy/GeneralMessage.cs index b71f407cf..001f806f6 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/GeneralMessage.cs +++ b/FrEee/Objects/Civilization/Diplomacy/GeneralMessage.cs @@ -1,37 +1,37 @@ -using FrEee.Game.Interfaces; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// A general message with no parameters. Just text. - /// - public class GeneralMessage : Message - { - public GeneralMessage(Empire recipient) - : base(recipient) - { - } - - public override IEnumerable IconPaths - { - get - { - return Owner.IconPaths; - } - } - - public override IEnumerable PortraitPaths - { - get - { - return Owner.PortraitPaths; - } - } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done) - { - // nothing to do - } - } +using FrEee.Interfaces; +using System.Collections.Generic; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// A general message with no parameters. Just text. + /// + public class GeneralMessage : Message + { + public GeneralMessage(Empire recipient) + : base(recipient) + { + } + + public override IEnumerable IconPaths + { + get + { + return Owner.IconPaths; + } + } + + public override IEnumerable PortraitPaths + { + get + { + return Owner.PortraitPaths; + } + } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done) + { + // nothing to do + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Message.cs b/FrEee/Objects/Civilization/Diplomacy/Message.cs similarity index 88% rename from FrEee/Game/Objects/Civilization/Diplomacy/Message.cs rename to FrEee/Objects/Civilization/Diplomacy/Message.cs index 48c0560f6..78ca7436e 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Message.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Message.cs @@ -1,135 +1,135 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// A diplomatic message. - /// - public abstract class Message : IMessage - { - protected Message(Empire recipient) - { - Owner = Empire.Current; - Recipient = recipient; - TurnNumber = Galaxy.Current.TurnNumber; - } - - public Image Icon - { - get - { - return Owner == Empire.Current ? Recipient.Icon : Owner.Icon; - } - } - - public Image Icon32 => Icon.Resize(32); - - public abstract IEnumerable IconPaths { get; } - - public long ID - { - get; - set; - } - - public IMessage InReplyTo { get; set; } - - public bool IsDisposed { get; set; } - - /// - /// Messages cannot be memories, as they do not change over time. - /// - public bool IsMemory - { - get; set; - } - - /// - /// The empire sending this message. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - public Image Portrait - { - get - { - return Owner == Empire.Current ? Recipient.Portrait : Owner?.Portrait; - } - } - - public abstract IEnumerable PortraitPaths { get; } - - /// - /// The empire receiving the message. - /// - [DoNotSerialize] - public Empire Recipient { get { return recipient; } set { recipient = value; } } - - /// - /// The text of the message. - /// - public string Text { get; set; } - - public double Timestamp - { - get; set; - } - - public int TurnNumber { get; set; } - - private GalaxyReference owner { get; set; } - - private GalaxyReference recipient { get; set; } - - public Visibility CheckVisibility(Empire emp) - { - // TODO - intel to spy on foreign messages or disrupt communications - if (emp == Owner) - return Visibility.Owned; - if (emp == Recipient) - return Visibility.Scanned; - return Visibility.Unknown; - } - - public void Dispose() - { - if (IsDisposed) - return; - Galaxy.Current.UnassignID(this); - if (Owner != null) - { - // HACK - how could a diplomatic message have no owner? - var cmd = Owner.Commands.OfType().SingleOrDefault(c => c.Message == this); - if (cmd != null) - Owner.Commands.Remove(cmd); - } - } - - /// - /// Messages cannot be memories, as they do not change over time. - /// - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - public void Redact(Empire emp) - { - // TODO - partial espionage of messages? - // e.g. you could tell that a type of message was sent but not the text or parameters - if (CheckVisibility(emp) < Visibility.Fogged) - Dispose(); - } - - public abstract void ReplaceClientIDs(IDictionary idmap, ISet done = null); - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// A diplomatic message. + /// + public abstract class Message : IMessage + { + protected Message(Empire recipient) + { + Owner = Empire.Current; + Recipient = recipient; + TurnNumber = Galaxy.Current.TurnNumber; + } + + public Image Icon + { + get + { + return Owner == Empire.Current ? Recipient.Icon : Owner.Icon; + } + } + + public Image Icon32 => Icon.Resize(32); + + public abstract IEnumerable IconPaths { get; } + + public long ID + { + get; + set; + } + + public IMessage InReplyTo { get; set; } + + public bool IsDisposed { get; set; } + + /// + /// Messages cannot be memories, as they do not change over time. + /// + public bool IsMemory + { + get; set; + } + + /// + /// The empire sending this message. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + public Image Portrait + { + get + { + return Owner == Empire.Current ? Recipient.Portrait : Owner?.Portrait; + } + } + + public abstract IEnumerable PortraitPaths { get; } + + /// + /// The empire receiving the message. + /// + [DoNotSerialize] + public Empire Recipient { get { return recipient; } set { recipient = value; } } + + /// + /// The text of the message. + /// + public string Text { get; set; } + + public double Timestamp + { + get; set; + } + + public int TurnNumber { get; set; } + + private GalaxyReference owner { get; set; } + + private GalaxyReference recipient { get; set; } + + public Visibility CheckVisibility(Empire emp) + { + // TODO - intel to spy on foreign messages or disrupt communications + if (emp == Owner) + return Visibility.Owned; + if (emp == Recipient) + return Visibility.Scanned; + return Visibility.Unknown; + } + + public void Dispose() + { + if (IsDisposed) + return; + Galaxy.Current.UnassignID(this); + if (Owner != null) + { + // HACK - how could a diplomatic message have no owner? + var cmd = Owner.Commands.OfType().SingleOrDefault(c => c.Message == this); + if (cmd != null) + Owner.Commands.Remove(cmd); + } + } + + /// + /// Messages cannot be memories, as they do not change over time. + /// + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + public void Redact(Empire emp) + { + // TODO - partial espionage of messages? + // e.g. you could tell that a type of message was sent but not the text or parameters + if (CheckVisibility(emp) < Visibility.Fogged) + Dispose(); + } + + public abstract void ReplaceClientIDs(IDictionary idmap, ISet done = null); + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Package.cs b/FrEee/Objects/Civilization/Diplomacy/Package.cs similarity index 94% rename from FrEee/Game/Objects/Civilization/Diplomacy/Package.cs rename to FrEee/Objects/Civilization/Diplomacy/Package.cs index aa7a05fb4..7b708e1ed 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Package.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Package.cs @@ -1,258 +1,259 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization.Diplomacy.Clauses; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; -using Tech = FrEee.Game.Objects.Technology.Technology; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// A package of items that can be gifted or traded. - /// - public class Package : IOwnable, IPromotable - { - public Package(Empire owner, Empire recipient) - { - Owner = owner; - Recipient = recipient; - TreatyClauses = new HashSet(); - Planets = new GalaxyReferenceSet(); - Vehicles = new GalaxyReferenceSet(); - Resources = new ResourceQuantity(); - Technology = new ModReferenceKeyedDictionary(); - StarCharts = new GalaxyReferenceSet(); - CommunicationChannels = new GalaxyReferenceSet(); - } - - public GalaxyReferenceSet CommunicationChannels { get; private set; } - - /// - /// Errors due to the game settings restricting certain gifts/trades, - /// or the empire in question not actually owning the objects he is promising. - /// - public IEnumerable Errors - { - get - { - if (TreatyClauses.OfType().Count() > 1) - yield return "A treaty cannot contain more than one alliance clause per side."; - if (TreatyClauses.OfType().Count() > 1) - yield return "A treaty cannot contain more than one cooperative research clause per side."; - if (TreatyClauses.OfType().GroupBy(c => c.Resource).Any(g => g.Count() > 1)) - yield return "A treaty cannot contain more than free trade clause per resource per side."; - if (TreatyClauses.OfType().GroupBy(c => c.AbilityRule).Any(g => g.Count() > 1)) - yield return "A treaty cannot contain more than ability-sharing clause per ability per side."; - if (TreatyClauses.OfType().Count() > 1) - yield return "A treaty cannot contain more than one combat-log-sharing clause per side."; - if (TreatyClauses.OfType().Count() > 1) - yield return "A treaty cannot contain more than one design-sharing clause per side."; - if (TreatyClauses.OfType().Count() > 1) - yield return "A treaty cannot contain more than one vision-sharing clause per side."; - if (TreatyClauses.OfType().GroupBy(c => c.Resource).Any(g => g.Count() > 1)) - yield return "A treaty cannot contain more than tribute clause per resource per side."; - foreach (var p in Planets.Where(p => p.Owner != Owner)) - yield return "The " + Owner + " does not own " + p + "."; - foreach (var v in Vehicles.Where(v => v.Owner != Owner)) - yield return "The " + Owner + " does not own " + v + "."; - foreach (var u in Vehicles.OfType().Where(u => u.Container is ISpaceObject)) - yield return u + " cannot be traded because it is in the cargo of " + u.Container + "."; - if (Resources.Any(kvp => kvp.Value < 0)) - yield return "You cannot transfer a negative quantity of resources."; - if (Resources.Any(kvp => Owner.StoredResources[kvp.Key] < kvp.Value)) - yield return "The " + Owner + " does not have the specified quantity of resources."; - foreach (var kvp in Technology.Where(kvp => Owner.ResearchedTechnologies[kvp.Key] < kvp.Value)) - yield return "The " + Owner + " has not researched " + kvp.Key + " to level " + kvp.Value + "."; - foreach (var sys in StarCharts.Where(sys => !Owner.ExploredStarSystems.Contains(sys))) - yield return "The " + Owner + " has not explored " + sys + "."; - foreach (var emp in CommunicationChannels.Where(emp => !Owner.EncounteredEmpires.Contains(emp))) - yield return "The " + Owner + " has not encountered the " + emp + "."; - - // TODO - game setup restrictions on gifts/trades/treaties - } - } - - public bool IsEmpty - { - get - { - return !TreatyClauses.Any() && !Planets.Any() && !Vehicles.Any() && !Resources.Any(r => r.Value != 0) && !Technology.Any() && !StarCharts.Any() && !CommunicationChannels.Any(); - } - } - - /// - /// Is this a valid package? - /// - public bool IsValid - { - get - { - return !Errors.Any(); - } - } - - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - public GalaxyReferenceSet Planets { get; private set; } - - [DoNotSerialize] - public Empire Recipient { get { return recipient; } set { recipient = value; } } - - public ResourceQuantity Resources { get; private set; } - public GalaxyReferenceSet StarCharts { get; private set; } - public ModReferenceKeyedDictionary Technology { get; private set; } - public ISet TreatyClauses { get; private set; } - public GalaxyReferenceSet Vehicles { get; private set; } - - private GalaxyReference owner { get; set; } - private GalaxyReference recipient { get; set; } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - foreach (var clause in TreatyClauses) - clause.ReplaceClientIDs(idmap, done); - } - } - - public override string ToString() - { - var items = new List(); - if (TreatyClauses.Any()) - { - if (TreatyClauses.Count == 1) - items.Add(TreatyClauses.Single().ToString()); - else - items.Add(TreatyClauses.Count + " treaty clauses"); - } - if (Planets.Any()) - { - if (Planets.Count == 1) - items.Add(Planets.Single().ToString()); - else - items.Add(Planets.Count + " planets"); - } - if (Vehicles.Any()) - { - if (Vehicles.Count == 1) - items.Add(Vehicles.Single().ToString()); - else - items.Add(Vehicles.Count + " vehicles"); - } - if (Resources.Any(kvp => kvp.Value != 0)) - items.Add(Resources.ToString()); - if (Technology.Any()) - { - if (Technology.Count == 1) - { - var kvp = Technology.Single(); - items.Add(kvp.Key + " to level " + kvp.Value); - } - else - items.Add(Technology.Count + " technologies"); - } - if (StarCharts.Any()) - { - if (StarCharts.Count == 1) - items.Add("the star chart for " + StarCharts.Single().ToString()); - else - items.Add(StarCharts.Count + " star charts"); - } - if (CommunicationChannels.Any()) - { - if (CommunicationChannels.Count == 1) - items.Add("comm channels to " + CommunicationChannels.Single().ToString()); - else - items.Add(CommunicationChannels.Count + " comm channels"); - } - if (!items.Any()) - return "nothing"; - return string.Join(", ", items.ToArray()); - } - - /// - /// Transfers this package to a target empire. - /// - /// - public void Transfer(Empire target) - { - var errors = Errors.ToArray(); - if (errors.Any()) - throw new Exception("Attempting to transfer an invalid package (" + this + "): " + errors.First()); - foreach (var c in TreatyClauses) - Galaxy.Current.GetReferrable(c).IsInEffect = true; - foreach (var p in Planets) - p.Colony.Owner = target; - foreach (var v in Vehicles) - v.Owner = target; - Owner.StoredResources -= Resources; - target.StoredResources += Resources; - foreach (var kvp in Technology) - { - if (target.ResearchedTechnologies[kvp.Key] < kvp.Value) - { - // research the tech and reset progress to next level - target.ResearchedTechnologies[kvp.Key] = kvp.Value; - var progress = target.ResearchProgress.SingleOrDefault(p => p.Item == kvp.Key); - if (progress != null) - progress.Value = 0; - } - } - foreach (var sys in StarCharts) - { - foreach (var kvp in Owner.Memory) - { - // copy memory of system and everything in it - if (kvp.Value == sys || kvp.Value is ISpaceObject && ((ISpaceObject)kvp.Value).StarSystem == sys) - { - var copy = kvp.Value.CopyAndAssignNewID(); - target.Memory.Add(kvp.Key, copy); - } - } - } - foreach (var emp in CommunicationChannels) - target.EncounteredEmpires.Add(emp); // not two way, you'll have to gift your own comms channels to the target to let them talk to you! - - // TODO - get max treaty clause happiness change and only apply that? - if (TreatyClauses.OfType().Any()) - { - var cs = TreatyClauses.OfType(); - if (cs.Any(c => c.AllianceLevel >= AllianceLevel.DefensivePact)) - Recipient.TriggerHappinessChange(hm => hm.TreatyMilitaryAlliance); - else if (cs.Any(c => c.AllianceLevel >= AllianceLevel.NonAggression)) - Recipient.TriggerHappinessChange(hm => hm.TreatyNonAggression); - else if (cs.Any(c => c.AllianceLevel >= AllianceLevel.NeutralZone)) - Recipient.TriggerHappinessChange(hm => hm.TreatyNonIntercourse); - } - if (TreatyClauses.OfType().Any()) - { - Recipient.TriggerHappinessChange(hm => hm.TreatyTradeAndResearch); - } - if (TreatyClauses.OfType().Any()) - { - Recipient.TriggerHappinessChange(hm => hm.TreatyTrade); - } - if (TreatyClauses.OfType().Any()) - { - Recipient.TriggerHappinessChange(hm => hm.TreatyProtectorateDominant); - Owner.TriggerHappinessChange(hm => hm.TreatyProtectorateSubordinate); - } - if (TreatyClauses.OfType().Any() - || TreatyClauses.OfType().Any() - || TreatyClauses.OfType().Any() - || TreatyClauses.OfType().Any()) - { - Recipient.TriggerHappinessChange(hm => hm.TreatyPartnership); - } - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization.Diplomacy.Clauses; +using FrEee.Objects.Space; +using FrEee.Utility; +using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using Tech = FrEee.Objects.Technology.Technology; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// A package of items that can be gifted or traded. + /// + public class Package : IOwnable, IPromotable + { + public Package(Empire owner, Empire recipient) + { + Owner = owner; + Recipient = recipient; + TreatyClauses = new HashSet(); + Planets = new GalaxyReferenceSet(); + Vehicles = new GalaxyReferenceSet(); + Resources = new ResourceQuantity(); + Technology = new ModReferenceKeyedDictionary(); + StarCharts = new GalaxyReferenceSet(); + CommunicationChannels = new GalaxyReferenceSet(); + } + + public GalaxyReferenceSet CommunicationChannels { get; private set; } + + /// + /// Errors due to the game settings restricting certain gifts/trades, + /// or the empire in question not actually owning the objects he is promising. + /// + public IEnumerable Errors + { + get + { + if (TreatyClauses.OfType().Count() > 1) + yield return "A treaty cannot contain more than one alliance clause per side."; + if (TreatyClauses.OfType().Count() > 1) + yield return "A treaty cannot contain more than one cooperative research clause per side."; + if (TreatyClauses.OfType().GroupBy(c => c.Resource).Any(g => g.Count() > 1)) + yield return "A treaty cannot contain more than free trade clause per resource per side."; + if (TreatyClauses.OfType().GroupBy(c => c.AbilityRule).Any(g => g.Count() > 1)) + yield return "A treaty cannot contain more than ability-sharing clause per ability per side."; + if (TreatyClauses.OfType().Count() > 1) + yield return "A treaty cannot contain more than one combat-log-sharing clause per side."; + if (TreatyClauses.OfType().Count() > 1) + yield return "A treaty cannot contain more than one design-sharing clause per side."; + if (TreatyClauses.OfType().Count() > 1) + yield return "A treaty cannot contain more than one vision-sharing clause per side."; + if (TreatyClauses.OfType().GroupBy(c => c.Resource).Any(g => g.Count() > 1)) + yield return "A treaty cannot contain more than tribute clause per resource per side."; + foreach (var p in Planets.Where(p => p.Owner != Owner)) + yield return "The " + Owner + " does not own " + p + "."; + foreach (var v in Vehicles.Where(v => v.Owner != Owner)) + yield return "The " + Owner + " does not own " + v + "."; + foreach (var u in Vehicles.OfType().Where(u => u.Container is ISpaceObject)) + yield return u + " cannot be traded because it is in the cargo of " + u.Container + "."; + if (Resources.Any(kvp => kvp.Value < 0)) + yield return "You cannot transfer a negative quantity of resources."; + if (Resources.Any(kvp => Owner.StoredResources[kvp.Key] < kvp.Value)) + yield return "The " + Owner + " does not have the specified quantity of resources."; + foreach (var kvp in Technology.Where(kvp => Owner.ResearchedTechnologies[kvp.Key] < kvp.Value)) + yield return "The " + Owner + " has not researched " + kvp.Key + " to level " + kvp.Value + "."; + foreach (var sys in StarCharts.Where(sys => !Owner.ExploredStarSystems.Contains(sys))) + yield return "The " + Owner + " has not explored " + sys + "."; + foreach (var emp in CommunicationChannels.Where(emp => !Owner.EncounteredEmpires.Contains(emp))) + yield return "The " + Owner + " has not encountered the " + emp + "."; + + // TODO - game setup restrictions on gifts/trades/treaties + } + } + + public bool IsEmpty + { + get + { + return !TreatyClauses.Any() && !Planets.Any() && !Vehicles.Any() && !Resources.Any(r => r.Value != 0) && !Technology.Any() && !StarCharts.Any() && !CommunicationChannels.Any(); + } + } + + /// + /// Is this a valid package? + /// + public bool IsValid + { + get + { + return !Errors.Any(); + } + } + + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + public GalaxyReferenceSet Planets { get; private set; } + + [DoNotSerialize] + public Empire Recipient { get { return recipient; } set { recipient = value; } } + + public ResourceQuantity Resources { get; private set; } + public GalaxyReferenceSet StarCharts { get; private set; } + public ModReferenceKeyedDictionary Technology { get; private set; } + public ISet TreatyClauses { get; private set; } + public GalaxyReferenceSet Vehicles { get; private set; } + + private GalaxyReference owner { get; set; } + private GalaxyReference recipient { get; set; } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + foreach (var clause in TreatyClauses) + clause.ReplaceClientIDs(idmap, done); + } + } + + public override string ToString() + { + var items = new List(); + if (TreatyClauses.Any()) + { + if (TreatyClauses.Count == 1) + items.Add(TreatyClauses.Single().ToString()); + else + items.Add(TreatyClauses.Count + " treaty clauses"); + } + if (Planets.Any()) + { + if (Planets.Count == 1) + items.Add(Planets.Single().ToString()); + else + items.Add(Planets.Count + " planets"); + } + if (Vehicles.Any()) + { + if (Vehicles.Count == 1) + items.Add(Vehicles.Single().ToString()); + else + items.Add(Vehicles.Count + " vehicles"); + } + if (Resources.Any(kvp => kvp.Value != 0)) + items.Add(Resources.ToString()); + if (Technology.Any()) + { + if (Technology.Count == 1) + { + var kvp = Technology.Single(); + items.Add(kvp.Key + " to level " + kvp.Value); + } + else + items.Add(Technology.Count + " technologies"); + } + if (StarCharts.Any()) + { + if (StarCharts.Count == 1) + items.Add("the star chart for " + StarCharts.Single().ToString()); + else + items.Add(StarCharts.Count + " star charts"); + } + if (CommunicationChannels.Any()) + { + if (CommunicationChannels.Count == 1) + items.Add("comm channels to " + CommunicationChannels.Single().ToString()); + else + items.Add(CommunicationChannels.Count + " comm channels"); + } + if (!items.Any()) + return "nothing"; + return string.Join(", ", items.ToArray()); + } + + /// + /// Transfers this package to a target empire. + /// + /// + public void Transfer(Empire target) + { + var errors = Errors.ToArray(); + if (errors.Any()) + throw new Exception("Attempting to transfer an invalid package (" + this + "): " + errors.First()); + foreach (var c in TreatyClauses) + Galaxy.Current.GetReferrable(c).IsInEffect = true; + foreach (var p in Planets) + p.Colony.Owner = target; + foreach (var v in Vehicles) + v.Owner = target; + Owner.StoredResources -= Resources; + target.StoredResources += Resources; + foreach (var kvp in Technology) + { + if (target.ResearchedTechnologies[kvp.Key] < kvp.Value) + { + // research the tech and reset progress to next level + target.ResearchedTechnologies[kvp.Key] = kvp.Value; + var progress = target.ResearchProgress.SingleOrDefault(p => p.Item == kvp.Key); + if (progress != null) + progress.Value = 0; + } + } + foreach (var sys in StarCharts) + { + foreach (var kvp in Owner.Memory) + { + // copy memory of system and everything in it + if (kvp.Value == sys || kvp.Value is ISpaceObject && ((ISpaceObject)kvp.Value).StarSystem == sys) + { + var copy = kvp.Value.CopyAndAssignNewID(); + target.Memory.Add(kvp.Key, copy); + } + } + } + foreach (var emp in CommunicationChannels) + target.EncounteredEmpires.Add(emp); // not two way, you'll have to gift your own comms channels to the target to let them talk to you! + + // TODO - get max treaty clause happiness change and only apply that? + if (TreatyClauses.OfType().Any()) + { + var cs = TreatyClauses.OfType(); + if (cs.Any(c => c.AllianceLevel >= AllianceLevel.DefensivePact)) + Recipient.TriggerHappinessChange(hm => hm.TreatyMilitaryAlliance); + else if (cs.Any(c => c.AllianceLevel >= AllianceLevel.NonAggression)) + Recipient.TriggerHappinessChange(hm => hm.TreatyNonAggression); + else if (cs.Any(c => c.AllianceLevel >= AllianceLevel.NeutralZone)) + Recipient.TriggerHappinessChange(hm => hm.TreatyNonIntercourse); + } + if (TreatyClauses.OfType().Any()) + { + Recipient.TriggerHappinessChange(hm => hm.TreatyTradeAndResearch); + } + if (TreatyClauses.OfType().Any()) + { + Recipient.TriggerHappinessChange(hm => hm.TreatyTrade); + } + if (TreatyClauses.OfType().Any()) + { + Recipient.TriggerHappinessChange(hm => hm.TreatyProtectorateDominant); + Owner.TriggerHappinessChange(hm => hm.TreatyProtectorateSubordinate); + } + if (TreatyClauses.OfType().Any() + || TreatyClauses.OfType().Any() + || TreatyClauses.OfType().Any() + || TreatyClauses.OfType().Any()) + { + Recipient.TriggerHappinessChange(hm => hm.TreatyPartnership); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/Proposal.cs b/FrEee/Objects/Civilization/Diplomacy/Proposal.cs similarity index 89% rename from FrEee/Game/Objects/Civilization/Diplomacy/Proposal.cs rename to FrEee/Objects/Civilization/Diplomacy/Proposal.cs index 1e532d3aa..7d16d22af 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/Proposal.cs +++ b/FrEee/Objects/Civilization/Diplomacy/Proposal.cs @@ -1,161 +1,161 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// A diplomatic proposal. - /// - public class Proposal : Command, IFoggable, IReferrable - { - public Proposal(Empire recipient) - : base(Empire.Current) - { - Timestamp = Galaxy.Current.TurnNumber; - Recipient = recipient; - } - - public string Description - { - get - { - if (IsNullOrEmpty(GivePackage) && IsNullOrEmpty(ReceivePackage)) - return "No Proposal"; - if (IsNullOrEmpty(GivePackage)) - return "Request " + ReceivePackage; - if (IsNullOrEmpty(ReceivePackage)) - return "Give " + GivePackage; - return "Trade " + GivePackage + " for " + ReceivePackage; - } - } - - /// - /// The package being given. - /// - public Package GivePackage { get; set; } - - public long ID - { - get; - set; - } - - public bool IsMemory - { - get; - set; - } - - /// - /// No fair accepting a gift twice! - /// - public bool IsResolved { get; set; } - - /// - /// Is this a tentative offer? - /// Tentative offers cannot be accepted; instead they must be countered. - /// - public bool IsTentative - { - get; - set; - } - - public Empire Owner - { - get { return Executor; } - } - - /// - /// The package being received in return. - /// - public Package ReceivePackage { get; set; } - - /// - /// The empire that the proposal is being sent to. - /// - [DoNotSerialize] - public Empire Recipient { get { return recipient; } set { recipient = value; } } - - public double Timestamp - { - get; - set; - } - - private GalaxyReference recipient { get; set; } - - public Visibility CheckVisibility(Empire emp) - { - // TODO - intel that can spy on or disrupt comms - if (emp == Owner) - return Visibility.Owned; - if (emp == Recipient) - return Visibility.Scanned; - return Visibility.Unknown; - } - - public void Dispose() - { - if (IsDisposed) - return; - Galaxy.Current.UnassignID(this); - } - - public override void Execute() - { - var errors = GivePackage.Errors.Concat(ReceivePackage.Errors); - if (errors.Any()) - { - Executor.Log.Add(Recipient.CreateLogMessage("We could not execute a trade with the " + Recipient + " because: " + errors.First(), LogMessages.LogMessageType.Error)); - Recipient.Log.Add(Executor.CreateLogMessage("We could not execute a trade with the " + Executor + " because: " + errors.First(), LogMessages.LogMessageType.Error)); - } - else - { - if (GivePackage != null) - GivePackage.Transfer(Recipient); - if (ReceivePackage != null) - ReceivePackage.Transfer(Executor); - } - } - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - public void Redact(Empire emp) - { - if (CheckVisibility(emp) < Visibility.Fogged) - Dispose(); - } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - base.ReplaceClientIDs(idmap, done); - if (!done.Contains(this)) - { - done.Add(this); - recipient.ReplaceClientIDs(idmap, done); - } - } - - public override string ToString() - { - return Description; - } - - private bool IsNullOrEmpty(Package package) - { - return package == null || package.IsEmpty; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Commands; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// A diplomatic proposal. + /// + public class Proposal : Command, IFoggable, IReferrable + { + public Proposal(Empire recipient) + : base(Empire.Current) + { + Timestamp = Galaxy.Current.TurnNumber; + Recipient = recipient; + } + + public string Description + { + get + { + if (IsNullOrEmpty(GivePackage) && IsNullOrEmpty(ReceivePackage)) + return "No Proposal"; + if (IsNullOrEmpty(GivePackage)) + return "Request " + ReceivePackage; + if (IsNullOrEmpty(ReceivePackage)) + return "Give " + GivePackage; + return "Trade " + GivePackage + " for " + ReceivePackage; + } + } + + /// + /// The package being given. + /// + public Package GivePackage { get; set; } + + public long ID + { + get; + set; + } + + public bool IsMemory + { + get; + set; + } + + /// + /// No fair accepting a gift twice! + /// + public bool IsResolved { get; set; } + + /// + /// Is this a tentative offer? + /// Tentative offers cannot be accepted; instead they must be countered. + /// + public bool IsTentative + { + get; + set; + } + + public Empire Owner + { + get { return Executor; } + } + + /// + /// The package being received in return. + /// + public Package ReceivePackage { get; set; } + + /// + /// The empire that the proposal is being sent to. + /// + [DoNotSerialize] + public Empire Recipient { get { return recipient; } set { recipient = value; } } + + public double Timestamp + { + get; + set; + } + + private GalaxyReference recipient { get; set; } + + public Visibility CheckVisibility(Empire emp) + { + // TODO - intel that can spy on or disrupt comms + if (emp == Owner) + return Visibility.Owned; + if (emp == Recipient) + return Visibility.Scanned; + return Visibility.Unknown; + } + + public void Dispose() + { + if (IsDisposed) + return; + Galaxy.Current.UnassignID(this); + } + + public override void Execute() + { + var errors = GivePackage.Errors.Concat(ReceivePackage.Errors); + if (errors.Any()) + { + Executor.Log.Add(Recipient.CreateLogMessage("We could not execute a trade with the " + Recipient + " because: " + errors.First(), LogMessages.LogMessageType.Error)); + Recipient.Log.Add(Executor.CreateLogMessage("We could not execute a trade with the " + Executor + " because: " + errors.First(), LogMessages.LogMessageType.Error)); + } + else + { + if (GivePackage != null) + GivePackage.Transfer(Recipient); + if (ReceivePackage != null) + ReceivePackage.Transfer(Executor); + } + } + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + public void Redact(Empire emp) + { + if (CheckVisibility(emp) < Visibility.Fogged) + Dispose(); + } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + base.ReplaceClientIDs(idmap, done); + if (!done.Contains(this)) + { + done.Add(this); + recipient.ReplaceClientIDs(idmap, done); + } + } + + public override string ToString() + { + return Description; + } + + private bool IsNullOrEmpty(Package package) + { + return package == null || package.IsEmpty; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/ProposalMessage.cs b/FrEee/Objects/Civilization/Diplomacy/ProposalMessage.cs similarity index 88% rename from FrEee/Game/Objects/Civilization/Diplomacy/ProposalMessage.cs rename to FrEee/Objects/Civilization/Diplomacy/ProposalMessage.cs index 8271cff74..b2289a90a 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/ProposalMessage.cs +++ b/FrEee/Objects/Civilization/Diplomacy/ProposalMessage.cs @@ -1,53 +1,53 @@ -using FrEee.Game.Interfaces; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// A message with a proposal that can be accepted or rejected. - /// - /// - public class ProposalMessage : Message - { - public ProposalMessage(Empire recipient) - : base(recipient) - { - if (Recipient == Owner) - throw new Exception("You can't send a diplomatic proposal to yourself!"); - Proposal = new Proposal(recipient); - } - - public override IEnumerable IconPaths - { - get - { - return Proposal.Owner.IconPaths; - } - } - - public override IEnumerable PortraitPaths - { - get - { - return Proposal.Owner.PortraitPaths; - } - } - - /// - /// The proposal in question. - /// - public Proposal Proposal { get; set; } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - Proposal.ReplaceClientIDs(idmap, done); - } - } - } +using FrEee.Interfaces; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// A message with a proposal that can be accepted or rejected. + /// + /// + public class ProposalMessage : Message + { + public ProposalMessage(Empire recipient) + : base(recipient) + { + if (Recipient == Owner) + throw new Exception("You can't send a diplomatic proposal to yourself!"); + Proposal = new Proposal(recipient); + } + + public override IEnumerable IconPaths + { + get + { + return Proposal.Owner.IconPaths; + } + } + + public override IEnumerable PortraitPaths + { + get + { + return Proposal.Owner.PortraitPaths; + } + } + + /// + /// The proposal in question. + /// + public Proposal Proposal { get; set; } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + Proposal.ReplaceClientIDs(idmap, done); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Diplomacy/RejectProposalAction.cs b/FrEee/Objects/Civilization/Diplomacy/RejectProposalAction.cs similarity index 87% rename from FrEee/Game/Objects/Civilization/Diplomacy/RejectProposalAction.cs rename to FrEee/Objects/Civilization/Diplomacy/RejectProposalAction.cs index ba1b4520a..fb4a1ea6e 100644 --- a/FrEee/Game/Objects/Civilization/Diplomacy/RejectProposalAction.cs +++ b/FrEee/Objects/Civilization/Diplomacy/RejectProposalAction.cs @@ -1,53 +1,53 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Civilization.Diplomacy -{ - /// - /// An action that rejects a proposal. - /// - /// - public class RejectProposalAction : Action - { - public RejectProposalAction(Proposal proposal) - : base(proposal.Executor) - { - Proposal = proposal; - } - - public override string Description - { - get { return "Reject " + Proposal; } - } - - /// - /// The proposal in question. - /// - [DoNotSerialize] - public Proposal Proposal { get { return proposal; } set { proposal = value; } } - - private GalaxyReference proposal { get; set; } - - public override void Execute() - { - if (Proposal.IsResolved) - Executor.Log.Add(Target.CreateLogMessage("The proposal \"" + Proposal + "\" has already been resolved and cannot be rejected now.", LogMessages.LogMessageType.Error)); - else - Target.Log.Add(Executor.CreateLogMessage("The " + Executor + " has rejected our proposal (" + Proposal + ").", LogMessages.LogMessageType.Diplomacy)); - } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - base.ReplaceClientIDs(idmap, done); - if (!done.Contains(this)) - { - done.Add(this); - proposal.ReplaceClientIDs(idmap, done); - } - } - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; + +namespace FrEee.Objects.Civilization.Diplomacy +{ + /// + /// An action that rejects a proposal. + /// + /// + public class RejectProposalAction : Action + { + public RejectProposalAction(Proposal proposal) + : base(proposal.Executor) + { + Proposal = proposal; + } + + public override string Description + { + get { return "Reject " + Proposal; } + } + + /// + /// The proposal in question. + /// + [DoNotSerialize] + public Proposal Proposal { get { return proposal; } set { proposal = value; } } + + private GalaxyReference proposal { get; set; } + + public override void Execute() + { + if (Proposal.IsResolved) + Executor.Log.Add(Target.CreateLogMessage("The proposal \"" + Proposal + "\" has already been resolved and cannot be rejected now.", LogMessages.LogMessageType.Error)); + else + Target.Log.Add(Executor.CreateLogMessage("The " + Executor + " has rejected our proposal (" + Proposal + ").", LogMessages.LogMessageType.Diplomacy)); + } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + base.ReplaceClientIDs(idmap, done); + if (!done.Contains(this)) + { + done.Add(this); + proposal.ReplaceClientIDs(idmap, done); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Empire.cs b/FrEee/Objects/Civilization/Empire.cs similarity index 95% rename from FrEee/Game/Objects/Civilization/Empire.cs rename to FrEee/Objects/Civilization/Empire.cs index 52d17cc4a..234121bf9 100644 --- a/FrEee/Game/Objects/Civilization/Empire.cs +++ b/FrEee/Objects/Civilization/Empire.cs @@ -1,1407 +1,1408 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.AI; -using FrEee.Game.Objects.Civilization.Diplomacy.Clauses; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Modding.Loaders; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Reflection; -using Tech = FrEee.Game.Objects.Technology.Technology; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// An empire attempting to rule the galaxy. - /// - [Serializable] - public class Empire : INamed, IFoggable, IAbilityObject, IPictorial, IComparable, IComparable, IFormulaHost, IReferrable - { - public Empire() - { - StoredResources = new ResourceQuantity(); - IntrinsicResourceStorage = new ResourceQuantity(); - Commands = new List(); - KnownDesigns = new HashSet(); - Log = new List(); - ResearchedTechnologies = new ModReferenceKeyedDictionary(); - AccumulatedResearch = new ModReferenceKeyedDictionary(); - ResearchSpending = new ModReferenceKeyedDictionary(); - ResearchQueue = new ModReferenceList(); - UniqueTechsFound = new List(); - Memory = new SafeDictionary(); - AINotes = new DynamicDictionary(); - PlayerNotes = new SafeDictionary, string>(); - PrivateNames = new SafeDictionary, string>(); - EncounteredEmpires = new HashSet(); - EncounteredEmpires.Add(this); - IncomingMessages = new HashSet(); - SentMessages = new HashSet(); - Waypoints = new List(); - NumberedWaypoints = new Waypoint[10]; - Scores = new SafeDictionary(); - EnabledMinisters = new SafeDictionary>(); - } - - /// - /// The current empire being controlled by the player. - /// - public static Empire Current - { - get - { - if (Galaxy.Current == null) - return null; - return Galaxy.Current.CurrentEmpire; - } - } - - /// - /// Information about the player controlling this empire. - /// - public PlayerInfo PlayerInfo { get; set; } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.Empire; } - } - - /// - /// Accumulated research points. - /// - public ModReferenceKeyedDictionary AccumulatedResearch - { - get; - private set; - } - - /// - /// The AI which controls the behavior of empires of this race. - /// - [DoNotSerialize] - public AI AI { get { return ai; } set { ai = value; } } - - /// - /// Arbitrary data stored by the AI to maintain state between turns. - /// - public DynamicDictionary AINotes { get; internal set; } - - /// - /// The names of any ministers that are enabled, keyed by category. - /// - public SafeDictionary> EnabledMinisters { get; set; } - - // HACK - we are loading up the Galaxy Seen ability way too many times during pathfinding and this is slowing it down massively. - // yes, this means that an empire gaining/losing this ability would have to wait until the next turn to actually gain or lose it - // but this is the easiest way I can think of to fix pathfinding and this is a rather edge case. - private bool? allSystemsExploredFromStart = null; - - /// - /// Should we have a sensor sweep of the entire galaxy from the very start? - /// - public bool AllSystemsExploredFromStart - { - get - { - if (allSystemsExploredFromStart is null) - allSystemsExploredFromStart = Galaxy.Current.AllSystemsExploredFromStart || this.HasAbility("Galaxy Seen"); - return allSystemsExploredFromStart.Value; - } - } - - /// - /// Technologies which are available for research. - /// - public IEnumerable AvailableTechnologies - { - get - { - return Mod.Current.Technologies.Where( - t => HasUnlocked(t) && ResearchedTechnologies[t] < t.MaximumLevel); - } - } - - /// - /// Bonus research available to spend this turn only. - /// - public int BonusResearch { get; set; } - - public IEnumerable Children - { - get - { - return OwnedSpaceObjects.Cast().Append(PrimaryRace); - } - } - - /// - /// Planets colonized by the empire. - /// - public IEnumerable ColonizedPlanets - { - get - { - return Galaxy.Current.StarSystemLocations.Select(ssl => ssl.Item).SelectMany(ss => ss.FindSpaceObjects(p => p.Owner == this && !p.IsMemoryOfKnownObject())); - } - } - - public ResourceQuantity ColonyIncome - { - get - { - // shouldn't change except at turn processing... - if (colonyIncome == null || Empire.Current == null) - { - colonyIncome = ColonizedPlanets.Sum(p => p.GrossIncome()); - } - - return colonyIncome; - } - } - - /// - /// The color used to represent this empire's star systems on the galaxy map. - /// - public Color Color { get; set; } - - /// - /// Commands issued by the player this turn. - /// - public IList Commands { get; private set; } - - /// - /// All construction queues owned by this empire. - /// - public IEnumerable ConstructionQueues - { - get - { - return Galaxy.Current.Referrables.OfType().Where(q => q.Owner == this && q.Container.Sector != null && q.Rate.Any(kvp => kvp.Value > 0)); - } - } - - /// - /// Spending on construction this turn. - /// - public ResourceQuantity ConstructionSpending - { - get - { - return ConstructionQueues.Sum(q => q.UpcomingSpending); - } - } - - /// - /// The empire's culture. - /// - [DoNotSerialize] - public Culture Culture { get { return culture; } set { culture = value; } } - - /// - /// Any empires that this empire has encountered. - /// - [DoNotCopy] - public ISet EncounteredEmpires { get; private set; } - - /// - /// Finds star systems explored by the empire. - /// - public IEnumerable ExploredStarSystems - { - get { return Galaxy.Current.StarSystemLocations.Select(ssl => ssl.Item).Where(sys => sys.ExploredByEmpires.Contains(this)); } - } - - /// - /// Any treaty clauses this empire is offering to other empires. - /// - public ILookup GivenTreatyClauses - { - get - { - if (Galaxy.Current.GivenTreatyClauseCache == null) - Galaxy.Current.GivenTreatyClauseCache = new SafeDictionary>(); - if (!Galaxy.Current.GivenTreatyClauseCache.ContainsKey(this)) - Galaxy.Current.GivenTreatyClauseCache.Add(this, Galaxy.Current.Referrables.OfType().Where(c => c.Giver == this && c.IsInEffect).ToLookup(c => c.Receiver)); - return Galaxy.Current.GivenTreatyClauseCache[this]; - } - } - - /// - /// The empire's basic resource income from mining and the like, not including maintenance costs or trade/tributes. - /// - /// - /// - public ResourceQuantity GrossDomesticIncome - { - get - { - // shouldn't change except at turn processing... - if (grossDomesticIncome == null || Empire.Current == null) - { - grossDomesticIncome = ColonyIncome + RemoteMiningIncome + RawResourceIncome; - - if (this != Empire.Current) - { - // estimate income of foreign empires based on trade income we earn from them - var clauses = this.GivenTreatyClauses.Flatten().OfType().Where(c => c.Receiver == Empire.Current).GroupBy(c => c.Resource); - foreach (var g in clauses) - { - var resource = g.Key; - var clause = g.First(); - grossDomesticIncome[resource] = (int)(clause.Amount / clause.TradePercentage * 100); - } - } - } - return grossDomesticIncome; - } - } - - /// - /// The insignia icon for this empire. - /// - public Image Icon - { - get { return Pictures.GetIcon(this); } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - foreach (var x in GetImagePaths(InsigniaName, "Insignia")) - yield return x; - - // fall back on leader portrait - foreach (var x in GetImagePaths(LeaderPortraitName, "Race_Portrait")) - yield return x; - } - } - - public long ID - { - get; - set; - } - - /// - /// Incoming messages that are awaiting a response. - /// - public ICollection IncomingMessages { get; private set; } - - /// - /// The name of the insignia picture file, relative to Pictures/Insignia. - /// - public string InsigniaName { get; set; } - - /// - /// Empires don't have intrinsic abilities. - /// - public IEnumerable IntrinsicAbilities - { - get { yield break; } - } - - /// - /// Intrinsic resource storage capacity of this empire (without components, facilities, etc. that provide the abilities). - /// - public ResourceQuantity IntrinsicResourceStorage { get; private set; } - - /// - /// Is this empire defeated? - /// An empire is defeated when it no longer controls any space objects. - /// - public bool IsDefeated - { - get - { - return !OwnedSpaceObjects.Any(sobj => !sobj.IsDisposed); - } - } - - public bool IsDisposed { get; set; } - - public bool IsMemory - { - get; - set; - } - - /// - /// Is this a minor empire? Minor empires cannot use warp points. - /// - public bool IsMinorEmpire { get; set; } - - /// - /// Is this empire controlled by a human player? - /// - public bool IsPlayerEmpire { get; set; } - - /// - /// Designs known by this empire. - /// - public ICollection KnownDesigns { get; private set; } - - /// - /// The name and/or title of the leader of the empire. - /// - public string LeaderName { get; set; } - - /// - /// The name of the leader's image file, relative to Pictures/Leaders. - /// - public string LeaderPortraitName { get; set; } - - /// - /// Empire history log. - /// - public IList Log { get; set; } - - /// - /// Resources the empire spends on maintenance. - /// - public ResourceQuantity Maintenance - { - get - { - // shouldn't change except at turn processing... - // TODO - facility/unit maintenance? - if (maintenance == null || Empire.Current == null) - maintenance = OwnedSpaceObjects.OfType().Sum(v => v.MaintenanceCost); - return maintenance; - } - } - - /// - /// Information about any foggable objects that this empire has previously seen but cannot currently see. - /// - public SafeDictionary Memory { get; private set; } - - /// - /// The name of the empire. - /// - public string Name { get; set; } - - /// - /// Gross income less maintenance. - /// TODO - should we include tributes here? - /// - public ResourceQuantity NetIncome - { - get { return GrossDomesticIncome - Maintenance; } - } - - /// - /// Net income less construction spending. - /// - public ResourceQuantity NetIncomeLessConstruction - { - get - { - return NetIncome - ConstructionSpending; - } - } - - /// - /// Numbered waypoints that are on hotkeys. - /// - public Waypoint[] NumberedWaypoints { get; private set; } - - public IEnumerable OwnedSpaceObjects - { - get - { - return Galaxy.Current.FindSpaceObjects(sobj => sobj.Owner == this); - } - } - - /// - /// Empires don't really have owners... - /// They could be said to own themselves but it makes more sense for referencing purposes to have no owner. - /// - public Empire Owner - { - get { return null; } - } - - public IEnumerable Parents - { - get - { - yield break; - } - } - - /// - /// Notes set by the player on various game objects. - /// - public SafeDictionary, string> PlayerNotes { get; private set; } - - /// - /// The leader portrait for this empire. - /// - public Image Portrait - { - get { return Pictures.GetPortrait(this); } - } - - public IEnumerable PortraitPaths - { - get - { - foreach (var x in GetImagePaths(LeaderPortraitName, "Race_Portrait")) - yield return x; - - // fall back on population icon - foreach (var x in PrimaryRace.IconPaths) - yield return x; - } - } - - /// - /// The native race of this empire. - /// - public Race PrimaryRace { get; set; } - - /// - /// Privately visible names set by the player on various game objects. - /// - public SafeDictionary, string> PrivateNames { get; private set; } - - /// - /// Income via raw resource generation ("Generate Points") abilities (not standard or remote mining, or standard point generation). - /// - public ResourceQuantity RawResourceIncome - { - get - { - // shouldn't change except at turn processing... - if (rawResourceIncome == null || Empire.Current == null) - { - rawResourceIncome = new ResourceQuantity(); - foreach (var sobj in Galaxy.Current.FindSpaceObjects().BelongingTo(this)) - rawResourceIncome += sobj.RawResourceIncome(); - } - return rawResourceIncome; - } - } - - /// - /// Any treaty clauses this empire is receiving from other empires. - /// - public ILookup ReceivedTreatyClauses - { - get - { - if (Galaxy.Current.ReceivedTreatyClauseCache == null) - Galaxy.Current.ReceivedTreatyClauseCache = new SafeDictionary>(); - if (!Galaxy.Current.ReceivedTreatyClauseCache.ContainsKey(this)) - Galaxy.Current.ReceivedTreatyClauseCache.Add(this, Galaxy.Current.Referrables.OfType().Where(c => c.Receiver == this && c.IsInEffect).ToLookup(c => c.Giver)); - return Galaxy.Current.ReceivedTreatyClauseCache[this]; - } - } - - public IDictionary<(ISpaceObject Miner, IMineableSpaceObject Target), ResourceQuantity> RemoteMiners - { - // TODO - limit each miner to mining only the best planet/asteroid in each resource, not all of them? - get - { - // shouldn't change except at turn processing... - if (remoteMiners == null || Empire.Current == null) - { - remoteMiners = new SafeDictionary<(ISpaceObject, IMineableSpaceObject), ResourceQuantity>(true); - foreach (var miner in Galaxy.Current.FindSpaceObjects().BelongingTo(this)) - { - if (miner.Sector == null) - continue; // HACK - shouldn't FindSpaceObjects only be finding objects with sectors? - // only unowned planets and asteroids can be mined - foreach (var sobj in miner.Sector.SpaceObjects.OfType().Unowned()) - { - foreach (var resource in Resource.All) - { - // TODO - remote mining of supplies/research/intel? just need abilities for them ;) well, and values... - var rule = Mod.Current.AbilityRules.SingleOrDefault(r => r.Matches("Remote Resource Generation - " + resource)); - if (rule != null) - { - var amount = miner.GetAbilityValue(rule.Name).ToInt(); - int modifier = 100; - if (resource.Aptitude != null) - modifier = miner.Owner.PrimaryRace.Aptitudes[resource.Aptitude.Name]; - var income = amount * sobj.ResourceValue[resource] * modifier / 100 / 100; - var sectorEmpire = Tuple.Create(miner.Sector, miner.Owner); - - // only one vehicle per empire can mine a sector in any given resource - // but we get the one with the most mining ability :) - var best = remoteMiners.Keys.Where(k => k.Item1.Sector == miner.Sector).WithMax(k => remoteMiners[k]).FirstOrDefault(); - if (best.Item1 == null || best.Item2 == null) - { - lock (remoteMiners) - { - // HACK - why is a SafeDictionary throwing exceptions when I spawn a new key?! - if (!remoteMiners.ContainsKey((miner, sobj))) - remoteMiners.Add((miner, sobj), income * resource); - else - remoteMiners[(miner, sobj)][resource] = income; - } - } - else if (income > remoteMiners[best][resource]) - remoteMiners[(miner, sobj)][resource] = income; - } - } - } - } - } - return remoteMiners; - } - } - - public ResourceQuantity RemoteMiningIncome - { - get - { - // shouldn't change except at turn processing... - if (remoteMiningIncome == null || Empire.Current == null) - remoteMiningIncome = RemoteMiners.Sum(kvp => kvp.Value); - return remoteMiningIncome; - } - } - - public ResearchCommand ResearchCommand - { - get - { - return Commands.OfType().SingleOrDefault(); - } - set - { - Commands.Remove(ResearchCommand); - Commands.Add(value); - } - } - - /// - /// Technologies that have been researched by this empire and the levels they have been researched to. - /// - public ModReferenceKeyedDictionary ResearchedTechnologies - { - get; - internal set; - } - - /// - /// Progress towards completing next levels of techs. - /// - public IEnumerable> ResearchProgress - { - get - { - if (researchProgress == null) - { - ComputeResearchProgress(); - } - return researchProgress; - } - } - - /// - /// Queue for unallocated research spending. - /// - public IList ResearchQueue - { - get; - private set; - } - - /// - /// Research spending as a percentage of budget. - /// - public ModReferenceKeyedDictionary ResearchSpending - { - get; - private set; - } - - /// - /// Resource storage capacity of this empire. - /// - public ResourceQuantity ResourceStorage - { - get - { - var r = new ResourceQuantity(); - r += IntrinsicResourceStorage; - foreach (var sobj in OwnedSpaceObjects) - { - foreach (var res in Resource.All.Where(res => res.IsGlobal)) - r.Add(res, sobj.GetAbilityValue("Resource Storage - " + res.Name).ToInt()); - } - return r; - } - } - - /// - /// The last known score of this empire. - /// - public int? Score - { - get - { - int? s = null; - for (var x = Galaxy.Current.TurnNumber; x >= 0 && s == null; x--) - { - s = GetScoreAtTurn(x); - } - return s; - } - } - - /// - /// The score of this empire over time. - /// If the score is supposed to be unknown to a player, it will be null. - /// - public SafeDictionary Scores { get; private set; } - - /// - /// Messages sent by this empire. - /// - public ICollection SentMessages { get; private set; } - - /// - /// The name of the shipset, relative to Pictures/Shipsets. - /// - public string ShipsetPath { get; set; } - - /// - /// The resources stored by the empire. - /// - public ResourceQuantity StoredResources { get; set; } - - public double Timestamp - { - get; - set; - } - - /// - /// The empire's resource income from free trade treaties with other empires. - /// - /// - /// - public ResourceQuantity TradeIncome - { - get - { - // shouldn't change except at turn processing... - if (tradeIncome == null || Empire.Current == null) - { - tradeIncome = ReceivedTreatyClauses.Flatten().OfType().Sum(c => c.Amount * c.Resource); - } - return tradeIncome; - } - } - - /// - /// The empire's research priorities for this turn. - /// - /// - /// Unique techs that this empire has found from ruins. - /// - public ICollection UniqueTechsFound - { - get; - private set; - } - - /// - /// Unlocked items such as component and facility templates. - /// - [DoNotSerialize] - public IEnumerable UnlockedItems - { - get - { - if (unlockedItems == null) - RefreshUnlockedItems(); - return unlockedItems; - } - } - - public IDictionary Variables - { - get - { - // let scripters refer to empire as empire, not just as host, because host would be confusing - return new Dictionary - { - {"empire", this} - }; - } - } - - /// - /// Waypoints set by this empire. - /// - public IList Waypoints { get; private set; } - - private ModReference> ai { get; set; } - private ModReference culture { get; set; } - private ResourceQuantity colonyIncome; - - private ResourceQuantity grossDomesticIncome; - - private ResourceQuantity maintenance; - - private ResourceQuantity rawResourceIncome; - - private IDictionary<(ISpaceObject, IMineableSpaceObject), ResourceQuantity> remoteMiners; - private ResourceQuantity remoteMiningIncome; - - private ModProgress[] researchProgress; - private ResourceQuantity tradeIncome; - - private IList unlockedItems; - - /// - /// Belays (cancels) an order. - /// - /// - /// - /// - public void BelayOrder(T target, IOrder order) - where T : IOrderable - { - target.RemoveOrder(order); - var cmd = new RemoveOrderCommand(target, order); - Commands.Add(cmd); - } - - /// - /// Can this empire colonize a planet? - /// - /// - public bool CanColonize(Planet planet) - { - return UnlockedItems.OfType().Any(c => c.HasAbility(planet.ColonizationAbilityName)); - } - - public bool CanScan(IFoggable o) - { - if (o is ISpaceObject sobj) - return sobj.HasVisibility(this, Visibility.Scanned); - return o.CheckVisibility(this) >= Visibility.Scanned; - } - - public bool CanSee(IFoggable o) - { - if (o is ISpaceObject sobj) - return sobj.HasVisibility(this, Visibility.Visible); - return o.CheckVisibility(this) >= Visibility.Visible; - } - - public bool CheckUnlockStatus(IUnlockable item) - { - if (item == null) - return true; - if (item is IFoggable && (item as IFoggable).CheckVisibility(this) < Visibility.Fogged) - return false; // can't have unlocked something you haven't seen - // TODO - racial/unique tech should just be requirements - if (item is Tech && ((Tech)item).IsRacial && !this.Abilities().Any(a => a.Rule != null && a.Rule.Matches("Tech Area") && a.Value1 == ((Tech)item).RacialTechID)) - return false; // racial tech that this empire doesn't have the trait for - if (item is Tech && ((Tech)item).IsUnique && !this.UniqueTechsFound.Any(t => t == ((Tech)item).UniqueTechID)) - return false; // unique tech that this empire hasn't discovered - return item.UnlockRequirements.All(r => r.IsMetBy(this)); - } - - public Visibility CheckVisibility(Empire emp) - { - if (emp == this) - return Visibility.Owned; - else if (emp.EncounteredEmpires.Contains(this)) - return Visibility.Scanned; - else - return Visibility.Unknown; - } - - public int CompareTo(Empire other) - { - return Name.CompareTo(other.Name); - } - - public int CompareTo(object obj) - { - return Name.CompareTo(obj.ToString()); - } - - /// - /// Recomputes the empire's research progress stats. - /// Call this when you modify the research spending priorities or the research queue. - /// - public void ComputeResearchProgress() - { - var totalRP = NetIncome[Resource.Research] + BonusResearch; - researchProgress = AvailableTechnologies.Select(t => GetResearchProgress(t, ResearchedTechnologies[t] + 1, totalRP)).ToArray(); - } - - /// - /// Computes the score of this empire. - /// - /// The empire viewing this empire's score, or null for the host view. If the score isn't meant to be visible, it will be set to null. - public int? ComputeScore(Empire viewer) - { - // can we see it? - // TODO - rankings too, not just scores - var disp = Galaxy.Current.ScoreDisplay; - bool showit = false; - if (viewer == null) - showit = true; // host can see everyone's scores - else if (viewer == this) - showit = true; // can always see your own score - else if (viewer.IsAllyOf(this, null) && disp.HasFlag(ScoreDisplay.AlliesOnlyNoRankings)) - showit = true; // see allies' score if ally score flag enabled - else if (disp.HasFlag(ScoreDisplay.All)) - showit = true; // see all players' score if all score flag enabled - if (showit == false) - return null; // can't see score - - // OK, we can see it, now compute the score - // TODO - moddable score weightings - int score = 0; - score += Galaxy.Current.Referrables.OfType().OwnedBy(this).Sum(v => v.Cost.Sum(kvp => kvp.Value)); // vehicle cost - score += ColonizedPlanets.SelectMany(p => p.Colony.Facilities).Sum(f => f.Cost.Sum(kvp => kvp.Value)); // facility cost - foreach (var kvp in ResearchedTechnologies) - { - // researched tech cost - for (var level = 1; level <= kvp.Value; level++) - score += kvp.Key.GetBaseLevelCost(level); - } - // TODO - count population toward score? - return score; - } - - public void Dispose() - { - if (IsDisposed) - return; - Galaxy.Current.UnassignID(this); - if (Galaxy.Current.Empires.Contains(this)) - Galaxy.Current.Empires[Galaxy.Current.Empires.IndexOf(this)] = null; - foreach (var x in OwnedSpaceObjects.OfType().ToArray()) - x.Dispose(); - foreach (var x in ColonizedPlanets.ToArray()) - x.Colony.Dispose(); - } - - /// - /// Gets the relations of this empire toward another empire in a particular system. - /// Note that relations are not necessarily mutual! - /// You should use IsEnemyOf when determining if combat can take place, not this function, - /// because you'd want to make sure if *either* empire is hostile to the other. - /// - /// - /// - /// - public Relations GetRelations(Empire other, StarSystem sys) - { - if (other == null) - return Relations.Unknown; - if (this == other) - return Relations.Self; - if (!EncounteredEmpires.Contains(other)) - return Relations.Unknown; - var alliance = GivenTreatyClauses[other].OfType().MaxOrDefault(c => c.AllianceLevel); - if (alliance >= AllianceLevel.NonAggression) - return Relations.Allied; - if (alliance >= AllianceLevel.NeutralZone) - { - if (sys == null) - return Relations.Hostile; // assume hostility if unknown system - - // if we own a planet, we can defend it - return sys.FindSpaceObjects().Any(p => p.Owner == this) ? Relations.Hostile : Relations.Allied; - } - return Relations.Hostile; // TODO - require a declared war status of some sort, otherwise return neutral? - } - - public ModProgress GetResearchProgress(Tech tech, int level) - { - var totalRP = NetIncome[Resource.Research] + BonusResearch; - return GetResearchProgress(tech, level, totalRP); - } - - /// - /// Gets the empire's score at a specific turn, or null if the score is unknown. - /// - /// - /// - public int? GetScoreAtTurn(int turn) - { - if (!Scores.ContainsKey(turn)) - return null; - return Scores[turn]; - } - - /// - /// Gets all the clauses in a treaty with another empire. - /// - /// - /// - public IEnumerable GetTreaty(Empire emp) - { - return GivenTreatyClauses[emp].Union(ReceivedTreatyClauses[emp]); - } - - public bool HasExplored(StarSystem starSystem) - { - if (starSystem == null) - return false; - return starSystem.ExploredByEmpires.Contains(this); - } - - public bool HasSeen(IFoggable o) - { - return o.CheckVisibility(this) >= Visibility.Fogged; - } - - /// - /// Determines if something has been unlocked in the tech tree. - /// - /// - /// - public bool HasUnlocked(IUnlockable item) - { - return CheckUnlockStatus(item); - // TODO - fix caching of unlock status - // return item == null || UnlockedItems.Contains(item); - } - - /// - /// Returns true if both empires are allied to each other in the star system. - /// - /// - /// - public bool IsAllyOf(Empire other, StarSystem sys) - { - if (other == null) - return false; // can't be allied to nobody/host - return GetRelations(other, sys) == Relations.Allied && other.GetRelations(this, sys) == Relations.Allied; - } - - /// - /// Returns true if either empire is hostile to the other. - /// - /// - /// - public bool IsEnemyOf(Empire other, StarSystem sys) - { - if (other == null) - return false; // can't be hostile to nobody/host - return GetRelations(other, sys) == Relations.Hostile || other.GetRelations(this, sys) == Relations.Hostile; - } - - /// - /// Returns true if empires are not the same, and are neither allies nor at war. - /// - /// - /// - public bool IsNeutralTo(Empire other, StarSystem sys) - { - return this != other && !IsAllyOf(other, sys) && !IsEnemyOf(other, sys); - } - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - /// - /// Issues an order to an object. - /// - /// - /// - /// - public void IssueOrder(T target, IOrder order) - where T : IOrderable - { - target.AddOrder(order); - var cmd = new AddOrderCommand(target, order); - Commands.Add(cmd); - } - - public void NormalizeStoredResources() - { - foreach (var r in Resource.All) - { - if (StoredResources[r] > ResourceStorage[r]) - StoredResources[r] = ResourceStorage[r]; - if (StoredResources[r] < 0) - StoredResources[r] = 0; - } - } - - public bool Owns(IFoggable o) - { - return o.CheckVisibility(this) >= Visibility.Owned; - } - - /// - /// Gets the memory of an object. - /// - /// - /// - /// - public T Recall(T obj) where T : IFoggable, IReferrable - { - if (obj.IsMemory) - return obj; - return (T)Memory[obj.ID]; - } - - public void RecordLog(string text, LogMessageType logMessageType) - { - Log.Add(new GenericLogMessage(text, logMessageType)); - } - - public void RecordLog(object context, string text, LogMessageType logMessageType) - { - if (context is IPictorial) - Log.Add((context as IPictorial).CreateLogMessage(text, logMessageType)); - else - RecordLog(text, logMessageType); - } - - public void Redact(Empire emp) - { - // clear data about other empires - var vis = CheckVisibility(emp); - if (vis < Visibility.Owned) - { - // TODO - espionage - StoredResources.Clear(); - KnownDesigns.DisposeAll(d => !emp.KnownDesigns.Contains(d)); - KnownDesigns.Clear(); - Log.Clear(); - ResearchedTechnologies.Clear(); - AccumulatedResearch.Clear(); - ResearchQueue.Clear(); - ResearchSpending.Clear(); - Memory.Values.DisposeAll(); - Memory.Clear(); - AINotes.Clear(); - PlayerNotes.Clear(); - } - - // TODO - show count of encountered vehicles - foreach (var d in KnownDesigns.Where(d => d.Owner != emp)) - d.VehiclesBuilt = 0; - - // eliminate memories of objects that are actually visible - foreach (var kvp in Memory.ToArray()) - { - var original = (IFoggable)Galaxy.Current.GetReferrable(kvp.Key); - if (original != null && original.CheckVisibility(emp) >= Visibility.Visible) - { - kvp.Value.Dispose(); - Memory.Remove(kvp); - } - } - - if (vis < Visibility.Fogged) - Dispose(); - } - - public void RefreshUnlockedItem(IUnlockable u) - { - if (CheckUnlockStatus(u)) - unlockedItems.Add(u); - else - unlockedItems.Remove(u); - } - - public void RefreshUnlockedItems() - { - unlockedItems = new List( - Mod.Current.Objects.OfType() - .Union(Galaxy.Current.Referrables.OfType()) - .Where(r => CheckUnlockStatus(r))); - } - - /// - /// Spends research points on a technology. - /// - /// - /// - /// Number of levels completed - public int Research(Technology.Technology tech, int points) - { - var oldlvl = ResearchedTechnologies[tech]; - AccumulatedResearch[tech] += points; - var newStuff = new List(); - int advanced = 0; - while (AccumulatedResearch[tech] >= tech.GetNextLevelCost(this) && ResearchedTechnologies[tech] < tech.MaximumLevel) - { - // advanced a level! - advanced++; - AccumulatedResearch[tech] -= tech.GetNextLevelCost(this); - newStuff.AddRange(tech.GetExpectedResults(this)); - ResearchedTechnologies[tech]++; - } - if (ResearchedTechnologies[tech] > oldlvl) - Log.Add(tech.CreateLogMessage("We have advanced from level " + oldlvl + " to level " + ResearchedTechnologies[tech] + " in " + tech + "!", LogMessageType.ResearchComplete)); - foreach (var item in newStuff) - Log.Add(item.CreateLogMessage("We have unlocked a new " + item.ResearchGroup.ToLower() + ", the " + item + "!", LogMessageType.ResearchComplete)); - - // if it was in the queue and we advanced a level, remove the first instance (for each level advanced) - for (int i = 0; i < advanced; i++) - ResearchQueue.Remove(tech); - - // if tech is maxed out, remove all instances from queue and clear spending on it - if (ResearchedTechnologies[tech] == tech.MaximumLevel) - { - while (ResearchQueue.Contains(tech)) - ResearchQueue.Remove(tech); - ResearchSpending[tech] = 0; - } - - // if we advanced, recheck unlocks - if (advanced > 0) - RefreshUnlockedItems(); - - // tell caller how much we advanced - return advanced; - } - - public override string ToString() - { - return Name; - } - - /// - /// Updates the memory sight cache for an object. - /// This should only be called when this empire SEES the object's state change, - /// or the player decides to delete a sensor ghost. - /// - /// - public void UpdateMemory(T obj) where T : IFoggable, IOwnable, IReferrable - { - if (obj.IsMemory) - throw new InvalidOperationException("Call UpdateMemory for the physical object, not the memory."); - - // TODO - what happens if a ship/planet is captured by this empire? Then it needs to be updated... - if (obj.Owner == this) - return; // don't need to update empire's memory of its own objects! - - // encounter empire if not yet encountered - if (obj.Owner != null && !EncounteredEmpires.Contains(obj.Owner)) - { - // not two way encounter if ship is cloaked! - // in that case you will need to gift your own comms channels to that empire - // if you want them to be able to message you apart from replying to your messages - EncounteredEmpires.Add(obj.Owner); - Log.Add(obj.Owner.CreateLogMessage("We have encountered a new empire, the " + obj.Owner + ".", LogMessageType.Generic)); - } - - if (obj.ID > 0) - { - // object exists, update cache with the data - if (Memory[obj.ID] != null) - { - obj.CopyToExceptID((T)Memory[obj.ID], IDCopyBehavior.Regenerate); - } - else - { - var memory = obj.CopyAndAssignNewID(); - memory.Timestamp = Galaxy.Current.TurnNumber + Galaxy.Current.CurrentTick; - Memory[obj.ID] = memory; - } - - Memory[obj.ID].IsMemory = true; - - // if it's a space object we need to set its sector - if (obj is ISpaceObject) - { - var sobj = (ISpaceObject)obj; - var mem = (ISpaceObject)Memory[obj.ID]; - mem.Sector = sobj.Sector; - } - - // update pursue/evade orders' alternate targets and set memory flag on ships if object is fleet - if (obj is Fleet) - { - foreach (var order in this.OwnedSpaceObjects.OfType().SelectMany(sobj => sobj.Orders)) - { - if (order is PursueOrder) - ((PursueOrder)order).UpdateAlternateTarget(); - if (order is EvadeOrder) - ((EvadeOrder)order).UpdateAlternateTarget(); - } - - foreach (var v in ((Fleet)Memory[obj.ID]).LeafVehicles) // TODO - go through subfleets too - { - v.IsMemory = true; - Memory[v.ID] = v; - v.ReassignID(); - } - } - } - else - { - // object was destroyed, remove from cache - var oldid = obj.ID > 0 ? obj.ID : Memory.SingleOrDefault(kvp => kvp.Value.SafeEquals(obj)).Key; - if (oldid > 0) - Memory.Remove(oldid); - } - } - - private IEnumerable GetImagePaths(string imagename, string imagetype) - { - if (Mod.Current?.RootPath != null) - { - yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", imagename, imagetype); - yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", imagename, Name + "_" + imagetype); - } - yield return Path.Combine("Pictures", "Races", imagename, imagetype); - yield return Path.Combine("Pictures", "Races", imagename, Name + "_" + imagetype); - } - - private ModProgress GetResearchProgress(Tech tech, int level, int totalRP) - { - var pctSpending = AvailableTechnologies.Sum(t => ResearchSpending[t]); - var queueSpending = 100 - pctSpending; - var firstQueueSpending = 0; - var cost = tech.GetLevelCost(level, this); - var acc = AccumulatedResearch[tech]; - if (ResearchQueue.FirstOrDefault() == tech) - firstQueueSpending = Math.Min(queueSpending * totalRP / 100, cost - acc); - var laterQueueSpending = 0; - if (ResearchQueue.FirstOrDefault() != tech && ResearchQueue.Contains(tech)) - laterQueueSpending = Math.Min(queueSpending * totalRP / 100, cost - acc); - return new ModProgress(tech, acc, cost, - ResearchSpending[tech] * totalRP / 100 + firstQueueSpending, GetResearchQueueDelay(tech, level), laterQueueSpending); - } - - /// - /// How long until this empire can research a tech in its queue? - /// - /// - /// - private double? GetResearchQueueDelay(Tech tech, int level) - { - if (!ResearchQueue.Contains(tech)) - return null; - var totalRP = NetIncome[Resource.Research]; - var pctSpending = AvailableTechnologies.Sum(t => ResearchSpending[t]); - var queueSpending = 100 - pctSpending; - var foundLevels = new SafeDictionary(ResearchedTechnologies); - int costBefore = 0; - foreach (var queuedTech in ResearchQueue) - { - foundLevels[queuedTech]++; - if (queuedTech == tech && foundLevels[queuedTech] == level) - break; // found the tech and level we want - costBefore += queuedTech.GetLevelCost(foundLevels[queuedTech], this); - if (queuedTech.CurrentLevel == foundLevels[queuedTech] - 1) - costBefore -= AccumulatedResearch[queuedTech]; - } - if (queueSpending == 0) - return double.PositiveInfinity; - return (double)costBefore / (queueSpending * totalRP / 100d); - } - - /// - /// Anonymized tech levels of other players. Only used if Technology Uniqueness is nonzero. - /// - public SafeDictionary> OtherPlayersTechLevels { get; private set; } = new SafeDictionary>(true); - - /// - /// Triggers a happiness change empire wide. - /// - /// The trigger function. - public void TriggerHappinessChange(Func trigger) - { - foreach (var colony in OwnedSpaceObjects.OfType().Select(p => p.Colony)) - colony.TriggerHappinessChange(trigger); - } - - /// - /// Triggers a happiness change in a star system. - /// - /// The trigger function. - public void TriggerHappinessChange(StarSystem s, Func trigger) - { - foreach (var colony in s.FindSpaceObjects().Where(p => p.Owner == this).Select(p => p.Colony)) - colony.TriggerHappinessChange(trigger); - } - - /// - /// Triggers a happiness change in a sector. - /// - /// The trigger function. - public void TriggerHappinessChange(Sector s, Func trigger) - { - foreach (var colony in s.SpaceObjects.OfType().Where(p => p.Owner == this).Select(p => p.Colony)) - colony.TriggerHappinessChange(trigger); - } - - public bool IsWinner { get; set; } - - public bool IsLoser { get; set; } - - /// - /// Name of file containing lists of design names. - /// e.g. Ravager would be loaded from Mods/CurrentMod/Dsgnname/Ravager.txt and also from Dsgnname/Ravager.txt. - /// - public string DesignNamesFile { get; set; } - - private IList designNames; - - public IEnumerable DesignNames - { - get - { - try - { - if (designNames == null) - { - designNames = new List(); - var fname = DesignNamesFile + ".txt"; - if (Mod.Current.RootPath != null) - { - var mfname = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Mods", Mod.Current.RootPath, "Dsgnname", fname); - if (File.Exists(mfname)) - { - foreach (var n in File.ReadAllLines(mfname)) - designNames.Add(n); - } - } - var sfname = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Dsgnname", fname); - if (File.Exists(sfname)) - { - foreach (var n in File.ReadAllLines(sfname)) - designNames.Add(n); - } - designNames = designNames.Distinct().ToList(); - } - return designNames; - } - catch (Exception) // file not found etc - { - designNames = new List(); - return designNames; - } - } - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.AI; +using FrEee.Objects.Civilization.Diplomacy.Clauses; +using FrEee.Objects.Commands; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Modding.Loaders; +using FrEee.Utility; +using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Reflection; +using Tech = FrEee.Objects.Technology.Technology; + +namespace FrEee.Objects.Civilization +{ + /// + /// An empire attempting to rule the galaxy. + /// + [Serializable] + public class Empire : INamed, IFoggable, IAbilityObject, IPictorial, IComparable, IComparable, IFormulaHost, IReferrable + { + public Empire() + { + StoredResources = new ResourceQuantity(); + IntrinsicResourceStorage = new ResourceQuantity(); + Commands = new List(); + KnownDesigns = new HashSet(); + Log = new List(); + ResearchedTechnologies = new ModReferenceKeyedDictionary(); + AccumulatedResearch = new ModReferenceKeyedDictionary(); + ResearchSpending = new ModReferenceKeyedDictionary(); + ResearchQueue = new ModReferenceList(); + UniqueTechsFound = new List(); + Memory = new SafeDictionary(); + AINotes = new DynamicDictionary(); + PlayerNotes = new SafeDictionary, string>(); + PrivateNames = new SafeDictionary, string>(); + EncounteredEmpires = new HashSet(); + EncounteredEmpires.Add(this); + IncomingMessages = new HashSet(); + SentMessages = new HashSet(); + Waypoints = new List(); + NumberedWaypoints = new Waypoint[10]; + Scores = new SafeDictionary(); + EnabledMinisters = new SafeDictionary>(); + } + + /// + /// The current empire being controlled by the player. + /// + public static Empire Current + { + get + { + if (Galaxy.Current == null) + return null; + return Galaxy.Current.CurrentEmpire; + } + } + + /// + /// Information about the player controlling this empire. + /// + public PlayerInfo PlayerInfo { get; set; } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.Empire; } + } + + /// + /// Accumulated research points. + /// + public ModReferenceKeyedDictionary AccumulatedResearch + { + get; + private set; + } + + /// + /// The AI which controls the behavior of empires of this race. + /// + [DoNotSerialize] + public AI AI { get { return ai; } set { ai = value; } } + + /// + /// Arbitrary data stored by the AI to maintain state between turns. + /// + public DynamicDictionary AINotes { get; internal set; } + + /// + /// The names of any ministers that are enabled, keyed by category. + /// + public SafeDictionary> EnabledMinisters { get; set; } + + // HACK - we are loading up the Galaxy Seen ability way too many times during pathfinding and this is slowing it down massively. + // yes, this means that an empire gaining/losing this ability would have to wait until the next turn to actually gain or lose it + // but this is the easiest way I can think of to fix pathfinding and this is a rather edge case. + private bool? allSystemsExploredFromStart = null; + + /// + /// Should we have a sensor sweep of the entire galaxy from the very start? + /// + public bool AllSystemsExploredFromStart + { + get + { + if (allSystemsExploredFromStart is null) + allSystemsExploredFromStart = Galaxy.Current.AllSystemsExploredFromStart || this.HasAbility("Galaxy Seen"); + return allSystemsExploredFromStart.Value; + } + } + + /// + /// Technologies which are available for research. + /// + public IEnumerable AvailableTechnologies + { + get + { + return Mod.Current.Technologies.Where( + t => HasUnlocked(t) && ResearchedTechnologies[t] < t.MaximumLevel); + } + } + + /// + /// Bonus research available to spend this turn only. + /// + public int BonusResearch { get; set; } + + public IEnumerable Children + { + get + { + return OwnedSpaceObjects.Cast().Append(PrimaryRace); + } + } + + /// + /// Planets colonized by the empire. + /// + public IEnumerable ColonizedPlanets + { + get + { + return Galaxy.Current.StarSystemLocations.Select(ssl => ssl.Item).SelectMany(ss => ss.FindSpaceObjects(p => p.Owner == this && !p.IsMemoryOfKnownObject())); + } + } + + public ResourceQuantity ColonyIncome + { + get + { + // shouldn't change except at turn processing... + if (colonyIncome == null || Empire.Current == null) + { + colonyIncome = ColonizedPlanets.Sum(p => p.GrossIncome()); + } + + return colonyIncome; + } + } + + /// + /// The color used to represent this empire's star systems on the galaxy map. + /// + public Color Color { get; set; } + + /// + /// Commands issued by the player this turn. + /// + public IList Commands { get; private set; } + + /// + /// All construction queues owned by this empire. + /// + public IEnumerable ConstructionQueues + { + get + { + return Galaxy.Current.Referrables.OfType().Where(q => q.Owner == this && q.Container.Sector != null && q.Rate.Any(kvp => kvp.Value > 0)); + } + } + + /// + /// Spending on construction this turn. + /// + public ResourceQuantity ConstructionSpending + { + get + { + return ConstructionQueues.Sum(q => q.UpcomingSpending); + } + } + + /// + /// The empire's culture. + /// + [DoNotSerialize] + public Culture Culture { get { return culture; } set { culture = value; } } + + /// + /// Any empires that this empire has encountered. + /// + [DoNotCopy] + public ISet EncounteredEmpires { get; private set; } + + /// + /// Finds star systems explored by the empire. + /// + public IEnumerable ExploredStarSystems + { + get { return Galaxy.Current.StarSystemLocations.Select(ssl => ssl.Item).Where(sys => sys.ExploredByEmpires.Contains(this)); } + } + + /// + /// Any treaty clauses this empire is offering to other empires. + /// + public ILookup GivenTreatyClauses + { + get + { + if (Galaxy.Current.GivenTreatyClauseCache == null) + Galaxy.Current.GivenTreatyClauseCache = new SafeDictionary>(); + if (!Galaxy.Current.GivenTreatyClauseCache.ContainsKey(this)) + Galaxy.Current.GivenTreatyClauseCache.Add(this, Galaxy.Current.Referrables.OfType().Where(c => c.Giver == this && c.IsInEffect).ToLookup(c => c.Receiver)); + return Galaxy.Current.GivenTreatyClauseCache[this]; + } + } + + /// + /// The empire's basic resource income from mining and the like, not including maintenance costs or trade/tributes. + /// + /// + /// + public ResourceQuantity GrossDomesticIncome + { + get + { + // shouldn't change except at turn processing... + if (grossDomesticIncome == null || Empire.Current == null) + { + grossDomesticIncome = ColonyIncome + RemoteMiningIncome + RawResourceIncome; + + if (this != Empire.Current) + { + // estimate income of foreign empires based on trade income we earn from them + var clauses = this.GivenTreatyClauses.Flatten().OfType().Where(c => c.Receiver == Empire.Current).GroupBy(c => c.Resource); + foreach (var g in clauses) + { + var resource = g.Key; + var clause = g.First(); + grossDomesticIncome[resource] = (int)(clause.Amount / clause.TradePercentage * 100); + } + } + } + return grossDomesticIncome; + } + } + + /// + /// The insignia icon for this empire. + /// + public Image Icon + { + get { return Pictures.GetIcon(this); } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + foreach (var x in GetImagePaths(InsigniaName, "Insignia")) + yield return x; + + // fall back on leader portrait + foreach (var x in GetImagePaths(LeaderPortraitName, "Race_Portrait")) + yield return x; + } + } + + public long ID + { + get; + set; + } + + /// + /// Incoming messages that are awaiting a response. + /// + public ICollection IncomingMessages { get; private set; } + + /// + /// The name of the insignia picture file, relative to Pictures/Insignia. + /// + public string InsigniaName { get; set; } + + /// + /// Empires don't have intrinsic abilities. + /// + public IEnumerable IntrinsicAbilities + { + get { yield break; } + } + + /// + /// Intrinsic resource storage capacity of this empire (without components, facilities, etc. that provide the abilities). + /// + public ResourceQuantity IntrinsicResourceStorage { get; private set; } + + /// + /// Is this empire defeated? + /// An empire is defeated when it no longer controls any space objects. + /// + public bool IsDefeated + { + get + { + return !OwnedSpaceObjects.Any(sobj => !sobj.IsDisposed); + } + } + + public bool IsDisposed { get; set; } + + public bool IsMemory + { + get; + set; + } + + /// + /// Is this a minor empire? Minor empires cannot use warp points. + /// + public bool IsMinorEmpire { get; set; } + + /// + /// Is this empire controlled by a human player? + /// + public bool IsPlayerEmpire { get; set; } + + /// + /// Designs known by this empire. + /// + public ICollection KnownDesigns { get; private set; } + + /// + /// The name and/or title of the leader of the empire. + /// + public string LeaderName { get; set; } + + /// + /// The name of the leader's image file, relative to Pictures/Leaders. + /// + public string LeaderPortraitName { get; set; } + + /// + /// Empire history log. + /// + public IList Log { get; set; } + + /// + /// Resources the empire spends on maintenance. + /// + public ResourceQuantity Maintenance + { + get + { + // shouldn't change except at turn processing... + // TODO - facility/unit maintenance? + if (maintenance == null || Empire.Current == null) + maintenance = OwnedSpaceObjects.OfType().Sum(v => v.MaintenanceCost); + return maintenance; + } + } + + /// + /// Information about any foggable objects that this empire has previously seen but cannot currently see. + /// + public SafeDictionary Memory { get; private set; } + + /// + /// The name of the empire. + /// + public string Name { get; set; } + + /// + /// Gross income less maintenance. + /// TODO - should we include tributes here? + /// + public ResourceQuantity NetIncome + { + get { return GrossDomesticIncome - Maintenance; } + } + + /// + /// Net income less construction spending. + /// + public ResourceQuantity NetIncomeLessConstruction + { + get + { + return NetIncome - ConstructionSpending; + } + } + + /// + /// Numbered waypoints that are on hotkeys. + /// + public Waypoint[] NumberedWaypoints { get; private set; } + + public IEnumerable OwnedSpaceObjects + { + get + { + return Galaxy.Current.FindSpaceObjects(sobj => sobj.Owner == this); + } + } + + /// + /// Empires don't really have owners... + /// They could be said to own themselves but it makes more sense for referencing purposes to have no owner. + /// + public Empire Owner + { + get { return null; } + } + + public IEnumerable Parents + { + get + { + yield break; + } + } + + /// + /// Notes set by the player on various game objects. + /// + public SafeDictionary, string> PlayerNotes { get; private set; } + + /// + /// The leader portrait for this empire. + /// + public Image Portrait + { + get { return Pictures.GetPortrait(this); } + } + + public IEnumerable PortraitPaths + { + get + { + foreach (var x in GetImagePaths(LeaderPortraitName, "Race_Portrait")) + yield return x; + + // fall back on population icon + foreach (var x in PrimaryRace.IconPaths) + yield return x; + } + } + + /// + /// The native race of this empire. + /// + public Race PrimaryRace { get; set; } + + /// + /// Privately visible names set by the player on various game objects. + /// + public SafeDictionary, string> PrivateNames { get; private set; } + + /// + /// Income via raw resource generation ("Generate Points") abilities (not standard or remote mining, or standard point generation). + /// + public ResourceQuantity RawResourceIncome + { + get + { + // shouldn't change except at turn processing... + if (rawResourceIncome == null || Empire.Current == null) + { + rawResourceIncome = new ResourceQuantity(); + foreach (var sobj in Galaxy.Current.FindSpaceObjects().BelongingTo(this)) + rawResourceIncome += sobj.RawResourceIncome(); + } + return rawResourceIncome; + } + } + + /// + /// Any treaty clauses this empire is receiving from other empires. + /// + public ILookup ReceivedTreatyClauses + { + get + { + if (Galaxy.Current.ReceivedTreatyClauseCache == null) + Galaxy.Current.ReceivedTreatyClauseCache = new SafeDictionary>(); + if (!Galaxy.Current.ReceivedTreatyClauseCache.ContainsKey(this)) + Galaxy.Current.ReceivedTreatyClauseCache.Add(this, Galaxy.Current.Referrables.OfType().Where(c => c.Receiver == this && c.IsInEffect).ToLookup(c => c.Giver)); + return Galaxy.Current.ReceivedTreatyClauseCache[this]; + } + } + + public IDictionary<(ISpaceObject Miner, IMineableSpaceObject Target), ResourceQuantity> RemoteMiners + { + // TODO - limit each miner to mining only the best planet/asteroid in each resource, not all of them? + get + { + // shouldn't change except at turn processing... + if (remoteMiners == null || Empire.Current == null) + { + remoteMiners = new SafeDictionary<(ISpaceObject, IMineableSpaceObject), ResourceQuantity>(true); + foreach (var miner in Galaxy.Current.FindSpaceObjects().BelongingTo(this)) + { + if (miner.Sector == null) + continue; // HACK - shouldn't FindSpaceObjects only be finding objects with sectors? + // only unowned planets and asteroids can be mined + foreach (var sobj in miner.Sector.SpaceObjects.OfType().Unowned()) + { + foreach (var resource in Resource.All) + { + // TODO - remote mining of supplies/research/intel? just need abilities for them ;) well, and values... + var rule = Mod.Current.AbilityRules.SingleOrDefault(r => r.Matches("Remote Resource Generation - " + resource)); + if (rule != null) + { + var amount = miner.GetAbilityValue(rule.Name).ToInt(); + int modifier = 100; + if (resource.Aptitude != null) + modifier = miner.Owner.PrimaryRace.Aptitudes[resource.Aptitude.Name]; + var income = amount * sobj.ResourceValue[resource] * modifier / 100 / 100; + var sectorEmpire = Tuple.Create(miner.Sector, miner.Owner); + + // only one vehicle per empire can mine a sector in any given resource + // but we get the one with the most mining ability :) + var best = remoteMiners.Keys.Where(k => k.Item1.Sector == miner.Sector).WithMax(k => remoteMiners[k]).FirstOrDefault(); + if (best.Item1 == null || best.Item2 == null) + { + lock (remoteMiners) + { + // HACK - why is a SafeDictionary throwing exceptions when I spawn a new key?! + if (!remoteMiners.ContainsKey((miner, sobj))) + remoteMiners.Add((miner, sobj), income * resource); + else + remoteMiners[(miner, sobj)][resource] = income; + } + } + else if (income > remoteMiners[best][resource]) + remoteMiners[(miner, sobj)][resource] = income; + } + } + } + } + } + return remoteMiners; + } + } + + public ResourceQuantity RemoteMiningIncome + { + get + { + // shouldn't change except at turn processing... + if (remoteMiningIncome == null || Empire.Current == null) + remoteMiningIncome = RemoteMiners.Sum(kvp => kvp.Value); + return remoteMiningIncome; + } + } + + public ResearchCommand ResearchCommand + { + get + { + return Commands.OfType().SingleOrDefault(); + } + set + { + Commands.Remove(ResearchCommand); + Commands.Add(value); + } + } + + /// + /// Technologies that have been researched by this empire and the levels they have been researched to. + /// + public ModReferenceKeyedDictionary ResearchedTechnologies + { + get; + internal set; + } + + /// + /// Progress towards completing next levels of techs. + /// + public IEnumerable> ResearchProgress + { + get + { + if (researchProgress == null) + { + ComputeResearchProgress(); + } + return researchProgress; + } + } + + /// + /// Queue for unallocated research spending. + /// + public IList ResearchQueue + { + get; + private set; + } + + /// + /// Research spending as a percentage of budget. + /// + public ModReferenceKeyedDictionary ResearchSpending + { + get; + private set; + } + + /// + /// Resource storage capacity of this empire. + /// + public ResourceQuantity ResourceStorage + { + get + { + var r = new ResourceQuantity(); + r += IntrinsicResourceStorage; + foreach (var sobj in OwnedSpaceObjects) + { + foreach (var res in Resource.All.Where(res => res.IsGlobal)) + r.Add(res, sobj.GetAbilityValue("Resource Storage - " + res.Name).ToInt()); + } + return r; + } + } + + /// + /// The last known score of this empire. + /// + public int? Score + { + get + { + int? s = null; + for (var x = Galaxy.Current.TurnNumber; x >= 0 && s == null; x--) + { + s = GetScoreAtTurn(x); + } + return s; + } + } + + /// + /// The score of this empire over time. + /// If the score is supposed to be unknown to a player, it will be null. + /// + public SafeDictionary Scores { get; private set; } + + /// + /// Messages sent by this empire. + /// + public ICollection SentMessages { get; private set; } + + /// + /// The name of the shipset, relative to Pictures/Shipsets. + /// + public string ShipsetPath { get; set; } + + /// + /// The resources stored by the empire. + /// + public ResourceQuantity StoredResources { get; set; } + + public double Timestamp + { + get; + set; + } + + /// + /// The empire's resource income from free trade treaties with other empires. + /// + /// + /// + public ResourceQuantity TradeIncome + { + get + { + // shouldn't change except at turn processing... + if (tradeIncome == null || Empire.Current == null) + { + tradeIncome = ReceivedTreatyClauses.Flatten().OfType().Sum(c => c.Amount * c.Resource); + } + return tradeIncome; + } + } + + /// + /// The empire's research priorities for this turn. + /// + /// + /// Unique techs that this empire has found from ruins. + /// + public ICollection UniqueTechsFound + { + get; + private set; + } + + /// + /// Unlocked items such as component and facility templates. + /// + [DoNotSerialize] + public IEnumerable UnlockedItems + { + get + { + if (unlockedItems == null) + RefreshUnlockedItems(); + return unlockedItems; + } + } + + public IDictionary Variables + { + get + { + // let scripters refer to empire as empire, not just as host, because host would be confusing + return new Dictionary + { + {"empire", this} + }; + } + } + + /// + /// Waypoints set by this empire. + /// + public IList Waypoints { get; private set; } + + private ModReference> ai { get; set; } + private ModReference culture { get; set; } + private ResourceQuantity colonyIncome; + + private ResourceQuantity grossDomesticIncome; + + private ResourceQuantity maintenance; + + private ResourceQuantity rawResourceIncome; + + private IDictionary<(ISpaceObject, IMineableSpaceObject), ResourceQuantity> remoteMiners; + private ResourceQuantity remoteMiningIncome; + + private ModProgress[] researchProgress; + private ResourceQuantity tradeIncome; + + private IList unlockedItems; + + /// + /// Belays (cancels) an order. + /// + /// + /// + /// + public void BelayOrder(T target, IOrder order) + where T : IOrderable + { + target.RemoveOrder(order); + var cmd = new RemoveOrderCommand(target, order); + Commands.Add(cmd); + } + + /// + /// Can this empire colonize a planet? + /// + /// + public bool CanColonize(Planet planet) + { + return UnlockedItems.OfType().Any(c => c.HasAbility(planet.ColonizationAbilityName)); + } + + public bool CanScan(IFoggable o) + { + if (o is ISpaceObject sobj) + return sobj.HasVisibility(this, Visibility.Scanned); + return o.CheckVisibility(this) >= Visibility.Scanned; + } + + public bool CanSee(IFoggable o) + { + if (o is ISpaceObject sobj) + return sobj.HasVisibility(this, Visibility.Visible); + return o.CheckVisibility(this) >= Visibility.Visible; + } + + public bool CheckUnlockStatus(IUnlockable item) + { + if (item == null) + return true; + if (item is IFoggable && (item as IFoggable).CheckVisibility(this) < Visibility.Fogged) + return false; // can't have unlocked something you haven't seen + // TODO - racial/unique tech should just be requirements + if (item is Tech && ((Tech)item).IsRacial && !this.Abilities().Any(a => a.Rule != null && a.Rule.Matches("Tech Area") && a.Value1 == ((Tech)item).RacialTechID)) + return false; // racial tech that this empire doesn't have the trait for + if (item is Tech && ((Tech)item).IsUnique && !this.UniqueTechsFound.Any(t => t == ((Tech)item).UniqueTechID)) + return false; // unique tech that this empire hasn't discovered + return item.UnlockRequirements.All(r => r.IsMetBy(this)); + } + + public Visibility CheckVisibility(Empire emp) + { + if (emp == this) + return Visibility.Owned; + else if (emp.EncounteredEmpires.Contains(this)) + return Visibility.Scanned; + else + return Visibility.Unknown; + } + + public int CompareTo(Empire other) + { + return Name.CompareTo(other.Name); + } + + public int CompareTo(object obj) + { + return Name.CompareTo(obj.ToString()); + } + + /// + /// Recomputes the empire's research progress stats. + /// Call this when you modify the research spending priorities or the research queue. + /// + public void ComputeResearchProgress() + { + var totalRP = NetIncome[Resource.Research] + BonusResearch; + researchProgress = AvailableTechnologies.Select(t => GetResearchProgress(t, ResearchedTechnologies[t] + 1, totalRP)).ToArray(); + } + + /// + /// Computes the score of this empire. + /// + /// The empire viewing this empire's score, or null for the host view. If the score isn't meant to be visible, it will be set to null. + public int? ComputeScore(Empire viewer) + { + // can we see it? + // TODO - rankings too, not just scores + var disp = Galaxy.Current.ScoreDisplay; + bool showit = false; + if (viewer == null) + showit = true; // host can see everyone's scores + else if (viewer == this) + showit = true; // can always see your own score + else if (viewer.IsAllyOf(this, null) && disp.HasFlag(ScoreDisplay.AlliesOnlyNoRankings)) + showit = true; // see allies' score if ally score flag enabled + else if (disp.HasFlag(ScoreDisplay.All)) + showit = true; // see all players' score if all score flag enabled + if (showit == false) + return null; // can't see score + + // OK, we can see it, now compute the score + // TODO - moddable score weightings + int score = 0; + score += Galaxy.Current.Referrables.OfType().OwnedBy(this).Sum(v => v.Cost.Sum(kvp => kvp.Value)); // vehicle cost + score += ColonizedPlanets.SelectMany(p => p.Colony.Facilities).Sum(f => f.Cost.Sum(kvp => kvp.Value)); // facility cost + foreach (var kvp in ResearchedTechnologies) + { + // researched tech cost + for (var level = 1; level <= kvp.Value; level++) + score += kvp.Key.GetBaseLevelCost(level); + } + // TODO - count population toward score? + return score; + } + + public void Dispose() + { + if (IsDisposed) + return; + Galaxy.Current.UnassignID(this); + if (Galaxy.Current.Empires.Contains(this)) + Galaxy.Current.Empires[Galaxy.Current.Empires.IndexOf(this)] = null; + foreach (var x in OwnedSpaceObjects.OfType().ToArray()) + x.Dispose(); + foreach (var x in ColonizedPlanets.ToArray()) + x.Colony.Dispose(); + } + + /// + /// Gets the relations of this empire toward another empire in a particular system. + /// Note that relations are not necessarily mutual! + /// You should use IsEnemyOf when determining if combat can take place, not this function, + /// because you'd want to make sure if *either* empire is hostile to the other. + /// + /// + /// + /// + public Relations GetRelations(Empire other, StarSystem sys) + { + if (other == null) + return Relations.Unknown; + if (this == other) + return Relations.Self; + if (!EncounteredEmpires.Contains(other)) + return Relations.Unknown; + var alliance = GivenTreatyClauses[other].OfType().MaxOrDefault(c => c.AllianceLevel); + if (alliance >= AllianceLevel.NonAggression) + return Relations.Allied; + if (alliance >= AllianceLevel.NeutralZone) + { + if (sys == null) + return Relations.Hostile; // assume hostility if unknown system + + // if we own a planet, we can defend it + return sys.FindSpaceObjects().Any(p => p.Owner == this) ? Relations.Hostile : Relations.Allied; + } + return Relations.Hostile; // TODO - require a declared war status of some sort, otherwise return neutral? + } + + public ModProgress GetResearchProgress(Tech tech, int level) + { + var totalRP = NetIncome[Resource.Research] + BonusResearch; + return GetResearchProgress(tech, level, totalRP); + } + + /// + /// Gets the empire's score at a specific turn, or null if the score is unknown. + /// + /// + /// + public int? GetScoreAtTurn(int turn) + { + if (!Scores.ContainsKey(turn)) + return null; + return Scores[turn]; + } + + /// + /// Gets all the clauses in a treaty with another empire. + /// + /// + /// + public IEnumerable GetTreaty(Empire emp) + { + return GivenTreatyClauses[emp].Union(ReceivedTreatyClauses[emp]); + } + + public bool HasExplored(StarSystem starSystem) + { + if (starSystem == null) + return false; + return starSystem.ExploredByEmpires.Contains(this); + } + + public bool HasSeen(IFoggable o) + { + return o.CheckVisibility(this) >= Visibility.Fogged; + } + + /// + /// Determines if something has been unlocked in the tech tree. + /// + /// + /// + public bool HasUnlocked(IUnlockable item) + { + return CheckUnlockStatus(item); + // TODO - fix caching of unlock status + // return item == null || UnlockedItems.Contains(item); + } + + /// + /// Returns true if both empires are allied to each other in the star system. + /// + /// + /// + public bool IsAllyOf(Empire other, StarSystem sys) + { + if (other == null) + return false; // can't be allied to nobody/host + return GetRelations(other, sys) == Relations.Allied && other.GetRelations(this, sys) == Relations.Allied; + } + + /// + /// Returns true if either empire is hostile to the other. + /// + /// + /// + public bool IsEnemyOf(Empire other, StarSystem sys) + { + if (other == null) + return false; // can't be hostile to nobody/host + return GetRelations(other, sys) == Relations.Hostile || other.GetRelations(this, sys) == Relations.Hostile; + } + + /// + /// Returns true if empires are not the same, and are neither allies nor at war. + /// + /// + /// + public bool IsNeutralTo(Empire other, StarSystem sys) + { + return this != other && !IsAllyOf(other, sys) && !IsEnemyOf(other, sys); + } + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + /// + /// Issues an order to an object. + /// + /// + /// + /// + public void IssueOrder(T target, IOrder order) + where T : IOrderable + { + target.AddOrder(order); + var cmd = new AddOrderCommand(target, order); + Commands.Add(cmd); + } + + public void NormalizeStoredResources() + { + foreach (var r in Resource.All) + { + if (StoredResources[r] > ResourceStorage[r]) + StoredResources[r] = ResourceStorage[r]; + if (StoredResources[r] < 0) + StoredResources[r] = 0; + } + } + + public bool Owns(IFoggable o) + { + return o.CheckVisibility(this) >= Visibility.Owned; + } + + /// + /// Gets the memory of an object. + /// + /// + /// + /// + public T Recall(T obj) where T : IFoggable, IReferrable + { + if (obj.IsMemory) + return obj; + return (T)Memory[obj.ID]; + } + + public void RecordLog(string text, LogMessageType logMessageType) + { + Log.Add(new GenericLogMessage(text, logMessageType)); + } + + public void RecordLog(object context, string text, LogMessageType logMessageType) + { + if (context is IPictorial) + Log.Add((context as IPictorial).CreateLogMessage(text, logMessageType)); + else + RecordLog(text, logMessageType); + } + + public void Redact(Empire emp) + { + // clear data about other empires + var vis = CheckVisibility(emp); + if (vis < Visibility.Owned) + { + // TODO - espionage + StoredResources.Clear(); + KnownDesigns.DisposeAll(d => !emp.KnownDesigns.Contains(d)); + KnownDesigns.Clear(); + Log.Clear(); + ResearchedTechnologies.Clear(); + AccumulatedResearch.Clear(); + ResearchQueue.Clear(); + ResearchSpending.Clear(); + Memory.Values.DisposeAll(); + Memory.Clear(); + AINotes.Clear(); + PlayerNotes.Clear(); + } + + // TODO - show count of encountered vehicles + foreach (var d in KnownDesigns.Where(d => d.Owner != emp)) + d.VehiclesBuilt = 0; + + // eliminate memories of objects that are actually visible + foreach (var kvp in Memory.ToArray()) + { + var original = (IFoggable)Galaxy.Current.GetReferrable(kvp.Key); + if (original != null && original.CheckVisibility(emp) >= Visibility.Visible) + { + kvp.Value.Dispose(); + Memory.Remove(kvp); + } + } + + if (vis < Visibility.Fogged) + Dispose(); + } + + public void RefreshUnlockedItem(IUnlockable u) + { + if (CheckUnlockStatus(u)) + unlockedItems.Add(u); + else + unlockedItems.Remove(u); + } + + public void RefreshUnlockedItems() + { + unlockedItems = new List( + Mod.Current.Objects.OfType() + .Union(Galaxy.Current.Referrables.OfType()) + .Where(r => CheckUnlockStatus(r))); + } + + /// + /// Spends research points on a technology. + /// + /// + /// + /// Number of levels completed + public int Research(Technology.Technology tech, int points) + { + var oldlvl = ResearchedTechnologies[tech]; + AccumulatedResearch[tech] += points; + var newStuff = new List(); + int advanced = 0; + while (AccumulatedResearch[tech] >= tech.GetNextLevelCost(this) && ResearchedTechnologies[tech] < tech.MaximumLevel) + { + // advanced a level! + advanced++; + AccumulatedResearch[tech] -= tech.GetNextLevelCost(this); + newStuff.AddRange(tech.GetExpectedResults(this)); + ResearchedTechnologies[tech]++; + } + if (ResearchedTechnologies[tech] > oldlvl) + Log.Add(tech.CreateLogMessage("We have advanced from level " + oldlvl + " to level " + ResearchedTechnologies[tech] + " in " + tech + "!", LogMessageType.ResearchComplete)); + foreach (var item in newStuff) + Log.Add(item.CreateLogMessage("We have unlocked a new " + item.ResearchGroup.ToLower() + ", the " + item + "!", LogMessageType.ResearchComplete)); + + // if it was in the queue and we advanced a level, remove the first instance (for each level advanced) + for (int i = 0; i < advanced; i++) + ResearchQueue.Remove(tech); + + // if tech is maxed out, remove all instances from queue and clear spending on it + if (ResearchedTechnologies[tech] == tech.MaximumLevel) + { + while (ResearchQueue.Contains(tech)) + ResearchQueue.Remove(tech); + ResearchSpending[tech] = 0; + } + + // if we advanced, recheck unlocks + if (advanced > 0) + RefreshUnlockedItems(); + + // tell caller how much we advanced + return advanced; + } + + public override string ToString() + { + return Name; + } + + /// + /// Updates the memory sight cache for an object. + /// This should only be called when this empire SEES the object's state change, + /// or the player decides to delete a sensor ghost. + /// + /// + public void UpdateMemory(T obj) where T : IFoggable, IOwnable, IReferrable + { + if (obj.IsMemory) + throw new InvalidOperationException("Call UpdateMemory for the physical object, not the memory."); + + // TODO - what happens if a ship/planet is captured by this empire? Then it needs to be updated... + if (obj.Owner == this) + return; // don't need to update empire's memory of its own objects! + + // encounter empire if not yet encountered + if (obj.Owner != null && !EncounteredEmpires.Contains(obj.Owner)) + { + // not two way encounter if ship is cloaked! + // in that case you will need to gift your own comms channels to that empire + // if you want them to be able to message you apart from replying to your messages + EncounteredEmpires.Add(obj.Owner); + Log.Add(obj.Owner.CreateLogMessage("We have encountered a new empire, the " + obj.Owner + ".", LogMessageType.Generic)); + } + + if (obj.ID > 0) + { + // object exists, update cache with the data + if (Memory[obj.ID] != null) + { + obj.CopyToExceptID((T)Memory[obj.ID], IDCopyBehavior.Regenerate); + } + else + { + var memory = obj.CopyAndAssignNewID(); + memory.Timestamp = Galaxy.Current.TurnNumber + Galaxy.Current.CurrentTick; + Memory[obj.ID] = memory; + } + + Memory[obj.ID].IsMemory = true; + + // if it's a space object we need to set its sector + if (obj is ISpaceObject) + { + var sobj = (ISpaceObject)obj; + var mem = (ISpaceObject)Memory[obj.ID]; + mem.Sector = sobj.Sector; + } + + // update pursue/evade orders' alternate targets and set memory flag on ships if object is fleet + if (obj is Fleet) + { + foreach (var order in this.OwnedSpaceObjects.OfType().SelectMany(sobj => sobj.Orders)) + { + if (order is PursueOrder) + ((PursueOrder)order).UpdateAlternateTarget(); + if (order is EvadeOrder) + ((EvadeOrder)order).UpdateAlternateTarget(); + } + + foreach (var v in ((Fleet)Memory[obj.ID]).LeafVehicles) // TODO - go through subfleets too + { + v.IsMemory = true; + Memory[v.ID] = v; + v.ReassignID(); + } + } + } + else + { + // object was destroyed, remove from cache + var oldid = obj.ID > 0 ? obj.ID : Memory.SingleOrDefault(kvp => kvp.Value.SafeEquals(obj)).Key; + if (oldid > 0) + Memory.Remove(oldid); + } + } + + private IEnumerable GetImagePaths(string imagename, string imagetype) + { + if (Mod.Current?.RootPath != null) + { + yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", imagename, imagetype); + yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", imagename, Name + "_" + imagetype); + } + yield return Path.Combine("Pictures", "Races", imagename, imagetype); + yield return Path.Combine("Pictures", "Races", imagename, Name + "_" + imagetype); + } + + private ModProgress GetResearchProgress(Tech tech, int level, int totalRP) + { + var pctSpending = AvailableTechnologies.Sum(t => ResearchSpending[t]); + var queueSpending = 100 - pctSpending; + var firstQueueSpending = 0; + var cost = tech.GetLevelCost(level, this); + var acc = AccumulatedResearch[tech]; + if (ResearchQueue.FirstOrDefault() == tech) + firstQueueSpending = Math.Min(queueSpending * totalRP / 100, cost - acc); + var laterQueueSpending = 0; + if (ResearchQueue.FirstOrDefault() != tech && ResearchQueue.Contains(tech)) + laterQueueSpending = Math.Min(queueSpending * totalRP / 100, cost - acc); + return new ModProgress(tech, acc, cost, + ResearchSpending[tech] * totalRP / 100 + firstQueueSpending, GetResearchQueueDelay(tech, level), laterQueueSpending); + } + + /// + /// How long until this empire can research a tech in its queue? + /// + /// + /// + private double? GetResearchQueueDelay(Tech tech, int level) + { + if (!ResearchQueue.Contains(tech)) + return null; + var totalRP = NetIncome[Resource.Research]; + var pctSpending = AvailableTechnologies.Sum(t => ResearchSpending[t]); + var queueSpending = 100 - pctSpending; + var foundLevels = new SafeDictionary(ResearchedTechnologies); + int costBefore = 0; + foreach (var queuedTech in ResearchQueue) + { + foundLevels[queuedTech]++; + if (queuedTech == tech && foundLevels[queuedTech] == level) + break; // found the tech and level we want + costBefore += queuedTech.GetLevelCost(foundLevels[queuedTech], this); + if (queuedTech.CurrentLevel == foundLevels[queuedTech] - 1) + costBefore -= AccumulatedResearch[queuedTech]; + } + if (queueSpending == 0) + return double.PositiveInfinity; + return (double)costBefore / (queueSpending * totalRP / 100d); + } + + /// + /// Anonymized tech levels of other players. Only used if Technology Uniqueness is nonzero. + /// + public SafeDictionary> OtherPlayersTechLevels { get; private set; } = new SafeDictionary>(true); + + /// + /// Triggers a happiness change empire wide. + /// + /// The trigger function. + public void TriggerHappinessChange(Func trigger) + { + foreach (var colony in OwnedSpaceObjects.OfType().Select(p => p.Colony)) + colony.TriggerHappinessChange(trigger); + } + + /// + /// Triggers a happiness change in a star system. + /// + /// The trigger function. + public void TriggerHappinessChange(StarSystem s, Func trigger) + { + foreach (var colony in s.FindSpaceObjects().Where(p => p.Owner == this).Select(p => p.Colony)) + colony.TriggerHappinessChange(trigger); + } + + /// + /// Triggers a happiness change in a sector. + /// + /// The trigger function. + public void TriggerHappinessChange(Sector s, Func trigger) + { + foreach (var colony in s.SpaceObjects.OfType().Where(p => p.Owner == this).Select(p => p.Colony)) + colony.TriggerHappinessChange(trigger); + } + + public bool IsWinner { get; set; } + + public bool IsLoser { get; set; } + + /// + /// Name of file containing lists of design names. + /// e.g. Ravager would be loaded from Mods/CurrentMod/Dsgnname/Ravager.txt and also from Dsgnname/Ravager.txt. + /// + public string DesignNamesFile { get; set; } + + private IList designNames; + + public IEnumerable DesignNames + { + get + { + try + { + if (designNames == null) + { + designNames = new List(); + var fname = DesignNamesFile + ".txt"; + if (Mod.Current.RootPath != null) + { + var mfname = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Mods", Mod.Current.RootPath, "Dsgnname", fname); + if (File.Exists(mfname)) + { + foreach (var n in File.ReadAllLines(mfname)) + designNames.Add(n); + } + } + var sfname = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Dsgnname", fname); + if (File.Exists(sfname)) + { + foreach (var n in File.ReadAllLines(sfname)) + designNames.Add(n); + } + designNames = designNames.Distinct().ToList(); + } + return designNames; + } + catch (Exception) // file not found etc + { + designNames = new List(); + return designNames; + } + } + } + } +} diff --git a/FrEee/Game/Objects/Civilization/EmpireStatus.cs b/FrEee/Objects/Civilization/EmpireStatus.cs similarity index 90% rename from FrEee/Game/Objects/Civilization/EmpireStatus.cs rename to FrEee/Objects/Civilization/EmpireStatus.cs index c4f745626..74024ed4f 100644 --- a/FrEee/Game/Objects/Civilization/EmpireStatus.cs +++ b/FrEee/Objects/Civilization/EmpireStatus.cs @@ -1,62 +1,62 @@ -using FrEee.Game.Objects.Space; -using System.Drawing; -using System.IO; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// Status of an empire (has the player uploaded a PLR file, etc.) - /// - public class EmpireStatus - { - public EmpireStatus(Empire emp) - { - Empire = emp; - } - - public Empire Empire { get; set; } - - public Image Insignia { get { return Empire.Icon; } } - public bool IsDefeated { get { return Empire.IsDefeated; } } - public bool IsPlayerEmpire { get { return Empire.IsPlayerEmpire; } } - public string Name { get { return Empire.Name; } } - - public PlrUploadStatus PlrUploadStatus - { - get - { - if (IsDefeated) - return PlrUploadStatus.Defeated; - if (!IsPlayerEmpire) - return PlrUploadStatus.AI; - // TODO - check for PLR files in same folder as GAM? - if (File.Exists(Galaxy.Current.GetEmpireCommandsSavePath(Empire))) - return PlrUploadStatus.Uploaded; - return PlrUploadStatus.NotUploaded; - } - } - } - - public enum PlrUploadStatus - { - /// - /// PLR file has not been uploaded. - /// - NotUploaded, - - /// - /// PLR file has been uploaded. - /// - Uploaded, - - /// - /// Empire is defeated. No PLR file needed. - /// - Defeated, - - /// - /// Empire is an AI. No PLR file needed. - /// - AI, - } +using FrEee.Objects.Space; +using System.Drawing; +using System.IO; + +namespace FrEee.Objects.Civilization +{ + /// + /// Status of an empire (has the player uploaded a PLR file, etc.) + /// + public class EmpireStatus + { + public EmpireStatus(Empire emp) + { + Empire = emp; + } + + public Empire Empire { get; set; } + + public Image Insignia { get { return Empire.Icon; } } + public bool IsDefeated { get { return Empire.IsDefeated; } } + public bool IsPlayerEmpire { get { return Empire.IsPlayerEmpire; } } + public string Name { get { return Empire.Name; } } + + public PlrUploadStatus PlrUploadStatus + { + get + { + if (IsDefeated) + return PlrUploadStatus.Defeated; + if (!IsPlayerEmpire) + return PlrUploadStatus.AI; + // TODO - check for PLR files in same folder as GAM? + if (File.Exists(Galaxy.Current.GetEmpireCommandsSavePath(Empire))) + return PlrUploadStatus.Uploaded; + return PlrUploadStatus.NotUploaded; + } + } + } + + public enum PlrUploadStatus + { + /// + /// PLR file has not been uploaded. + /// + NotUploaded, + + /// + /// PLR file has been uploaded. + /// + Uploaded, + + /// + /// Empire is defeated. No PLR file needed. + /// + Defeated, + + /// + /// Empire is an AI. No PLR file needed. + /// + AI, + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/HappinessModel.cs b/FrEee/Objects/Civilization/HappinessModel.cs similarity index 95% rename from FrEee/Game/Objects/Civilization/HappinessModel.cs rename to FrEee/Objects/Civilization/HappinessModel.cs index 209b98ba9..7440aa861 100644 --- a/FrEee/Game/Objects/Civilization/HappinessModel.cs +++ b/FrEee/Objects/Civilization/HappinessModel.cs @@ -1,82 +1,82 @@ -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// Model for population happiness. - /// Keeps track of anger modifiers for various events. - /// Values are in tenths of a percent. - /// - public class HappinessModel : IModObject - { - public int AnyShipConstructed { get; set; } - public int BattleInSectorLoss { get; set; } - public int BattleInSectorStalemate { get; set; } - public int BattleInSectorWin { get; set; } - public int BattleInSystemLoss { get; set; } - public int BattleInSystemStalemate { get; set; } - public int BattleInSystemWin { get; set; } - public string Description { get; set; } - public int EnemyPlanetCaptured { get; set; } - public int EnemyShipInSector { get; set; } - public int EnemyShipInSystem { get; set; } - public int EnemyTroopsOnPlanet { get; set; } - public int FacilityConstructed { get; set; } - - public bool IsDisposed - { - get; private set; - } - - public int MaxNegativeTurnAngerChange { get; set; } - public int MaxPositiveTurnAngerChange { get; set; } - public string ModID { get; set; } - public string Name { get; set; } - public int NaturalTurnAngerChangeOtherRaces { get; set; } - public int NaturalTurnAngerChangeOurRace { get; set; } - public int OneMillionPopulationKilled { get; set; } - public int OurHomeworldLost { get; set; } - - public int OurPlanetCaptured { get; set; } - public int OurPlanetLost { get; set; } - public int OurPlanetPlagued { get; set; } - public int OurShipInSector { get; set; } - public int OurShipInSystem { get; set; } - public int OurShipLost { get; set; } - public int OurShipLostInSystem { get; set; } - public int OurTroopOnPlanet { get; set; } - public int PlanetColonized { get; set; } - public int ShipConstructed { get; set; } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - public int TreatyMilitaryAlliance { get; set; } - public int TreatyNonAggression { get; set; } - public int TreatyNone { get; set; } - public int TreatyNonIntercourse { get; set; } - public int TreatyPartnership { get; set; } - public int TreatyProtectorateDominant { get; set; } - public int TreatyProtectorateSubordinate { get; set; } - public int TreatySubjugationDominant { get; set; } - public int TreatySubjugationSubordinate { get; set; } - public int TreatyTrade { get; set; } - public int TreatyTradeAndResearch { get; set; } - public int TreatyWar { get; set; } - - public void Dispose() - { - Mod.Current.HappinessModels.Remove(this); - IsDisposed = true; - } - - public override string ToString() - { - return Name; - } - } +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using System.Collections.Generic; + +namespace FrEee.Objects.Civilization +{ + /// + /// Model for population happiness. + /// Keeps track of anger modifiers for various events. + /// Values are in tenths of a percent. + /// + public class HappinessModel : IModObject + { + public int AnyShipConstructed { get; set; } + public int BattleInSectorLoss { get; set; } + public int BattleInSectorStalemate { get; set; } + public int BattleInSectorWin { get; set; } + public int BattleInSystemLoss { get; set; } + public int BattleInSystemStalemate { get; set; } + public int BattleInSystemWin { get; set; } + public string Description { get; set; } + public int EnemyPlanetCaptured { get; set; } + public int EnemyShipInSector { get; set; } + public int EnemyShipInSystem { get; set; } + public int EnemyTroopsOnPlanet { get; set; } + public int FacilityConstructed { get; set; } + + public bool IsDisposed + { + get; private set; + } + + public int MaxNegativeTurnAngerChange { get; set; } + public int MaxPositiveTurnAngerChange { get; set; } + public string ModID { get; set; } + public string Name { get; set; } + public int NaturalTurnAngerChangeOtherRaces { get; set; } + public int NaturalTurnAngerChangeOurRace { get; set; } + public int OneMillionPopulationKilled { get; set; } + public int OurHomeworldLost { get; set; } + + public int OurPlanetCaptured { get; set; } + public int OurPlanetLost { get; set; } + public int OurPlanetPlagued { get; set; } + public int OurShipInSector { get; set; } + public int OurShipInSystem { get; set; } + public int OurShipLost { get; set; } + public int OurShipLostInSystem { get; set; } + public int OurTroopOnPlanet { get; set; } + public int PlanetColonized { get; set; } + public int ShipConstructed { get; set; } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + public int TreatyMilitaryAlliance { get; set; } + public int TreatyNonAggression { get; set; } + public int TreatyNone { get; set; } + public int TreatyNonIntercourse { get; set; } + public int TreatyPartnership { get; set; } + public int TreatyProtectorateDominant { get; set; } + public int TreatyProtectorateSubordinate { get; set; } + public int TreatySubjugationDominant { get; set; } + public int TreatySubjugationSubordinate { get; set; } + public int TreatyTrade { get; set; } + public int TreatyTradeAndResearch { get; set; } + public int TreatyWar { get; set; } + + public void Dispose() + { + Mod.Current.HappinessModels.Remove(this); + IsDisposed = true; + } + + public override string ToString() + { + return Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/PlayerInfo.cs b/FrEee/Objects/Civilization/PlayerInfo.cs similarity index 82% rename from FrEee/Game/Objects/Civilization/PlayerInfo.cs rename to FrEee/Objects/Civilization/PlayerInfo.cs index 786292ec4..f1c09ae9e 100644 --- a/FrEee/Game/Objects/Civilization/PlayerInfo.cs +++ b/FrEee/Objects/Civilization/PlayerInfo.cs @@ -1,35 +1,35 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// Information about a player. - /// - public class PlayerInfo : IPromotable - { - public string Name { get; set; } - - public string Email { get; set; } - - public string Pbw { get; set; } - - public string Irc { get; set; } - - public string Discord { get; set; } - - public string Website { get; set; } - - public string Notes { get; set; } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // nothing to do here - } - } -} +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Objects.Civilization +{ + /// + /// Information about a player. + /// + public class PlayerInfo : IPromotable + { + public string Name { get; set; } + + public string Email { get; set; } + + public string Pbw { get; set; } + + public string Irc { get; set; } + + public string Discord { get; set; } + + public string Website { get; set; } + + public string Notes { get; set; } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // nothing to do here + } + } +} diff --git a/FrEee/Game/Objects/Civilization/Race.cs b/FrEee/Objects/Civilization/Race.cs similarity index 93% rename from FrEee/Game/Objects/Civilization/Race.cs rename to FrEee/Objects/Civilization/Race.cs index 35c0d5725..31c889f4e 100644 --- a/FrEee/Game/Objects/Civilization/Race.cs +++ b/FrEee/Objects/Civilization/Race.cs @@ -1,260 +1,260 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// A race of beings. - /// - [Serializable] - public class Race : INamed, IAbilityObject, IPictorial, IReferrable - { - public Race() - { - TraitNames = new List(); - Aptitudes = new SafeDictionary(); - } - - public IEnumerable Abilities - { - get { return Traits.SelectMany(t => t.Abilities); } - } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.Race; } - } - - /// - /// Aptitudes of this race. - /// - // TODO - convert to NamedDictionary - public IDictionary Aptitudes { get; private set; } - - public IEnumerable Children - { - get { return Traits; } - } - - /// - /// The race's happiness model. - /// - [DoNotSerialize] - public HappinessModel HappinessModel { get { return happinessModel; } set { happinessModel = value; } } - - /// - /// The population icon. - /// - public Image Icon - { - get { return Pictures.GetIcon(this); } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - foreach (var x in GetImagePaths(PopulationIconName, "Pop_Portrait")) - yield return x; - - // fall back on leader portrait if icon not found - foreach (var x in GetImagePaths(PopulationIconName, "Race_Portrait")) - yield return x; - } - } - - public long ID { get; set; } - - /// - /// Resource income percentages based on racial aptitudes. - /// - public ResourceQuantity IncomePercentages - { - get - { - var result = new ResourceQuantity(); - foreach (var r in Resource.All) - { - var factor = 1d; - if (r.Aptitude != null) - factor *= Aptitudes[r.Aptitude.Name] / 100d; - result += (int)(100 * factor) * r; - } - return result; - } - } - - public IEnumerable IntrinsicAbilities - { - get { yield break; } - } - - public bool IsDisposed { get; set; } - - /// - /// The name of this race. Also used for picture names. - /// - public string Name { get; set; } - - /// - /// The atmosphere which this race breathes. - /// - public string NativeAtmosphere { get; set; } - - /// - /// The native planet surface type of this race. - /// - public string NativeSurface { get; set; } - - /// - /// Races have no owner. - /// - public Empire Owner - { - get { return null; } - } - - public IEnumerable Parents - { - get - { - // TODO - return empire? - yield break; - } - } - - /// - /// The population icon name for this race. - /// - public string PopulationIconName { get; set; } - - /// - /// The population portrait. - /// - public Image Portrait - { - get { return Pictures.GetPortrait(this); } - } - - public IEnumerable PortraitPaths - { - get - { - return IconPaths; - } - } - - /// - /// The names of the race's traits. - /// - public IList TraitNames { get; private set; } - - /// - /// The traits of the race. - /// - public IEnumerable Traits { get { return Mod.Current.Traits.Join(TraitNames, t => t.Name, n => n, (t, n) => t); } } - - public IEnumerable UnstackedAbilities - { - get { return Abilities; } - } - - public IEnumerable Warnings - { - get - { - if (string.IsNullOrWhiteSpace(Name)) - yield return "You must specify a name for your race."; - if (string.IsNullOrWhiteSpace(PopulationIconName)) - yield return "You must specify a population icon for your race."; - if (string.IsNullOrWhiteSpace(NativeAtmosphere)) - yield return "You must specify a native atmosphere for your race."; - if (string.IsNullOrWhiteSpace(NativeSurface)) - yield return "You must specify a native planet surface for your race."; - if (!Mod.Current.StellarObjectTemplates.OfType().Any(p => p.Atmosphere == NativeAtmosphere && p.Surface == NativeSurface && !p.Size.IsConstructed)) - yield return NativeSurface + " / " + NativeAtmosphere + " is not a valid surface / atmosphere combination for the current mod."; - if (HappinessModel == null) - yield return "You must specify a happiness model for your race."; - foreach (var kvp in Aptitudes) - { - var apt = Aptitude.All.FindByName(kvp.Key); - if (apt == null) - yield return "\"" + kvp.Key + "\" is not a valid racial aptitude."; - else if (kvp.Value > apt.MaxPercent) - yield return "Aptitude value for " + kvp.Key + " is too high."; - else if (kvp.Value < apt.MinPercent) - yield return "Aptitude value for " + kvp.Key + " is too low."; - } - } - } - - private ModReference happinessModel { get; set; } - - public static Race Load(string filename) - { - var fs = new FileStream(filename, FileMode.Open); - var race = Serializer.Deserialize(fs); - fs.Close(); fs.Dispose(); - return race; - } - - /// - /// Races are known to everyone, though they really should be hidden until first contact... - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - // TODO - hide races until first contact - return Visibility.Scanned; - } - - public void Dispose() - { - if (IsDisposed) - return; - Galaxy.Current.UnassignID(this); - } - - public void Save(string filename) - { - var fs = new FileStream(filename, FileMode.Create); - Serializer.Serialize(this, fs); - fs.Close(); fs.Dispose(); - } - - public override string ToString() - { - return Name; - } - - private IEnumerable GetImagePaths(string imagename, string imagetype) - { - if (Mod.Current?.RootPath != null) - { - yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", imagename, imagetype); - yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", imagename, Name + "_" + imagetype); - } - yield return Path.Combine("Pictures", "Races", imagename, imagetype); - yield return Path.Combine("Pictures", "Races", imagename, Name + "_" + imagetype); - } - - /// - /// The number of race points spent when creating this race. - /// - public int PointsSpent - => Traits.Sum(q => q.Cost) + Aptitudes.Sum(q => Aptitude.All.Single(w => w.Name == q.Key).GetCost(q.Value)); - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; + +namespace FrEee.Objects.Civilization +{ + /// + /// A race of beings. + /// + [Serializable] + public class Race : INamed, IAbilityObject, IPictorial, IReferrable + { + public Race() + { + TraitNames = new List(); + Aptitudes = new SafeDictionary(); + } + + public IEnumerable Abilities + { + get { return Traits.SelectMany(t => t.Abilities); } + } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.Race; } + } + + /// + /// Aptitudes of this race. + /// + // TODO - convert to NamedDictionary + public IDictionary Aptitudes { get; private set; } + + public IEnumerable Children + { + get { return Traits; } + } + + /// + /// The race's happiness model. + /// + [DoNotSerialize] + public HappinessModel HappinessModel { get { return happinessModel; } set { happinessModel = value; } } + + /// + /// The population icon. + /// + public Image Icon + { + get { return Pictures.GetIcon(this); } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + foreach (var x in GetImagePaths(PopulationIconName, "Pop_Portrait")) + yield return x; + + // fall back on leader portrait if icon not found + foreach (var x in GetImagePaths(PopulationIconName, "Race_Portrait")) + yield return x; + } + } + + public long ID { get; set; } + + /// + /// Resource income percentages based on racial aptitudes. + /// + public ResourceQuantity IncomePercentages + { + get + { + var result = new ResourceQuantity(); + foreach (var r in Resource.All) + { + var factor = 1d; + if (r.Aptitude != null) + factor *= Aptitudes[r.Aptitude.Name] / 100d; + result += (int)(100 * factor) * r; + } + return result; + } + } + + public IEnumerable IntrinsicAbilities + { + get { yield break; } + } + + public bool IsDisposed { get; set; } + + /// + /// The name of this race. Also used for picture names. + /// + public string Name { get; set; } + + /// + /// The atmosphere which this race breathes. + /// + public string NativeAtmosphere { get; set; } + + /// + /// The native planet surface type of this race. + /// + public string NativeSurface { get; set; } + + /// + /// Races have no owner. + /// + public Empire Owner + { + get { return null; } + } + + public IEnumerable Parents + { + get + { + // TODO - return empire? + yield break; + } + } + + /// + /// The population icon name for this race. + /// + public string PopulationIconName { get; set; } + + /// + /// The population portrait. + /// + public Image Portrait + { + get { return Pictures.GetPortrait(this); } + } + + public IEnumerable PortraitPaths + { + get + { + return IconPaths; + } + } + + /// + /// The names of the race's traits. + /// + public IList TraitNames { get; private set; } + + /// + /// The traits of the race. + /// + public IEnumerable Traits { get { return Mod.Current.Traits.Join(TraitNames, t => t.Name, n => n, (t, n) => t); } } + + public IEnumerable UnstackedAbilities + { + get { return Abilities; } + } + + public IEnumerable Warnings + { + get + { + if (string.IsNullOrWhiteSpace(Name)) + yield return "You must specify a name for your race."; + if (string.IsNullOrWhiteSpace(PopulationIconName)) + yield return "You must specify a population icon for your race."; + if (string.IsNullOrWhiteSpace(NativeAtmosphere)) + yield return "You must specify a native atmosphere for your race."; + if (string.IsNullOrWhiteSpace(NativeSurface)) + yield return "You must specify a native planet surface for your race."; + if (!Mod.Current.StellarObjectTemplates.OfType().Any(p => p.Atmosphere == NativeAtmosphere && p.Surface == NativeSurface && !p.Size.IsConstructed)) + yield return NativeSurface + " / " + NativeAtmosphere + " is not a valid surface / atmosphere combination for the current mod."; + if (HappinessModel == null) + yield return "You must specify a happiness model for your race."; + foreach (var kvp in Aptitudes) + { + var apt = Aptitude.All.FindByName(kvp.Key); + if (apt == null) + yield return "\"" + kvp.Key + "\" is not a valid racial aptitude."; + else if (kvp.Value > apt.MaxPercent) + yield return "Aptitude value for " + kvp.Key + " is too high."; + else if (kvp.Value < apt.MinPercent) + yield return "Aptitude value for " + kvp.Key + " is too low."; + } + } + } + + private ModReference happinessModel { get; set; } + + public static Race Load(string filename) + { + var fs = new FileStream(filename, FileMode.Open); + var race = Serializer.Deserialize(fs); + fs.Close(); fs.Dispose(); + return race; + } + + /// + /// Races are known to everyone, though they really should be hidden until first contact... + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + // TODO - hide races until first contact + return Visibility.Scanned; + } + + public void Dispose() + { + if (IsDisposed) + return; + Galaxy.Current.UnassignID(this); + } + + public void Save(string filename) + { + var fs = new FileStream(filename, FileMode.Create); + Serializer.Serialize(this, fs); + fs.Close(); fs.Dispose(); + } + + public override string ToString() + { + return Name; + } + + private IEnumerable GetImagePaths(string imagename, string imagetype) + { + if (Mod.Current?.RootPath != null) + { + yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", imagename, imagetype); + yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", imagename, Name + "_" + imagetype); + } + yield return Path.Combine("Pictures", "Races", imagename, imagetype); + yield return Path.Combine("Pictures", "Races", imagename, Name + "_" + imagetype); + } + + /// + /// The number of race points spent when creating this race. + /// + public int PointsSpent + => Traits.Sum(q => q.Cost) + Aptitudes.Sum(q => Aptitude.All.Single(w => w.Name == q.Key).GetCost(q.Value)); + } +} diff --git a/FrEee/Game/Objects/Civilization/SectorWaypoint.cs b/FrEee/Objects/Civilization/SectorWaypoint.cs similarity index 80% rename from FrEee/Game/Objects/Civilization/SectorWaypoint.cs rename to FrEee/Objects/Civilization/SectorWaypoint.cs index 24c1f235b..e93334cea 100644 --- a/FrEee/Game/Objects/Civilization/SectorWaypoint.cs +++ b/FrEee/Objects/Civilization/SectorWaypoint.cs @@ -1,32 +1,32 @@ -using FrEee.Game.Objects.Space; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// A waypoint which is fixed at a specific location in space. - /// - public class SectorWaypoint : Waypoint - { - public SectorWaypoint(Sector sector) - : base() - { - Sector = sector; - } - - public override string Name - { - get { return "Waypoint at " + Sector.Name; } - } - - public override Sector Sector - { - get; - set; - } - - public override StarSystem StarSystem - { - get { return Sector.StarSystem; } - } - } +using FrEee.Objects.Space; + +namespace FrEee.Objects.Civilization +{ + /// + /// A waypoint which is fixed at a specific location in space. + /// + public class SectorWaypoint : Waypoint + { + public SectorWaypoint(Sector sector) + : base() + { + Sector = sector; + } + + public override string Name + { + get { return "Waypoint at " + Sector.Name; } + } + + public override Sector Sector + { + get; + set; + } + + public override StarSystem StarSystem + { + get { return Sector.StarSystem; } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/SpaceObjectWaypoint.cs b/FrEee/Objects/Civilization/SpaceObjectWaypoint.cs similarity index 81% rename from FrEee/Game/Objects/Civilization/SpaceObjectWaypoint.cs rename to FrEee/Objects/Civilization/SpaceObjectWaypoint.cs index 00c16c228..877bd2ddb 100644 --- a/FrEee/Game/Objects/Civilization/SpaceObjectWaypoint.cs +++ b/FrEee/Objects/Civilization/SpaceObjectWaypoint.cs @@ -1,50 +1,50 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// A waypoint which is locked to the location of a space object, and thus may move about if the space object is mobile. - /// - public class SpaceObjectWaypoint : Waypoint - { - public SpaceObjectWaypoint(ISpaceObject sobj) - { - SpaceObject = sobj; - } - - public override string Name - { - get { return "Waypoint at " + SpaceObject.Name; } - } - - [DoNotSerialize(false)] - public override Sector Sector - { - get - { - return SpaceObject?.Sector; - } - set - { - throw new InvalidOperationException("Cannot set the sector of a space object waypoint."); - } - } - - [DoNotSerialize] - public ISpaceObject SpaceObject { get { return spaceObject.Value; } set { spaceObject = value.ReferViaGalaxy(); } } - - public override StarSystem StarSystem - { - get - { - return SpaceObject.StarSystem; - } - } - - private GalaxyReference spaceObject { get; set; } - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; + +namespace FrEee.Objects.Civilization +{ + /// + /// A waypoint which is locked to the location of a space object, and thus may move about if the space object is mobile. + /// + public class SpaceObjectWaypoint : Waypoint + { + public SpaceObjectWaypoint(ISpaceObject sobj) + { + SpaceObject = sobj; + } + + public override string Name + { + get { return "Waypoint at " + SpaceObject.Name; } + } + + [DoNotSerialize(false)] + public override Sector Sector + { + get + { + return SpaceObject?.Sector; + } + set + { + throw new InvalidOperationException("Cannot set the sector of a space object waypoint."); + } + } + + [DoNotSerialize] + public ISpaceObject SpaceObject { get { return spaceObject.Value; } set { spaceObject = value.ReferViaGalaxy(); } } + + public override StarSystem StarSystem + { + get + { + return SpaceObject.StarSystem; + } + } + + private GalaxyReference spaceObject { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Trait.cs b/FrEee/Objects/Civilization/Trait.cs similarity index 89% rename from FrEee/Game/Objects/Civilization/Trait.cs rename to FrEee/Objects/Civilization/Trait.cs index 171451e08..0b647ac2f 100644 --- a/FrEee/Game/Objects/Civilization/Trait.cs +++ b/FrEee/Objects/Civilization/Trait.cs @@ -1,151 +1,151 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// A trait that grants abilities to an empire or race. - /// - [Serializable] - public class Trait : IModObject, IAbilityObject, IUnlockable - { - public Trait() - { - Abilities = new List(); - RequiredTraits = new List(); - RestrictedTraits = new List(); - } - - /// - /// Abilities granted by this trait. - /// - public IList Abilities { get; private set; } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.Trait; } - } - - public IEnumerable Children - { - get { yield break; } - } - - /// - /// The cost of this trait, in empire points. - /// - public Formula Cost { get; set; } - - public Formula Description { get; set; } - - /// - /// TODO - trait pictures - /// - public Image Icon { get { return null; } } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - yield break; - } - } - - public IEnumerable IntrinsicAbilities - { - get { return Abilities; } - } - - public bool IsDisposed - { - // TODO - disposable traits? - get { return false; } - } - - public string ModID { get; set; } - - public string Name - { - get; - set; - } - - string INamed.Name - { - get { return Name; } - } - - public IEnumerable Parents - { - get - { - yield break; - } - } - - /// - /// TODO - trait pictures - /// - public Image Portrait { get { return null; } } - - public IEnumerable PortraitPaths - { - get - { - yield break; - } - } - - /// - /// Traits that are required to choose this trait. - /// - public IList RequiredTraits { get; private set; } - - public string ResearchGroup - { - get { return "Trait"; } - } - - /// - /// Traits that cannot be chosen alongside this trait. - /// - public IList RestrictedTraits { get; private set; } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - public IList> UnlockRequirements - { - get - { - var list = new List>(); - foreach (var t in RequiredTraits) - list.Add(new EmpireTraitRequirement(t, true)); - foreach (var t in RestrictedTraits) - list.Add(new EmpireTraitRequirement(t, false)); - return list; - } - } - - public void Dispose() - { - // nothing to do - } - - public override string ToString() - { - return Name; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; + +namespace FrEee.Objects.Civilization +{ + /// + /// A trait that grants abilities to an empire or race. + /// + [Serializable] + public class Trait : IModObject, IAbilityObject, IUnlockable + { + public Trait() + { + Abilities = new List(); + RequiredTraits = new List(); + RestrictedTraits = new List(); + } + + /// + /// Abilities granted by this trait. + /// + public IList Abilities { get; private set; } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.Trait; } + } + + public IEnumerable Children + { + get { yield break; } + } + + /// + /// The cost of this trait, in empire points. + /// + public Formula Cost { get; set; } + + public Formula Description { get; set; } + + /// + /// TODO - trait pictures + /// + public Image Icon { get { return null; } } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + yield break; + } + } + + public IEnumerable IntrinsicAbilities + { + get { return Abilities; } + } + + public bool IsDisposed + { + // TODO - disposable traits? + get { return false; } + } + + public string ModID { get; set; } + + public string Name + { + get; + set; + } + + string INamed.Name + { + get { return Name; } + } + + public IEnumerable Parents + { + get + { + yield break; + } + } + + /// + /// TODO - trait pictures + /// + public Image Portrait { get { return null; } } + + public IEnumerable PortraitPaths + { + get + { + yield break; + } + } + + /// + /// Traits that are required to choose this trait. + /// + public IList RequiredTraits { get; private set; } + + public string ResearchGroup + { + get { return "Trait"; } + } + + /// + /// Traits that cannot be chosen alongside this trait. + /// + public IList RestrictedTraits { get; private set; } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + public IList> UnlockRequirements + { + get + { + var list = new List>(); + foreach (var t in RequiredTraits) + list.Add(new EmpireTraitRequirement(t, true)); + foreach (var t in RestrictedTraits) + list.Add(new EmpireTraitRequirement(t, false)); + return list; + } + } + + public void Dispose() + { + // nothing to do + } + + public override string ToString() + { + return Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Civilization/Waypoint.cs b/FrEee/Objects/Civilization/Waypoint.cs similarity index 89% rename from FrEee/Game/Objects/Civilization/Waypoint.cs rename to FrEee/Objects/Civilization/Waypoint.cs index a4410ece9..aa8f7a021 100644 --- a/FrEee/Game/Objects/Civilization/Waypoint.cs +++ b/FrEee/Objects/Civilization/Waypoint.cs @@ -1,132 +1,132 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Civilization -{ - /// - /// A waypoint in space that can be used for navigation. - /// - public abstract class Waypoint : ILocated, IFoggable, IOwnable, INamed, IPromotable, IReferrable - { - protected Waypoint() - { - Owner = Empire.Current; - } - - public long ID - { - get; - set; - } - - public bool IsDisposed - { - get; - set; - } - - public bool IsMemory - { - get; - set; - } - - public abstract string Name { get; } - - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - public abstract Sector Sector { get; set; } - - public abstract StarSystem StarSystem { get; } - - public double Timestamp - { - get; - set; - } - - /// - /// Number of vehicles whose orders were altered when this waypoint was deleted. - /// - [DoNotSerialize] - internal int AlteredQueuesOnDelete { get; private set; } - - private GalaxyReference owner { get; set; } - - /// - /// Only the waypoint's owner can see it. - /// If the sector is null, it's invisible too. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner && Sector != null) - return Visibility.Owned; - return Visibility.Unknown; - } - - public void Dispose() - { - if (IsDisposed) - return; - if (Owner != null) - { - Owner.Waypoints.Remove(this); - for (int i = 0; i < Owner.NumberedWaypoints.Length; i++) - { - if (Owner.NumberedWaypoints[i] == this) - Owner.NumberedWaypoints[i] = null; - } - } - foreach (var sobj in Galaxy.Current.FindSpaceObjects()) - { - // check if space object has orders to move to this waypoint - // if so, delete that order and any future orders - bool foundWaypoint = false; - foreach (var order in sobj.Orders.ToArray()) - { - if (order is WaypointOrder) - { - var wo = order as WaypointOrder; - if (wo.Target == this) - foundWaypoint = true; - } - if (foundWaypoint) - sobj.RemoveOrder(order); - } - if (foundWaypoint) - AlteredQueuesOnDelete++; - } - IsDisposed = true; - Galaxy.Current.UnassignID(this); - } - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - public void Redact(Empire emp) - { - if (CheckVisibility(emp) == Visibility.Unknown) - Dispose(); - } - - public virtual void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // doesn't use client objects, nothing to do here - } - - public override string ToString() - { - return Name; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Civilization +{ + /// + /// A waypoint in space that can be used for navigation. + /// + public abstract class Waypoint : ILocated, IFoggable, IOwnable, INamed, IPromotable, IReferrable + { + protected Waypoint() + { + Owner = Empire.Current; + } + + public long ID + { + get; + set; + } + + public bool IsDisposed + { + get; + set; + } + + public bool IsMemory + { + get; + set; + } + + public abstract string Name { get; } + + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + public abstract Sector Sector { get; set; } + + public abstract StarSystem StarSystem { get; } + + public double Timestamp + { + get; + set; + } + + /// + /// Number of vehicles whose orders were altered when this waypoint was deleted. + /// + [DoNotSerialize] + internal int AlteredQueuesOnDelete { get; private set; } + + private GalaxyReference owner { get; set; } + + /// + /// Only the waypoint's owner can see it. + /// If the sector is null, it's invisible too. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner && Sector != null) + return Visibility.Owned; + return Visibility.Unknown; + } + + public void Dispose() + { + if (IsDisposed) + return; + if (Owner != null) + { + Owner.Waypoints.Remove(this); + for (int i = 0; i < Owner.NumberedWaypoints.Length; i++) + { + if (Owner.NumberedWaypoints[i] == this) + Owner.NumberedWaypoints[i] = null; + } + } + foreach (var sobj in Galaxy.Current.FindSpaceObjects()) + { + // check if space object has orders to move to this waypoint + // if so, delete that order and any future orders + bool foundWaypoint = false; + foreach (var order in sobj.Orders.ToArray()) + { + if (order is WaypointOrder) + { + var wo = order as WaypointOrder; + if (wo.Target == this) + foundWaypoint = true; + } + if (foundWaypoint) + sobj.RemoveOrder(order); + } + if (foundWaypoint) + AlteredQueuesOnDelete++; + } + IsDisposed = true; + Galaxy.Current.UnassignID(this); + } + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + public void Redact(Empire emp) + { + if (CheckVisibility(emp) == Visibility.Unknown) + Dispose(); + } + + public virtual void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // doesn't use client objects, nothing to do here + } + + public override string ToString() + { + return Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/BeamWeaponDisplayEffect.cs b/FrEee/Objects/Combat/BeamWeaponDisplayEffect.cs similarity index 89% rename from FrEee/Game/Objects/Combat/BeamWeaponDisplayEffect.cs rename to FrEee/Objects/Combat/BeamWeaponDisplayEffect.cs index e5b885ccf..5e5d470b0 100644 --- a/FrEee/Game/Objects/Combat/BeamWeaponDisplayEffect.cs +++ b/FrEee/Objects/Combat/BeamWeaponDisplayEffect.cs @@ -1,39 +1,39 @@ -using System; -using System.Drawing; - -namespace FrEee.Game.Objects.Combat -{ - [Serializable] - public class BeamWeaponDisplayEffect : WeaponDisplayEffect - { - public BeamWeaponDisplayEffect(string name) - : base(name) - { - } - - public override Point GlobalSpriteOffset - { - get { return new Point(); } - } - - public override string GlobalSpriteSheetName - { - get { return "Beams"; } - } - - public override Point ShipsetSpriteOffset - { - get { return new Point(); } - } - - public override string ShipsetSpriteSheetName - { - get { return "Beams"; } - } - - public override Size SpriteSize - { - get { return new Size(20, 20); } - } - } +using System; +using System.Drawing; + +namespace FrEee.Objects.Combat +{ + [Serializable] + public class BeamWeaponDisplayEffect : WeaponDisplayEffect + { + public BeamWeaponDisplayEffect(string name) + : base(name) + { + } + + public override Point GlobalSpriteOffset + { + get { return new Point(); } + } + + public override string GlobalSpriteSheetName + { + get { return "Beams"; } + } + + public override Point ShipsetSpriteOffset + { + get { return new Point(); } + } + + public override string ShipsetSpriteSheetName + { + get { return "Beams"; } + } + + public override Size SpriteSize + { + get { return new Size(20, 20); } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Grid/Battle.cs b/FrEee/Objects/Combat/Grid/Battle.cs similarity index 95% rename from FrEee/Game/Objects/Combat/Grid/Battle.cs rename to FrEee/Objects/Combat/Grid/Battle.cs index 596157c33..6c8a41ce5 100644 --- a/FrEee/Game/Objects/Combat/Grid/Battle.cs +++ b/FrEee/Objects/Combat/Grid/Battle.cs @@ -1,761 +1,762 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using static System.Math; - -namespace FrEee.Game.Objects.Combat.Grid -{ - public abstract class Battle : IBattle, IDisposable - { - static Battle() - { - Current = new HashSet(); - Previous = new HashSet(); - } - - public Battle() - { - Log = new List(); - - double stardate = Galaxy.Current.Timestamp; - Timestamp = stardate; - } - - /// - /// Any battles that are currently ongoing. - /// This is a collection so we can multithread battle resolution if so desired. - /// - public static ICollection Current { get; private set; } - - /// - /// Any battles that have completed this turn. - /// - public static ICollection Previous { get; private set; } - - /// - /// The combatants in this battle. - /// - public ISet Combatants { get; protected set; } - - /// - /// Copies of the combatants from the start of the battle. - /// - public IDictionary StartCombatants { get; private set; } = new SafeDictionary(); - - /// - /// Copies of the combatants from the end of the battle. - /// - public IDictionary EndCombatants { get; private set; } = new SafeDictionary(); - - /// - /// Starting HP of all combatants. - /// - [Obsolete("OriginalHitpoints is obsolete, use StartCombatants.")] - // TODO - remove after games are over - public SafeDictionary OriginalHitpoints { get; private set; } = new SafeDictionary(); - - /// - /// Who originally owned each combatant? - /// - [Obsolete("OriginalOwners is obsolete, use StartCombatants.")] - // TODO - remove after games are over - public SafeDictionary OriginalOwners { get; private set; } = new SafeDictionary(); - - /// - /// Who launched each unit? So we can recover them after combat. - /// - [DoNotSerialize(false)] - private SafeDictionary Launchers { get; set; } = new SafeDictionary(); - - /// - /// Saved-up fractional combat speed from the previous round. - /// - [DoNotSerialize(false)] - public SafeDictionary CombatSpeedBuffer { get; private set; } = new SafeDictionary(); - - /// - /// The percentage of normal damage that weapons inflict. - /// - public abstract int DamagePercentage { get; } - - public PRNG Dice { get; set; } - - /// - /// The number of rounds this battle lasted. - /// - public int Duration => Events.Count; - - /// - /// The empires engaged in battle. - /// - public IEnumerable Empires { get; protected set; } - - public List> Events - { - get; private set; - } - - public Image Icon - { - get { return Combatants.OfType().Largest()?.Icon; } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return Combatants.OfType().Largest()?.IconPaths ?? Enumerable.Empty(); - } - } - - private SafeDictionary DistancesToTargets { get; } = new SafeDictionary(); - - private SafeDictionary> IgnoredTargets { get; } = new SafeDictionary>(true); - - public IList Log { get; private set; } - - public IList LowerRight { get; private set; } = new List(); - - public abstract int MaxRounds { get; } - - /// - /// The name of the battle. Battles are typicaly named after their location. - /// - public abstract string Name { get; } - - public System.Drawing.Image Portrait - { - get { return Combatants.OfType().Largest()?.Portrait; } - } - - public IEnumerable PortraitPaths - { - get - { - return Combatants.OfType().Largest()?.PortraitPaths ?? Enumerable.Empty(); - } - } - - /// - /// The sector in which this battle took place. - /// - public Sector Sector { get; set; } - - /// - /// The star system in which this battle took place. - /// - public StarSystem StarSystem { get { return Sector.StarSystem; } } - - public double Timestamp { get; private set; } - - public IList UpperLeft { get; private set; } = new List(); - - public int GetDiameter(int round) - { - return UpperLeft[round].DistanceToEightWay(LowerRight[round]) + 1; - } - - public virtual void Initialize(IEnumerable combatants) - { - Combatants = combatants.ToHashSet(); - StartCombatants = combatants.Select(c => new { ID = c.ID, Copy = c.CopyAndAssignNewID() }).ToDictionary(q => q.ID, q => q.Copy); - } - - public abstract void PlaceCombatants(SafeDictionary locations); - - /// - /// Resolves the battle. - /// - public void Resolve() - { - // update memories - foreach (var sobj in StarSystem.SpaceObjects.Where(x => !x.IsMemory).ToArray()) - sobj.UpdateEmpireMemories(); - - Current.Add(this); - - var reloads = new SafeDictionary(); - var locations = new SafeDictionary(); - - PlaceCombatants(locations); - - Events = new List>(); - - UpdateBounds(0, locations.Values); - - // let all combatants scan each other - foreach (var c in Combatants) - c.UpdateEmpireMemories(); - - // make a query so we can check who's alive - var alives = Combatants.Where(q => q.IsAlive); - - for (int i = 0; i < MaxRounds; i++) - { - var combatSpeeds = new SafeDictionary(); - var multiplex = new SafeDictionary>(true); - foreach (var c in Combatants) - combatSpeeds[c] = c.CombatSpeed; - - int GetCombatSpeedThisRound(ICombatant c) - { - return (int)(combatSpeeds[c] + CombatSpeedBuffer[c]); - } - - Events.Add(new List()); - - if (i == 0) - { - // first round, all combatants appear - foreach (var c in Combatants) - Events.Last().Add(new CombatantAppearsEvent(this, c, locations[c])); - } - - var turnorder = alives.OrderBy(x => x is Seeker ? 1 : 0).ThenBy(x => combatSpeeds[x]).ThenShuffle(Dice).ToArray(); - - // phase 0: reload weapons - foreach (var w in turnorder.SelectMany(q => q.Weapons)) - { - reloads[w]--; - if (reloads[w] < 0) - reloads[w] = 0; - } - - // phase 1: combatants move starting with the slowest (so the faster ships get to react to their moves) - but seekers go last so they get a chance to hit - foreach (var c in turnorder) - { - var oldpos = locations[c]; - if (c is Seeker s) - { - if (locations[s] == null) - continue; // HACK - seeker is destroyed but still showing up in turn order - if (locations[s.Target] == null) - { - s.Hitpoints = 0; // seekers self destruct when their target is destroyed - Events.Last().Add(new CombatantDestroyedEvent(this, s, locations[s])); - continue; - } - s.DistanceTraveled += Math.Min(GetCombatSpeedThisRound(c), locations[s].DistanceToEightWay(locations[s.Target])); - locations[s] = IntVector2.InterpolateEightWay(locations[s], locations[s.Target], GetCombatSpeedThisRound(c)); - if (s.DistanceTraveled > s.WeaponInfo.MaxRange) - { - s.Hitpoints = 0; - Events.Last().Add(new CombatantDestroyedEvent(this, s, locations[s])); - } - } - else - { - // TODO - both pursue target and evade scary enemies at the same time using heatmap - // find out how good each target is - var targetiness = new SafeDictionary(); - foreach (var target in alives.Where(x => - c.IsHostileTo(x.Owner) && - (c.CanTarget(x) || (x is Planet && c is ICargoContainer cc && cc.Cargo.Units.OfType().Any())))) - { - targetiness[target] = 1d / (locations[target] - locations[c]).LengthEightWay; - } - - if (!targetiness.Any()) - { - // evade enemies - var heatmap = new HeatMap(); - foreach (var e in alives.Where(x => x.IsHostileTo(c.Owner) && x.CanTarget(c))) - { - int threat; - if (e.Weapons.Any()) - threat = GetCombatSpeedThisRound(e) + e.Weapons.Where(w => w.CanTarget(c)).Max(w => w.Template.WeaponMaxRange); - else - threat = 0; - heatmap.AddLinearGradientEightWay(locations[e], threat, threat, -1); - } - if (c.FillsCombatTile) - { - // only one ship/base/planet per tile - foreach (var tile in heatmap.ToArray()) - { - if (locations.Any(q => q.Key.FillsCombatTile && q.Value == tile.Key)) - heatmap.Remove(tile.Key); - } - } - if (heatmap.Any()) - locations[c] = heatmap.FindMin(locations[c], GetCombatSpeedThisRound(c)); - } - else - { - // move to max range that we can inflict max damage on best target - var goodTargets = targetiness.Where(x => !IgnoredTargets[c].Contains(x.Key)).WithMax(x => x.Value); - ICombatant bestTarget = null; - if (goodTargets.Any()) - bestTarget = goodTargets.First().Key; - if (bestTarget == null) - { - // try previously ignored targets - IgnoredTargets[c].Clear(); - goodTargets = targetiness.Where(x => !IgnoredTargets[c].Contains(x.Key)).WithMax(x => x.Value); - if (goodTargets.Any()) - bestTarget = goodTargets.First().Key; - } - if (bestTarget != null) - { - gotosAreEvil: - var maxdmg = 0; - var maxdmgrange = 0; - if (c.Weapons.Any()) - { - for (var range = 0; range < c.Weapons.Max(w => w.Template.WeaponMaxRange); range++) - { - var dmg = c.Weapons.Where(w => w.CanTarget(bestTarget)).Sum(w => w.Template.GetWeaponDamage(range)); - if (dmg >= maxdmg) - { - maxdmg = dmg; - maxdmgrange = range; - } - } - } - if (c.Weapons.Any(w => w.Template.ComponentTemplate.WeaponInfo.IsSeeker) - && locations[c].DistanceToEightWay(locations[bestTarget]) > DistancesToTargets[c]) - { - // adjust desired range due to seeker speed and target speed if retreating - var roundsToClose = c.Weapons.Where(w => w.Template.ComponentTemplate.WeaponInfo.IsSeeker).Max(w => - (int)Math.Ceiling((double)w.Template.WeaponMaxRange / (double)(w.Template.ComponentTemplate.WeaponInfo as SeekingWeaponInfo).SeekerSpeed)); - var distanceAdjustment = (int)Ceiling(combatSpeeds[bestTarget] * roundsToClose); - maxdmgrange -= distanceAdjustment; - if (maxdmgrange < 0) - maxdmgrange = 0; - } - var targetPos = locations[bestTarget]; - var tiles = new HashSet(); - for (var x = targetPos.X - maxdmgrange; x <= targetPos.X + maxdmgrange; x++) - { - tiles.Add(new IntVector2(x, targetPos.Y - maxdmgrange)); - tiles.Add(new IntVector2(x, targetPos.Y + maxdmgrange)); - } - for (var y = targetPos.Y - maxdmgrange; y <= targetPos.Y + maxdmgrange; y++) - { - tiles.Add(new IntVector2(targetPos.X - maxdmgrange, y)); - tiles.Add(new IntVector2(targetPos.X + maxdmgrange, y)); - } - if (c.FillsCombatTile) - { - foreach (var tile in tiles.ToArray()) - { - if (locations.Any(q => q.Key.FillsCombatTile && q.Value == tile)) - tiles.Remove(tile); - } - } - if (tiles.Any()) - { - var closest = tiles.WithMin(t => t.DistanceToEightWay(locations[c])).First(); - locations[c] = IntVector2.InterpolateEightWay(locations[c], closest, GetCombatSpeedThisRound(c), vec => locations.Values.Contains(vec)); - var newdist = locations[c].DistanceToEightWay(locations[bestTarget]); - if (DistancesToTargets.ContainsKey(c) && newdist >= DistancesToTargets[c] && combatSpeeds[c] <= combatSpeeds[bestTarget] && !c.Weapons.Any(w => w.Template.WeaponMaxRange >= newdist)) - { - DistancesToTargets.Remove(c); - IgnoredTargets[c].Add(bestTarget); // can't catch it, might as well find a new target - goodTargets = targetiness.Where(x => !IgnoredTargets[c].Contains(x.Key)).WithMax(x => x.Value); - bestTarget = null; - if (goodTargets.Any()) - bestTarget = goodTargets.First().Key; - if (bestTarget == null) - goto gotosAreVeryEvil; - goto gotosAreEvil; - } - else - DistancesToTargets[c] = newdist; - } - } - else - DistancesToTargets.Remove(c); - } - } - gotosAreVeryEvil: - if (locations[c] != oldpos) - Events.Last().Add(new CombatantMovesEvent(this, c, oldpos, locations[c])); - } - - UpdateBounds(i, locations.Values); - - // phase 2: combatants launch units - foreach (var c in turnorder) - { - // find launchable units - var unitsToLaunch = new List<(ICombatant Launcher, SpaceVehicle Launchee)>(); - if (c is Planet) - { - // planets can launch infinite units per turn - var p = (Planet)c; - if (p.Cargo != null && p.Cargo.Units != null) - { - foreach (var u in p.Cargo.Units.OfType()) - unitsToLaunch.Add((p, u)); - } - } - else if (c is ICargoTransferrer) - { - // ships, etc. can launch units based on abilities - var ct = (ICargoTransferrer)c; - foreach (var vt in Enum.GetValues(typeof(VehicleTypes)).Cast().Distinct()) - { - var rate = ct.GetAbilityValue("Launch/Recover " + vt.ToSpacedString() + "s").ToInt(); - foreach (var u in ct.Cargo.Units.Where(u => u.Design.VehicleType == vt).OfType().Take(rate)) - unitsToLaunch.Add((c, u)); - } - } - - // launch them temporarily for combat - foreach (var info in unitsToLaunch) - { - Launchers[info.Launchee] = info.Launcher; - if (info.Launcher is ICargoTransferrer ct && info.Launchee is IUnit u) - ct.RemoveUnit(u); - - Combatants.Add(info.Item2); - StartCombatants[info.Item2.ID] = info.Item2.Copy(); - for (var ix = 0; ix < info.Item2.Weapons.Count(); ix++) - { - var w = info.Item2.Weapons.ElementAt(ix); - var wc = StartCombatants[info.Item2.ID].Weapons.ElementAt(ix); - } - locations[info.Launchee] = new IntVector2(locations[info.Launcher]); - Events.Last().Add(new CombatantLaunchedEvent(this, info.Launcher, info.Launchee, locations[info.Launchee])); - } - } - - turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); - - // phase 3: combatants fire point defense non-warhead weapons starting with the fastest (so the faster ships get to inflict damage first and possibly KO enemies preventing them from firing back) - foreach (var c in turnorder.Reverse()) - { - foreach (var w in c.Weapons.Where(w => w.Template.ComponentTemplate.WeaponInfo.IsPointDefense && !w.Template.ComponentTemplate.WeaponInfo.IsWarhead)) - TryFireWeapon(c, w, reloads, locations, multiplex); - } - - turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); - - // phase 4: point defense seekers detonate - foreach (var s in turnorder.Reverse().OfType().Where(s => s.WeaponInfo.IsPointDefense)) - { - CheckSeekerDetonation(s, locations); - } - - turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); - - // phase 5: ships fire non-PD non-warhead weapons starting with the fastest (so the faster ships get to inflict damage first and possibly KO enemies preventing them from firing back) - foreach (var c in turnorder.Reverse()) - { - foreach (var w in c.Weapons.Where(w => !w.Template.ComponentTemplate.WeaponInfo.IsPointDefense && !w.Template.ComponentTemplate.WeaponInfo.IsWarhead)) - TryFireWeapon(c, w, reloads, locations, multiplex); - } - - turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); - - // phase 6: non-PD seekers detonate - foreach (var s in turnorder.Reverse().OfType().Where(s => !s.WeaponInfo.IsPointDefense)) - { - CheckSeekerDetonation(s, locations); - } - - turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); - - // phase 7: ramming! only activates if ship has no other weapons - foreach (var c in turnorder.Reverse()) - { - if (!c.Weapons.Any(w => !w.Template.ComponentTemplate.WeaponInfo.IsWarhead)) - { - // TODO - add damage from ship HP on both sides - foreach (var w in c.Weapons.Where(w => w.Template.ComponentTemplate.WeaponInfo.IsWarhead)) - TryFireWeapon(c, w, reloads, locations, multiplex); - } - } - - turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); - - // TODO - boarding - - // phase 8: drop troops - foreach (var c in turnorder.Reverse()) - { - if (c is ICargoTransferrer cc && cc.AllUnits.OfType().Any()) - { - // find enemy planets in the same square - var dropTargets = locations.Where(q => q.Key != c && q.Value == locations[c] && q.Key is Planet p && c.IsHostileTo(p.Owner)).Select(q => q.Key).Cast(); - var dropTarget = dropTargets.PickRandom(Dice); - if (dropTarget != null) - { - var cd = new CargoDelta(); - cd.UnitTypeTonnage.Add(VehicleTypes.Troop, null); - cc.TransferCargo(cd, dropTarget, cc.Owner, true); - var groundBattle = new GroundBattle(dropTarget); - groundBattle.Resolve(); - } - } - } - - // clear used combat speed buffer speed - foreach (var x in Combatants) - { - CombatSpeedBuffer[x] += x.CombatSpeed - Floor(x.CombatSpeed); - CombatSpeedBuffer[x] -= Floor(CombatSpeedBuffer[x]); - } - - UpdateBounds(i, locations.Values); - - bool hostile = false; - foreach (var a in alives) - { - foreach (var b in alives) - { - // TODO - check if ships want to ram even if they have no weapons - if (a.IsHostileTo(b.Owner) && a.Weapons.Any()) - { - hostile = true; - break; - } - } - if (hostile) - break; - } - if (!hostile) - break; - } - - // recover units - var orphans = new List(); - foreach (var u in Combatants.OfType()) - { - if (Launchers[u] is ICargoTransferrer cc && cc.CargoStorageFree() >= u.Design.Hull.Size && u.Owner == cc.Owner) - cc.Cargo.Units.Add(u); - else - orphans.Add(u); - } - foreach (var u in orphans) - { - var recoverer = Combatants.OfType().Where(q => q.CargoStorageFree() >= u.Design.Hull.Size && q.Owner == u.Owner).FirstOrDefault(); - if (recoverer != null) - recoverer.Cargo.Units.Add(u); - else - u.Dispose(); // no one can recover this unit, it is destroyed - } - - // save state of combatants at end of battle - set to undisposed so they don't get purged! - EndCombatants = Combatants.Select(c => new { ID = c.ID, Copy = c.CopyAndAssignNewID() }).ToDictionary(q => q.ID, q => q.Copy); - foreach (var c in EndCombatants.Values) - c.IsDisposed = false; - - // validate fleets since some ships might have died - foreach (var fleet in Sector.SpaceObjects.OfType()) - fleet.Validate(); - - // replenish combatants' shields - foreach (var combatant in Sector.SpaceObjects.OfType()) - combatant.ReplenishShields(); - - // mark battle complete - Current.Remove(this); - Previous.Add(this); - - // update memories - foreach (var sobj in Combatants.OfType().Where(x => !x.IsMemory).ToArray()) - { - foreach (var emp in Empires) - { - emp.UpdateMemory(sobj); ; - } - } - - // modify happiness - ModifyHappiness(); - } - - public abstract void ModifyHappiness(); - - public override string ToString() - { - return Name; - } - - private void CheckSeekerDetonation(Seeker s, SafeDictionary locations) - { - if (locations[s] == locations[s.Target]) - { - var range = s.DistanceTraveled; - var shot = new Shot(s.LaunchingCombatant, s.LaunchingComponent, s.Target, range); - var hit = new Hit(shot, s.Target, s.Damage.Evaluate(shot)); - bool wasArmed = s.Target is Seeker || s.Target.Weapons.Any(); - s.Target.TakeDamage(hit, Dice); - bool isArmed = s.Target is Seeker || s.Target.Weapons.Any(); - Events.Last().Add(new CombatantsCollideEvent(this, s, s.Target, locations[s.Target], s.Hitpoints, hit.NominalDamage, false, wasArmed && !isArmed)); - s.Hitpoints = 0; - Events.Last().Add(new CombatantDestroyedEvent(this, s, locations[s])); - locations.Remove(s); - if (s.Target.IsDestroyed) - { - var loc = locations[s.Target]; - Events.Last().Add(new CombatantDestroyedEvent(this, s.Target, locations[s.Target])); - locations.Remove(s.Target); - } - } - } - - private void TryFireWeapon(ICombatant c, Component w, SafeDictionary reloads, SafeDictionary locations, SafeDictionary> multiplex) - { - // find suitable targets in range - ICombatant target; - if (w.Template.ComponentTemplate.WeaponInfo.IsWarhead) - { - // warheads only work at range zero and are unaffected by multiplex tracking limits - target = Combatants.Where(x => - { - if (!x.IsAlive) - return false; - if (!x.Owner.IsEnemyOf(w.Owner, StarSystem)) - return false; - if (!w.CanTarget(x)) - return false; - var range = locations[c].DistanceToEightWay(locations[x]); - return range == 0; - }).FirstOrDefault(); - } - else if (w.Template.ComponentTemplate.WeaponInfo.IsPointDefense) - { - // point defense weapons are unaffected by multiplex tracking limits - target = Combatants.Where(x => - { - if (!x.IsAlive) - return false; - if (!x.Owner.IsEnemyOf(w.Owner, StarSystem)) - return false; - if (!w.CanTarget(x)) - return false; - var range = locations[c].DistanceToEightWay(locations[x]); - return range >= w.Template.WeaponMinRange && range <= w.Template.WeaponMaxRange; - }).FirstOrDefault(); - } - else - { - target = Combatants.Where(x => - { - if (!x.IsAlive) - return false; - if (!x.Owner.IsEnemyOf(c.Owner, StarSystem)) - return false; - if (!w.CanTarget(x)) - return false; - var range = locations[c].DistanceToEightWay(locations[x]); - return range >= w.Template.WeaponMinRange && range <= w.Template.WeaponMaxRange; - }).FirstOrDefault(x => multiplex[c].Contains(x) || multiplex[c].Count < c.MaxTargets); - if (target != null) - multiplex[c].Add(target); - } - - if (target == null) - return; - - // fire! - while (reloads[w] <= 0) - { - if (w.BurnSupplies()) - { - if (w.Template.ComponentTemplate.WeaponType == WeaponTypes.Seeking || w.Template.ComponentTemplate.WeaponType == WeaponTypes.SeekingPointDefense) - { - var seeker = new Seeker(Sector, c.Owner, c, w, target); - Galaxy.Current.AssignID(seeker); - Combatants.Add(seeker); - StartCombatants[seeker.ID] = seeker.Copy(); - locations[seeker] = new IntVector2(locations[c]); - Events.Last().Add(new CombatantLaunchedEvent(this, c, seeker, locations[seeker])); - } - else - { - // fire - int dmg = 0; - var winfo = w.Template.ComponentTemplate.WeaponInfo; - var minrng = w.Template.WeaponMinRange; - var maxrng = w.Template.WeaponMaxRange; - var range = locations[c].DistanceToEightWay(locations[target]); - var shot = new Shot(c, w, target, range); - bool wasArmed = target is Seeker || target.Weapons.Any(); - if (w.Template.ComponentTemplate.WeaponInfo.IsWarhead || shot.RollAccuracy(Dice)) - { - dmg += shot.FullDamage; - Hit hit; - if (w.Template.ComponentTemplate.WeaponInfo.IsWarhead) - { - hit = new Hit(shot, target, w.Template.GetWeaponDamage(range) * Mod.Current.Settings.RammingSourceHitpointsDamagePercent / 100); - // warheads have a damage modifer - target.TakeDamage(hit); - // warheads damage the firing ship too - c.TakeDamage(new Hit(shot, target, w.Template.GetWeaponDamage(range) * Mod.Current.Settings.RammingTargetHitpointsDamagePercent / 100)); - // warheads destroy themselves on activation - w.Hitpoints = 0; - } - else - { - hit = new Hit(shot, target, w.Template.GetWeaponDamage(range)); - target.TakeDamage(hit); - } - bool isArmed = target is Seeker || target.Weapons.Any(); - Events.Last().Add(new WeaponFiresEvent(this, c, locations[c], target, locations[target], w, hit, wasArmed && !isArmed)); - } - else - { - bool isArmed = target is Seeker || target.Weapons.Any(); - Events.Last().Add(new WeaponFiresEvent(this, c, locations[c], target, locations[target], w, null, wasArmed && !isArmed)); - } - } - // TODO - mounts that affect reload rate? - reloads[w] += w.Template.ComponentTemplate.WeaponInfo.ReloadRate.Evaluate(w.Template); - } - else - break; - } - - if (target.IsDestroyed) - { - Events.Last().Add(new CombatantDestroyedEvent(this, target, locations[target])); - locations.Remove(target); - } - } - - private void UpdateBounds(int round, IEnumerable positions) - { - while (UpperLeft.Count() <= round) - UpperLeft.Add(new IntVector2()); - while (LowerRight.Count() <= round) - LowerRight.Add(new IntVector2()); - UpperLeft[round].X = positions.MinOrDefault(q => q.X); - LowerRight[round].X = positions.MaxOrDefault(q => q.X); - UpperLeft[round].Y = positions.MinOrDefault(q => q.Y); - LowerRight[round].Y = positions.MaxOrDefault(q => q.Y); - } - - public void Dispose() - { - foreach (var seeker in Combatants.OfType().ToArray()) - seeker.Dispose(); - Combatants.Clear(); - if (CombatSpeedBuffer != null) - CombatSpeedBuffer.Clear(); - Events.Clear(); - LowerRight.Clear(); - if (StartCombatants != null) - StartCombatants.Clear(); - if (EndCombatants != null) - EndCombatants.Clear(); - UpperLeft.Clear(); - } - } -} \ No newline at end of file +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using static System.Math; +using FrEee.Serialization; + +namespace FrEee.Objects.Combat.Grid +{ + public abstract class Battle : IBattle, IDisposable + { + static Battle() + { + Current = new HashSet(); + Previous = new HashSet(); + } + + public Battle() + { + Log = new List(); + + double stardate = Galaxy.Current.Timestamp; + Timestamp = stardate; + } + + /// + /// Any battles that are currently ongoing. + /// This is a collection so we can multithread battle resolution if so desired. + /// + public static ICollection Current { get; private set; } + + /// + /// Any battles that have completed this turn. + /// + public static ICollection Previous { get; private set; } + + /// + /// The combatants in this battle. + /// + public ISet Combatants { get; protected set; } + + /// + /// Copies of the combatants from the start of the battle. + /// + public IDictionary StartCombatants { get; private set; } = new SafeDictionary(); + + /// + /// Copies of the combatants from the end of the battle. + /// + public IDictionary EndCombatants { get; private set; } = new SafeDictionary(); + + /// + /// Starting HP of all combatants. + /// + [Obsolete("OriginalHitpoints is obsolete, use StartCombatants.")] + // TODO - remove after games are over + public SafeDictionary OriginalHitpoints { get; private set; } = new SafeDictionary(); + + /// + /// Who originally owned each combatant? + /// + [Obsolete("OriginalOwners is obsolete, use StartCombatants.")] + // TODO - remove after games are over + public SafeDictionary OriginalOwners { get; private set; } = new SafeDictionary(); + + /// + /// Who launched each unit? So we can recover them after combat. + /// + [DoNotSerialize(false)] + private SafeDictionary Launchers { get; set; } = new SafeDictionary(); + + /// + /// Saved-up fractional combat speed from the previous round. + /// + [DoNotSerialize(false)] + public SafeDictionary CombatSpeedBuffer { get; private set; } = new SafeDictionary(); + + /// + /// The percentage of normal damage that weapons inflict. + /// + public abstract int DamagePercentage { get; } + + public PRNG Dice { get; set; } + + /// + /// The number of rounds this battle lasted. + /// + public int Duration => Events.Count; + + /// + /// The empires engaged in battle. + /// + public IEnumerable Empires { get; protected set; } + + public List> Events + { + get; private set; + } + + public Image Icon + { + get { return Combatants.OfType().Largest()?.Icon; } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return Combatants.OfType().Largest()?.IconPaths ?? Enumerable.Empty(); + } + } + + private SafeDictionary DistancesToTargets { get; } = new SafeDictionary(); + + private SafeDictionary> IgnoredTargets { get; } = new SafeDictionary>(true); + + public IList Log { get; private set; } + + public IList LowerRight { get; private set; } = new List(); + + public abstract int MaxRounds { get; } + + /// + /// The name of the battle. Battles are typicaly named after their location. + /// + public abstract string Name { get; } + + public System.Drawing.Image Portrait + { + get { return Combatants.OfType().Largest()?.Portrait; } + } + + public IEnumerable PortraitPaths + { + get + { + return Combatants.OfType().Largest()?.PortraitPaths ?? Enumerable.Empty(); + } + } + + /// + /// The sector in which this battle took place. + /// + public Sector Sector { get; set; } + + /// + /// The star system in which this battle took place. + /// + public StarSystem StarSystem { get { return Sector.StarSystem; } } + + public double Timestamp { get; private set; } + + public IList UpperLeft { get; private set; } = new List(); + + public int GetDiameter(int round) + { + return UpperLeft[round].DistanceToEightWay(LowerRight[round]) + 1; + } + + public virtual void Initialize(IEnumerable combatants) + { + Combatants = combatants.ToHashSet(); + StartCombatants = combatants.Select(c => new { ID = c.ID, Copy = c.CopyAndAssignNewID() }).ToDictionary(q => q.ID, q => q.Copy); + } + + public abstract void PlaceCombatants(SafeDictionary locations); + + /// + /// Resolves the battle. + /// + public void Resolve() + { + // update memories + foreach (var sobj in StarSystem.SpaceObjects.Where(x => !x.IsMemory).ToArray()) + sobj.UpdateEmpireMemories(); + + Current.Add(this); + + var reloads = new SafeDictionary(); + var locations = new SafeDictionary(); + + PlaceCombatants(locations); + + Events = new List>(); + + UpdateBounds(0, locations.Values); + + // let all combatants scan each other + foreach (var c in Combatants) + c.UpdateEmpireMemories(); + + // make a query so we can check who's alive + var alives = Combatants.Where(q => q.IsAlive); + + for (int i = 0; i < MaxRounds; i++) + { + var combatSpeeds = new SafeDictionary(); + var multiplex = new SafeDictionary>(true); + foreach (var c in Combatants) + combatSpeeds[c] = c.CombatSpeed; + + int GetCombatSpeedThisRound(ICombatant c) + { + return (int)(combatSpeeds[c] + CombatSpeedBuffer[c]); + } + + Events.Add(new List()); + + if (i == 0) + { + // first round, all combatants appear + foreach (var c in Combatants) + Events.Last().Add(new CombatantAppearsEvent(this, c, locations[c])); + } + + var turnorder = alives.OrderBy(x => x is Seeker ? 1 : 0).ThenBy(x => combatSpeeds[x]).ThenShuffle(Dice).ToArray(); + + // phase 0: reload weapons + foreach (var w in turnorder.SelectMany(q => q.Weapons)) + { + reloads[w]--; + if (reloads[w] < 0) + reloads[w] = 0; + } + + // phase 1: combatants move starting with the slowest (so the faster ships get to react to their moves) - but seekers go last so they get a chance to hit + foreach (var c in turnorder) + { + var oldpos = locations[c]; + if (c is Seeker s) + { + if (locations[s] == null) + continue; // HACK - seeker is destroyed but still showing up in turn order + if (locations[s.Target] == null) + { + s.Hitpoints = 0; // seekers self destruct when their target is destroyed + Events.Last().Add(new CombatantDestroyedEvent(this, s, locations[s])); + continue; + } + s.DistanceTraveled += Math.Min(GetCombatSpeedThisRound(c), locations[s].DistanceToEightWay(locations[s.Target])); + locations[s] = IntVector2.InterpolateEightWay(locations[s], locations[s.Target], GetCombatSpeedThisRound(c)); + if (s.DistanceTraveled > s.WeaponInfo.MaxRange) + { + s.Hitpoints = 0; + Events.Last().Add(new CombatantDestroyedEvent(this, s, locations[s])); + } + } + else + { + // TODO - both pursue target and evade scary enemies at the same time using heatmap + // find out how good each target is + var targetiness = new SafeDictionary(); + foreach (var target in alives.Where(x => + c.IsHostileTo(x.Owner) && + (c.CanTarget(x) || (x is Planet && c is ICargoContainer cc && cc.Cargo.Units.OfType().Any())))) + { + targetiness[target] = 1d / (locations[target] - locations[c]).LengthEightWay; + } + + if (!targetiness.Any()) + { + // evade enemies + var heatmap = new HeatMap(); + foreach (var e in alives.Where(x => x.IsHostileTo(c.Owner) && x.CanTarget(c))) + { + int threat; + if (e.Weapons.Any()) + threat = GetCombatSpeedThisRound(e) + e.Weapons.Where(w => w.CanTarget(c)).Max(w => w.Template.WeaponMaxRange); + else + threat = 0; + heatmap.AddLinearGradientEightWay(locations[e], threat, threat, -1); + } + if (c.FillsCombatTile) + { + // only one ship/base/planet per tile + foreach (var tile in heatmap.ToArray()) + { + if (locations.Any(q => q.Key.FillsCombatTile && q.Value == tile.Key)) + heatmap.Remove(tile.Key); + } + } + if (heatmap.Any()) + locations[c] = heatmap.FindMin(locations[c], GetCombatSpeedThisRound(c)); + } + else + { + // move to max range that we can inflict max damage on best target + var goodTargets = targetiness.Where(x => !IgnoredTargets[c].Contains(x.Key)).WithMax(x => x.Value); + ICombatant bestTarget = null; + if (goodTargets.Any()) + bestTarget = goodTargets.First().Key; + if (bestTarget == null) + { + // try previously ignored targets + IgnoredTargets[c].Clear(); + goodTargets = targetiness.Where(x => !IgnoredTargets[c].Contains(x.Key)).WithMax(x => x.Value); + if (goodTargets.Any()) + bestTarget = goodTargets.First().Key; + } + if (bestTarget != null) + { + gotosAreEvil: + var maxdmg = 0; + var maxdmgrange = 0; + if (c.Weapons.Any()) + { + for (var range = 0; range < c.Weapons.Max(w => w.Template.WeaponMaxRange); range++) + { + var dmg = c.Weapons.Where(w => w.CanTarget(bestTarget)).Sum(w => w.Template.GetWeaponDamage(range)); + if (dmg >= maxdmg) + { + maxdmg = dmg; + maxdmgrange = range; + } + } + } + if (c.Weapons.Any(w => w.Template.ComponentTemplate.WeaponInfo.IsSeeker) + && locations[c].DistanceToEightWay(locations[bestTarget]) > DistancesToTargets[c]) + { + // adjust desired range due to seeker speed and target speed if retreating + var roundsToClose = c.Weapons.Where(w => w.Template.ComponentTemplate.WeaponInfo.IsSeeker).Max(w => + (int)Math.Ceiling((double)w.Template.WeaponMaxRange / (double)(w.Template.ComponentTemplate.WeaponInfo as SeekingWeaponInfo).SeekerSpeed)); + var distanceAdjustment = (int)Ceiling(combatSpeeds[bestTarget] * roundsToClose); + maxdmgrange -= distanceAdjustment; + if (maxdmgrange < 0) + maxdmgrange = 0; + } + var targetPos = locations[bestTarget]; + var tiles = new HashSet(); + for (var x = targetPos.X - maxdmgrange; x <= targetPos.X + maxdmgrange; x++) + { + tiles.Add(new IntVector2(x, targetPos.Y - maxdmgrange)); + tiles.Add(new IntVector2(x, targetPos.Y + maxdmgrange)); + } + for (var y = targetPos.Y - maxdmgrange; y <= targetPos.Y + maxdmgrange; y++) + { + tiles.Add(new IntVector2(targetPos.X - maxdmgrange, y)); + tiles.Add(new IntVector2(targetPos.X + maxdmgrange, y)); + } + if (c.FillsCombatTile) + { + foreach (var tile in tiles.ToArray()) + { + if (locations.Any(q => q.Key.FillsCombatTile && q.Value == tile)) + tiles.Remove(tile); + } + } + if (tiles.Any()) + { + var closest = tiles.WithMin(t => t.DistanceToEightWay(locations[c])).First(); + locations[c] = IntVector2.InterpolateEightWay(locations[c], closest, GetCombatSpeedThisRound(c), vec => locations.Values.Contains(vec)); + var newdist = locations[c].DistanceToEightWay(locations[bestTarget]); + if (DistancesToTargets.ContainsKey(c) && newdist >= DistancesToTargets[c] && combatSpeeds[c] <= combatSpeeds[bestTarget] && !c.Weapons.Any(w => w.Template.WeaponMaxRange >= newdist)) + { + DistancesToTargets.Remove(c); + IgnoredTargets[c].Add(bestTarget); // can't catch it, might as well find a new target + goodTargets = targetiness.Where(x => !IgnoredTargets[c].Contains(x.Key)).WithMax(x => x.Value); + bestTarget = null; + if (goodTargets.Any()) + bestTarget = goodTargets.First().Key; + if (bestTarget == null) + goto gotosAreVeryEvil; + goto gotosAreEvil; + } + else + DistancesToTargets[c] = newdist; + } + } + else + DistancesToTargets.Remove(c); + } + } + gotosAreVeryEvil: + if (locations[c] != oldpos) + Events.Last().Add(new CombatantMovesEvent(this, c, oldpos, locations[c])); + } + + UpdateBounds(i, locations.Values); + + // phase 2: combatants launch units + foreach (var c in turnorder) + { + // find launchable units + var unitsToLaunch = new List<(ICombatant Launcher, SpaceVehicle Launchee)>(); + if (c is Planet) + { + // planets can launch infinite units per turn + var p = (Planet)c; + if (p.Cargo != null && p.Cargo.Units != null) + { + foreach (var u in p.Cargo.Units.OfType()) + unitsToLaunch.Add((p, u)); + } + } + else if (c is ICargoTransferrer) + { + // ships, etc. can launch units based on abilities + var ct = (ICargoTransferrer)c; + foreach (var vt in Enum.GetValues(typeof(VehicleTypes)).Cast().Distinct()) + { + var rate = ct.GetAbilityValue("Launch/Recover " + vt.ToSpacedString() + "s").ToInt(); + foreach (var u in ct.Cargo.Units.Where(u => u.Design.VehicleType == vt).OfType().Take(rate)) + unitsToLaunch.Add((c, u)); + } + } + + // launch them temporarily for combat + foreach (var info in unitsToLaunch) + { + Launchers[info.Launchee] = info.Launcher; + if (info.Launcher is ICargoTransferrer ct && info.Launchee is IUnit u) + ct.RemoveUnit(u); + + Combatants.Add(info.Item2); + StartCombatants[info.Item2.ID] = info.Item2.Copy(); + for (var ix = 0; ix < info.Item2.Weapons.Count(); ix++) + { + var w = info.Item2.Weapons.ElementAt(ix); + var wc = StartCombatants[info.Item2.ID].Weapons.ElementAt(ix); + } + locations[info.Launchee] = new IntVector2(locations[info.Launcher]); + Events.Last().Add(new CombatantLaunchedEvent(this, info.Launcher, info.Launchee, locations[info.Launchee])); + } + } + + turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); + + // phase 3: combatants fire point defense non-warhead weapons starting with the fastest (so the faster ships get to inflict damage first and possibly KO enemies preventing them from firing back) + foreach (var c in turnorder.Reverse()) + { + foreach (var w in c.Weapons.Where(w => w.Template.ComponentTemplate.WeaponInfo.IsPointDefense && !w.Template.ComponentTemplate.WeaponInfo.IsWarhead)) + TryFireWeapon(c, w, reloads, locations, multiplex); + } + + turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); + + // phase 4: point defense seekers detonate + foreach (var s in turnorder.Reverse().OfType().Where(s => s.WeaponInfo.IsPointDefense)) + { + CheckSeekerDetonation(s, locations); + } + + turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); + + // phase 5: ships fire non-PD non-warhead weapons starting with the fastest (so the faster ships get to inflict damage first and possibly KO enemies preventing them from firing back) + foreach (var c in turnorder.Reverse()) + { + foreach (var w in c.Weapons.Where(w => !w.Template.ComponentTemplate.WeaponInfo.IsPointDefense && !w.Template.ComponentTemplate.WeaponInfo.IsWarhead)) + TryFireWeapon(c, w, reloads, locations, multiplex); + } + + turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); + + // phase 6: non-PD seekers detonate + foreach (var s in turnorder.Reverse().OfType().Where(s => !s.WeaponInfo.IsPointDefense)) + { + CheckSeekerDetonation(s, locations); + } + + turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); + + // phase 7: ramming! only activates if ship has no other weapons + foreach (var c in turnorder.Reverse()) + { + if (!c.Weapons.Any(w => !w.Template.ComponentTemplate.WeaponInfo.IsWarhead)) + { + // TODO - add damage from ship HP on both sides + foreach (var w in c.Weapons.Where(w => w.Template.ComponentTemplate.WeaponInfo.IsWarhead)) + TryFireWeapon(c, w, reloads, locations, multiplex); + } + } + + turnorder = alives.OrderBy(x => x.CombatSpeed).ThenShuffle(Dice).ToArray(); + + // TODO - boarding + + // phase 8: drop troops + foreach (var c in turnorder.Reverse()) + { + if (c is ICargoTransferrer cc && cc.AllUnits.OfType().Any()) + { + // find enemy planets in the same square + var dropTargets = locations.Where(q => q.Key != c && q.Value == locations[c] && q.Key is Planet p && c.IsHostileTo(p.Owner)).Select(q => q.Key).Cast(); + var dropTarget = dropTargets.PickRandom(Dice); + if (dropTarget != null) + { + var cd = new CargoDelta(); + cd.UnitTypeTonnage.Add(VehicleTypes.Troop, null); + cc.TransferCargo(cd, dropTarget, cc.Owner, true); + var groundBattle = new GroundBattle(dropTarget); + groundBattle.Resolve(); + } + } + } + + // clear used combat speed buffer speed + foreach (var x in Combatants) + { + CombatSpeedBuffer[x] += x.CombatSpeed - Floor(x.CombatSpeed); + CombatSpeedBuffer[x] -= Floor(CombatSpeedBuffer[x]); + } + + UpdateBounds(i, locations.Values); + + bool hostile = false; + foreach (var a in alives) + { + foreach (var b in alives) + { + // TODO - check if ships want to ram even if they have no weapons + if (a.IsHostileTo(b.Owner) && a.Weapons.Any()) + { + hostile = true; + break; + } + } + if (hostile) + break; + } + if (!hostile) + break; + } + + // recover units + var orphans = new List(); + foreach (var u in Combatants.OfType()) + { + if (Launchers[u] is ICargoTransferrer cc && cc.CargoStorageFree() >= u.Design.Hull.Size && u.Owner == cc.Owner) + cc.Cargo.Units.Add(u); + else + orphans.Add(u); + } + foreach (var u in orphans) + { + var recoverer = Combatants.OfType().Where(q => q.CargoStorageFree() >= u.Design.Hull.Size && q.Owner == u.Owner).FirstOrDefault(); + if (recoverer != null) + recoverer.Cargo.Units.Add(u); + else + u.Dispose(); // no one can recover this unit, it is destroyed + } + + // save state of combatants at end of battle - set to undisposed so they don't get purged! + EndCombatants = Combatants.Select(c => new { ID = c.ID, Copy = c.CopyAndAssignNewID() }).ToDictionary(q => q.ID, q => q.Copy); + foreach (var c in EndCombatants.Values) + c.IsDisposed = false; + + // validate fleets since some ships might have died + foreach (var fleet in Sector.SpaceObjects.OfType()) + fleet.Validate(); + + // replenish combatants' shields + foreach (var combatant in Sector.SpaceObjects.OfType()) + combatant.ReplenishShields(); + + // mark battle complete + Current.Remove(this); + Previous.Add(this); + + // update memories + foreach (var sobj in Combatants.OfType().Where(x => !x.IsMemory).ToArray()) + { + foreach (var emp in Empires) + { + emp.UpdateMemory(sobj); ; + } + } + + // modify happiness + ModifyHappiness(); + } + + public abstract void ModifyHappiness(); + + public override string ToString() + { + return Name; + } + + private void CheckSeekerDetonation(Seeker s, SafeDictionary locations) + { + if (locations[s] == locations[s.Target]) + { + var range = s.DistanceTraveled; + var shot = new Shot(s.LaunchingCombatant, s.LaunchingComponent, s.Target, range); + var hit = new Hit(shot, s.Target, s.Damage.Evaluate(shot)); + bool wasArmed = s.Target is Seeker || s.Target.Weapons.Any(); + s.Target.TakeDamage(hit, Dice); + bool isArmed = s.Target is Seeker || s.Target.Weapons.Any(); + Events.Last().Add(new CombatantsCollideEvent(this, s, s.Target, locations[s.Target], s.Hitpoints, hit.NominalDamage, false, wasArmed && !isArmed)); + s.Hitpoints = 0; + Events.Last().Add(new CombatantDestroyedEvent(this, s, locations[s])); + locations.Remove(s); + if (s.Target.IsDestroyed) + { + var loc = locations[s.Target]; + Events.Last().Add(new CombatantDestroyedEvent(this, s.Target, locations[s.Target])); + locations.Remove(s.Target); + } + } + } + + private void TryFireWeapon(ICombatant c, Component w, SafeDictionary reloads, SafeDictionary locations, SafeDictionary> multiplex) + { + // find suitable targets in range + ICombatant target; + if (w.Template.ComponentTemplate.WeaponInfo.IsWarhead) + { + // warheads only work at range zero and are unaffected by multiplex tracking limits + target = Combatants.Where(x => + { + if (!x.IsAlive) + return false; + if (!x.Owner.IsEnemyOf(w.Owner, StarSystem)) + return false; + if (!w.CanTarget(x)) + return false; + var range = locations[c].DistanceToEightWay(locations[x]); + return range == 0; + }).FirstOrDefault(); + } + else if (w.Template.ComponentTemplate.WeaponInfo.IsPointDefense) + { + // point defense weapons are unaffected by multiplex tracking limits + target = Combatants.Where(x => + { + if (!x.IsAlive) + return false; + if (!x.Owner.IsEnemyOf(w.Owner, StarSystem)) + return false; + if (!w.CanTarget(x)) + return false; + var range = locations[c].DistanceToEightWay(locations[x]); + return range >= w.Template.WeaponMinRange && range <= w.Template.WeaponMaxRange; + }).FirstOrDefault(); + } + else + { + target = Combatants.Where(x => + { + if (!x.IsAlive) + return false; + if (!x.Owner.IsEnemyOf(c.Owner, StarSystem)) + return false; + if (!w.CanTarget(x)) + return false; + var range = locations[c].DistanceToEightWay(locations[x]); + return range >= w.Template.WeaponMinRange && range <= w.Template.WeaponMaxRange; + }).FirstOrDefault(x => multiplex[c].Contains(x) || multiplex[c].Count < c.MaxTargets); + if (target != null) + multiplex[c].Add(target); + } + + if (target == null) + return; + + // fire! + while (reloads[w] <= 0) + { + if (w.BurnSupplies()) + { + if (w.Template.ComponentTemplate.WeaponType == WeaponTypes.Seeking || w.Template.ComponentTemplate.WeaponType == WeaponTypes.SeekingPointDefense) + { + var seeker = new Seeker(Sector, c.Owner, c, w, target); + Galaxy.Current.AssignID(seeker); + Combatants.Add(seeker); + StartCombatants[seeker.ID] = seeker.Copy(); + locations[seeker] = new IntVector2(locations[c]); + Events.Last().Add(new CombatantLaunchedEvent(this, c, seeker, locations[seeker])); + } + else + { + // fire + int dmg = 0; + var winfo = w.Template.ComponentTemplate.WeaponInfo; + var minrng = w.Template.WeaponMinRange; + var maxrng = w.Template.WeaponMaxRange; + var range = locations[c].DistanceToEightWay(locations[target]); + var shot = new Shot(c, w, target, range); + bool wasArmed = target is Seeker || target.Weapons.Any(); + if (w.Template.ComponentTemplate.WeaponInfo.IsWarhead || shot.RollAccuracy(Dice)) + { + dmg += shot.FullDamage; + Hit hit; + if (w.Template.ComponentTemplate.WeaponInfo.IsWarhead) + { + hit = new Hit(shot, target, w.Template.GetWeaponDamage(range) * Mod.Current.Settings.RammingSourceHitpointsDamagePercent / 100); + // warheads have a damage modifer + target.TakeDamage(hit); + // warheads damage the firing ship too + c.TakeDamage(new Hit(shot, target, w.Template.GetWeaponDamage(range) * Mod.Current.Settings.RammingTargetHitpointsDamagePercent / 100)); + // warheads destroy themselves on activation + w.Hitpoints = 0; + } + else + { + hit = new Hit(shot, target, w.Template.GetWeaponDamage(range)); + target.TakeDamage(hit); + } + bool isArmed = target is Seeker || target.Weapons.Any(); + Events.Last().Add(new WeaponFiresEvent(this, c, locations[c], target, locations[target], w, hit, wasArmed && !isArmed)); + } + else + { + bool isArmed = target is Seeker || target.Weapons.Any(); + Events.Last().Add(new WeaponFiresEvent(this, c, locations[c], target, locations[target], w, null, wasArmed && !isArmed)); + } + } + // TODO - mounts that affect reload rate? + reloads[w] += w.Template.ComponentTemplate.WeaponInfo.ReloadRate.Evaluate(w.Template); + } + else + break; + } + + if (target.IsDestroyed) + { + Events.Last().Add(new CombatantDestroyedEvent(this, target, locations[target])); + locations.Remove(target); + } + } + + private void UpdateBounds(int round, IEnumerable positions) + { + while (UpperLeft.Count() <= round) + UpperLeft.Add(new IntVector2()); + while (LowerRight.Count() <= round) + LowerRight.Add(new IntVector2()); + UpperLeft[round].X = positions.MinOrDefault(q => q.X); + LowerRight[round].X = positions.MaxOrDefault(q => q.X); + UpperLeft[round].Y = positions.MinOrDefault(q => q.Y); + LowerRight[round].Y = positions.MaxOrDefault(q => q.Y); + } + + public void Dispose() + { + foreach (var seeker in Combatants.OfType().ToArray()) + seeker.Dispose(); + Combatants.Clear(); + if (CombatSpeedBuffer != null) + CombatSpeedBuffer.Clear(); + Events.Clear(); + LowerRight.Clear(); + if (StartCombatants != null) + StartCombatants.Clear(); + if (EndCombatants != null) + EndCombatants.Clear(); + UpperLeft.Clear(); + } + } +} diff --git a/FrEee/Game/Objects/Combat/Grid/BattleEvent.cs b/FrEee/Objects/Combat/Grid/BattleEvent.cs similarity index 83% rename from FrEee/Game/Objects/Combat/Grid/BattleEvent.cs rename to FrEee/Objects/Combat/Grid/BattleEvent.cs index 4d5062ba6..dde233d0c 100644 --- a/FrEee/Game/Objects/Combat/Grid/BattleEvent.cs +++ b/FrEee/Objects/Combat/Grid/BattleEvent.cs @@ -1,38 +1,38 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using FrEee.Game.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Combat.Grid -{ - public abstract class BattleEvent : IBattleEvent - { - protected BattleEvent(IBattle battle, ICombatant combatant, IntVector2 startPosition, IntVector2 endPosition) - { - Battle = battle; - Combatant = combatant; - StartPosition = startPosition; - EndPosition = endPosition; - } - - [DoNotCopy] - public IBattle Battle { get; set; } - - private GalaxyReference combatant { get; set; } - - [DoNotSerialize] - public ICombatant Combatant - { - get => combatant?.Value ?? Battle?.StartCombatants?[combatant.ID]; - set => combatant = value.ReferViaGalaxy(); - } - - public IntVector2 EndPosition { get; set; } - - public IntVector2 StartPosition { get; set; } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Combat.Grid +{ + public abstract class BattleEvent : IBattleEvent + { + protected BattleEvent(IBattle battle, ICombatant combatant, IntVector2 startPosition, IntVector2 endPosition) + { + Battle = battle; + Combatant = combatant; + StartPosition = startPosition; + EndPosition = endPosition; + } + + [DoNotCopy] + public IBattle Battle { get; set; } + + private GalaxyReference combatant { get; set; } + + [DoNotSerialize] + public ICombatant Combatant + { + get => combatant?.Value ?? Battle?.StartCombatants?[combatant.ID]; + set => combatant = value.ReferViaGalaxy(); + } + + public IntVector2 EndPosition { get; set; } + + public IntVector2 StartPosition { get; set; } + } +} diff --git a/FrEee/Game/Objects/Combat/Grid/CombatantAppearsEvent.cs b/FrEee/Objects/Combat/Grid/CombatantAppearsEvent.cs similarity index 75% rename from FrEee/Game/Objects/Combat/Grid/CombatantAppearsEvent.cs rename to FrEee/Objects/Combat/Grid/CombatantAppearsEvent.cs index a95179488..e69b89365 100644 --- a/FrEee/Game/Objects/Combat/Grid/CombatantAppearsEvent.cs +++ b/FrEee/Objects/Combat/Grid/CombatantAppearsEvent.cs @@ -1,18 +1,18 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using System; -using System.Linq; - -namespace FrEee.Game.Objects.Combat.Grid -{ - public class CombatantAppearsEvent : BattleEvent - { - public CombatantAppearsEvent(IBattle battle, ICombatant combatant, IntVector2 position) - : base(battle, combatant, position, position) - { - IsUnarmed = !(Combatant is Seeker) && !Combatant.Weapons.Any(); - } - - public bool IsUnarmed { get; set; } - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Linq; + +namespace FrEee.Objects.Combat.Grid +{ + public class CombatantAppearsEvent : BattleEvent + { + public CombatantAppearsEvent(IBattle battle, ICombatant combatant, IntVector2 position) + : base(battle, combatant, position, position) + { + IsUnarmed = !(Combatant is Seeker) && !Combatant.Weapons.Any(); + } + + public bool IsUnarmed { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Grid/CombatantDestroyedEvent.cs b/FrEee/Objects/Combat/Grid/CombatantDestroyedEvent.cs similarity index 65% rename from FrEee/Game/Objects/Combat/Grid/CombatantDestroyedEvent.cs rename to FrEee/Objects/Combat/Grid/CombatantDestroyedEvent.cs index cb92c1825..0ef8320fa 100644 --- a/FrEee/Game/Objects/Combat/Grid/CombatantDestroyedEvent.cs +++ b/FrEee/Objects/Combat/Grid/CombatantDestroyedEvent.cs @@ -1,14 +1,14 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; - -namespace FrEee.Game.Objects.Combat.Grid -{ - public class CombatantDestroyedEvent : BattleEvent - { - public CombatantDestroyedEvent(IBattle battle, ICombatant combatant, IntVector2 position) - : base(battle, combatant, position, position) - { - } - - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Objects.Combat.Grid +{ + public class CombatantDestroyedEvent : BattleEvent + { + public CombatantDestroyedEvent(IBattle battle, ICombatant combatant, IntVector2 position) + : base(battle, combatant, position, position) + { + } + + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Grid/CombatantDisappearsEvent.cs b/FrEee/Objects/Combat/Grid/CombatantDisappearsEvent.cs similarity index 74% rename from FrEee/Game/Objects/Combat/Grid/CombatantDisappearsEvent.cs rename to FrEee/Objects/Combat/Grid/CombatantDisappearsEvent.cs index c53e7e9dc..91ed73655 100644 --- a/FrEee/Game/Objects/Combat/Grid/CombatantDisappearsEvent.cs +++ b/FrEee/Objects/Combat/Grid/CombatantDisappearsEvent.cs @@ -1,16 +1,16 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using System; - -namespace FrEee.Game.Objects.Combat.Grid -{ - [Obsolete("This class is deprecated; use CombatantDestroyedEvent if a combatant is destroyed.")] - public class CombatantDisappearsEvent : BattleEvent - { - public CombatantDisappearsEvent(IBattle battle, ICombatant combatant, IntVector2 position) - : base(battle, combatant, position, position) - { - } - - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using System; + +namespace FrEee.Objects.Combat.Grid +{ + [Obsolete("This class is deprecated; use CombatantDestroyedEvent if a combatant is destroyed.")] + public class CombatantDisappearsEvent : BattleEvent + { + public CombatantDisappearsEvent(IBattle battle, ICombatant combatant, IntVector2 position) + : base(battle, combatant, position, position) + { + } + + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Grid/CombatantLaunchedEvent.cs b/FrEee/Objects/Combat/Grid/CombatantLaunchedEvent.cs similarity index 76% rename from FrEee/Game/Objects/Combat/Grid/CombatantLaunchedEvent.cs rename to FrEee/Objects/Combat/Grid/CombatantLaunchedEvent.cs index a2f8c7bd8..2dc855014 100644 --- a/FrEee/Game/Objects/Combat/Grid/CombatantLaunchedEvent.cs +++ b/FrEee/Objects/Combat/Grid/CombatantLaunchedEvent.cs @@ -1,25 +1,25 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Combat.Grid -{ - public class CombatantLaunchedEvent : BattleEvent - { - public CombatantLaunchedEvent(Battle battle, ICombatant launcher, ICombatant combatant, IntVector2 position) - : base(battle, combatant, position, position) - { - Launcher = launcher; - } - - private GalaxyReference launcher { get; set; } - - [DoNotSerialize] - public ICombatant Launcher - { - get => launcher?.Value ?? Battle?.StartCombatants?[launcher.ID]; - set => launcher = value.ReferViaGalaxy(); - } - - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Combat.Grid +{ + public class CombatantLaunchedEvent : BattleEvent + { + public CombatantLaunchedEvent(Battle battle, ICombatant launcher, ICombatant combatant, IntVector2 position) + : base(battle, combatant, position, position) + { + Launcher = launcher; + } + + private GalaxyReference launcher { get; set; } + + [DoNotSerialize] + public ICombatant Launcher + { + get => launcher?.Value ?? Battle?.StartCombatants?[launcher.ID]; + set => launcher = value.ReferViaGalaxy(); + } + + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Grid/CombatantMovesEvent.cs b/FrEee/Objects/Combat/Grid/CombatantMovesEvent.cs similarity index 65% rename from FrEee/Game/Objects/Combat/Grid/CombatantMovesEvent.cs rename to FrEee/Objects/Combat/Grid/CombatantMovesEvent.cs index 4fec38274..7bd807a9a 100644 --- a/FrEee/Game/Objects/Combat/Grid/CombatantMovesEvent.cs +++ b/FrEee/Objects/Combat/Grid/CombatantMovesEvent.cs @@ -1,13 +1,13 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; - -namespace FrEee.Game.Objects.Combat.Grid -{ - public class CombatantMovesEvent : BattleEvent - { - public CombatantMovesEvent(Battle battle, ICombatant combatant, IntVector2 here, IntVector2 there) - : base(battle, combatant, here, there) - { - } - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Objects.Combat.Grid +{ + public class CombatantMovesEvent : BattleEvent + { + public CombatantMovesEvent(Battle battle, ICombatant combatant, IntVector2 here, IntVector2 there) + : base(battle, combatant, here, there) + { + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Grid/CombatantsCollideEvent.cs b/FrEee/Objects/Combat/Grid/CombatantsCollideEvent.cs similarity index 81% rename from FrEee/Game/Objects/Combat/Grid/CombatantsCollideEvent.cs rename to FrEee/Objects/Combat/Grid/CombatantsCollideEvent.cs index fc7821548..54644f217 100644 --- a/FrEee/Game/Objects/Combat/Grid/CombatantsCollideEvent.cs +++ b/FrEee/Objects/Combat/Grid/CombatantsCollideEvent.cs @@ -1,39 +1,39 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Combat.Grid -{ - /// - /// When combatants collide - seeker detonation or ship ramming - /// - /// - public class CombatantsCollideEvent : BattleEvent - { - public CombatantsCollideEvent(Battle battle, ICombatant combatant, ICombatant target, IntVector2 location, int combatantDamage, int targetDamage, bool wasCombatantDisarmed, bool wasTargetDisarmed) - : base(battle, combatant, location, location) - { - Target = target; - CombatantDamage = combatantDamage; - TargetDamage = targetDamage; - WasCombatantDisarmed = wasCombatantDisarmed; - WasTargetDisarmed = wasTargetDisarmed; - } - - - private GalaxyReference target { get; set; } - - [DoNotSerialize] - public ICombatant Target - { - get => target?.Value ?? Battle?.StartCombatants?[target.ID]; - set => target = value.ReferViaGalaxy(); - } - - public int CombatantDamage { get; set; } - public int TargetDamage { get; set; } - - public bool WasCombatantDisarmed { get; set; } - public bool WasTargetDisarmed { get; set; } - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Combat.Grid +{ + /// + /// When combatants collide - seeker detonation or ship ramming + /// + /// + public class CombatantsCollideEvent : BattleEvent + { + public CombatantsCollideEvent(Battle battle, ICombatant combatant, ICombatant target, IntVector2 location, int combatantDamage, int targetDamage, bool wasCombatantDisarmed, bool wasTargetDisarmed) + : base(battle, combatant, location, location) + { + Target = target; + CombatantDamage = combatantDamage; + TargetDamage = targetDamage; + WasCombatantDisarmed = wasCombatantDisarmed; + WasTargetDisarmed = wasTargetDisarmed; + } + + + private GalaxyReference target { get; set; } + + [DoNotSerialize] + public ICombatant Target + { + get => target?.Value ?? Battle?.StartCombatants?[target.ID]; + set => target = value.ReferViaGalaxy(); + } + + public int CombatantDamage { get; set; } + public int TargetDamage { get; set; } + + public bool WasCombatantDisarmed { get; set; } + public bool WasTargetDisarmed { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Grid/Extensions.cs b/FrEee/Objects/Combat/Grid/Extensions.cs similarity index 95% rename from FrEee/Game/Objects/Combat/Grid/Extensions.cs rename to FrEee/Objects/Combat/Grid/Extensions.cs index 7fb8556d4..04455f0bf 100644 --- a/FrEee/Game/Objects/Combat/Grid/Extensions.cs +++ b/FrEee/Objects/Combat/Grid/Extensions.cs @@ -1,12 +1,12 @@ -using System; -using System.Collections.Generic; - -public static class Extensions -{ - public static HashSet ToHashSet( - this IEnumerable source, - IEqualityComparer comparer = null) - { - return new HashSet(source, comparer); - } -} +using System; +using System.Collections.Generic; + +public static class Extensions +{ + public static HashSet ToHashSet( + this IEnumerable source, + IEqualityComparer comparer = null) + { + return new HashSet(source, comparer); + } +} diff --git a/FrEee/Game/Objects/Combat/Grid/GroundBattle.cs b/FrEee/Objects/Combat/Grid/GroundBattle.cs similarity index 87% rename from FrEee/Game/Objects/Combat/Grid/GroundBattle.cs rename to FrEee/Objects/Combat/Grid/GroundBattle.cs index f839ce388..1ef2cedec 100644 --- a/FrEee/Game/Objects/Combat/Grid/GroundBattle.cs +++ b/FrEee/Objects/Combat/Grid/GroundBattle.cs @@ -1,94 +1,94 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Game.Objects.Combat.Grid -{ - /// - /// A battle which takes place on a planet's surface. - /// - /// - public class GroundBattle : Battle - { - public GroundBattle(Planet location) - : base() - { - Planet = location; - OriginalPlanetOwner = Planet.Owner; - Sector = location.Sector ?? throw new Exception("Ground battles require a sector location."); - - // TODO - should weapon platforms participate in ground combat like in SE5? - Empires = Planet.Cargo.Units.OfType().Select(t => t.Owner).Distinct(); - var combatants = new HashSet(Planet.Cargo.Units.OfType()); - for (var i = 0; i < Planet.PopulationFill.Value / Mod.Current.Settings.PopulationFactor / (Mod.Current.Settings.PopulationPerMilitia == 0 ? 20 : Mod.Current.Settings.PopulationPerMilitia); i++) - { - var militia = Design.MilitiaDesign.Instantiate(); - militia.Owner = Planet.Owner; - combatants.Add(militia); - } - - Initialize(combatants); - } - - public override int DamagePercentage => Mod.Current.Settings.GroundCombatDamagePercent; - - public Planet Planet { get; private set; } - - public Empire OriginalPlanetOwner { get; private set; } - - public override void Initialize(IEnumerable combatants) - { - base.Initialize(combatants); - - Empires = Planet.Cargo.Units.OfType().Select(t => t.Owner).Distinct(); - - int moduloID = (int)(Planet.ID % 100000); - Dice = new PRNG((int)(moduloID / Galaxy.Current.Timestamp * 10)); - } - - public override void PlaceCombatants(SafeDictionary locations) - { - // in ground combat, for now everyone is right on top of each other - foreach (var c in Combatants) - locations.Add(c, new IntVector2()); - } - - public override int MaxRounds => Mod.Current.Settings.GroundCombatTurns; - - public override void ModifyHappiness() - { - foreach (var e in Empires) - { - switch (this.ResultFor(e)) - { - case "victory": - if (OriginalPlanetOwner != e) - e.TriggerHappinessChange(hm => hm.EnemyPlanetCaptured); - break; - case "defeat": - if (OriginalPlanetOwner == e) - { - e.TriggerHappinessChange(hm => hm.OurPlanetCaptured); - e.TriggerHappinessChange(hm => hm.OurPlanetLost); - if (Planet.Colony.IsHomeworld) - e.TriggerHappinessChange(hm => hm.OurHomeworldLost); - } - break; - } - - } - } - - public override string Name => $"Ground Battle at {Planet}"; - } -} +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Objects.Combat.Grid +{ + /// + /// A battle which takes place on a planet's surface. + /// + /// + public class GroundBattle : Battle + { + public GroundBattle(Planet location) + : base() + { + Planet = location; + OriginalPlanetOwner = Planet.Owner; + Sector = location.Sector ?? throw new Exception("Ground battles require a sector location."); + + // TODO - should weapon platforms participate in ground combat like in SE5? + Empires = Planet.Cargo.Units.OfType().Select(t => t.Owner).Distinct(); + var combatants = new HashSet(Planet.Cargo.Units.OfType()); + for (var i = 0; i < Planet.PopulationFill.Value / Mod.Current.Settings.PopulationFactor / (Mod.Current.Settings.PopulationPerMilitia == 0 ? 20 : Mod.Current.Settings.PopulationPerMilitia); i++) + { + var militia = Design.MilitiaDesign.Instantiate(); + militia.Owner = Planet.Owner; + combatants.Add(militia); + } + + Initialize(combatants); + } + + public override int DamagePercentage => Mod.Current.Settings.GroundCombatDamagePercent; + + public Planet Planet { get; private set; } + + public Empire OriginalPlanetOwner { get; private set; } + + public override void Initialize(IEnumerable combatants) + { + base.Initialize(combatants); + + Empires = Planet.Cargo.Units.OfType().Select(t => t.Owner).Distinct(); + + int moduloID = (int)(Planet.ID % 100000); + Dice = new PRNG((int)(moduloID / Galaxy.Current.Timestamp * 10)); + } + + public override void PlaceCombatants(SafeDictionary locations) + { + // in ground combat, for now everyone is right on top of each other + foreach (var c in Combatants) + locations.Add(c, new IntVector2()); + } + + public override int MaxRounds => Mod.Current.Settings.GroundCombatTurns; + + public override void ModifyHappiness() + { + foreach (var e in Empires) + { + switch (this.ResultFor(e)) + { + case "victory": + if (OriginalPlanetOwner != e) + e.TriggerHappinessChange(hm => hm.EnemyPlanetCaptured); + break; + case "defeat": + if (OriginalPlanetOwner == e) + { + e.TriggerHappinessChange(hm => hm.OurPlanetCaptured); + e.TriggerHappinessChange(hm => hm.OurPlanetLost); + if (Planet.Colony.IsHomeworld) + e.TriggerHappinessChange(hm => hm.OurHomeworldLost); + } + break; + } + + } + } + + public override string Name => $"Ground Battle at {Planet}"; + } +} diff --git a/FrEee/Game/Objects/Combat/Grid/IBattleEvent.cs b/FrEee/Objects/Combat/Grid/IBattleEvent.cs similarity index 60% rename from FrEee/Game/Objects/Combat/Grid/IBattleEvent.cs rename to FrEee/Objects/Combat/Grid/IBattleEvent.cs index a6d876167..4dba263ea 100644 --- a/FrEee/Game/Objects/Combat/Grid/IBattleEvent.cs +++ b/FrEee/Objects/Combat/Grid/IBattleEvent.cs @@ -1,13 +1,13 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; - -namespace FrEee.Game.Objects.Combat.Grid -{ - public interface IBattleEvent - { - IBattle Battle { get; } - ICombatant Combatant { get; } - IntVector2 EndPosition { get; } - IntVector2 StartPosition { get; } - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Objects.Combat.Grid +{ + public interface IBattleEvent + { + IBattle Battle { get; } + ICombatant Combatant { get; } + IntVector2 EndPosition { get; } + IntVector2 StartPosition { get; } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Grid/SpaceBattle.cs b/FrEee/Objects/Combat/Grid/SpaceBattle.cs similarity index 93% rename from FrEee/Game/Objects/Combat/Grid/SpaceBattle.cs rename to FrEee/Objects/Combat/Grid/SpaceBattle.cs index 741e96525..69f8421ea 100644 --- a/FrEee/Game/Objects/Combat/Grid/SpaceBattle.cs +++ b/FrEee/Objects/Combat/Grid/SpaceBattle.cs @@ -1,143 +1,143 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using Microsoft.Scripting.Runtime; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Principal; -using System.Text; -using System.Threading.Tasks; -using static System.Math; - -namespace FrEee.Game.Objects.Combat.Grid -{ - /// - /// A battle which takes place... IIIN... SPAAACE!!! - /// - /// - public class SpaceBattle : Battle - { - public SpaceBattle(Sector location) - : base() - { - Sector = location ?? throw new Exception("Space battles require a sector location."); - - // TODO - what about cloaked ships? should they not participate in combat? - Empires = Sector.SpaceObjects.OfType().Select(sobj => sobj.Owner).Where(emp => emp != null).Distinct().ToArray(); - Combatants = new HashSet(Sector.SpaceObjects.OfType().Where(o => o.Owner != null).Union(Sector.SpaceObjects.OfType().SelectMany(f => f.Combatants)).Where(o => !(o is Fleet))); - - Initialize(new HashSet(Sector.SpaceObjects.OfType().Where(o => o.Owner != null).Union(Sector.SpaceObjects.OfType().SelectMany(f => f.Combatants)).Where(o => !(o is Fleet)))); - } - - public override int DamagePercentage => 100; - - public override void Initialize(IEnumerable combatants) - { - base.Initialize(combatants); - - Empires = Sector.SpaceObjects.OfType().Select(sobj => sobj.Owner).Where(emp => emp != null).Distinct().ToArray(); - - int moduloID = (int)(Sector.StarSystem.ID % 100000); - Dice = new PRNG((int)(moduloID / Galaxy.Current.Timestamp * 10)); - } - - public override void PlaceCombatants(SafeDictionary locations) - { - if (Sector.SpaceObjects.OfType().Any()) - { - // HACK - warp point in sector, assume someone warped - // TODO - do this for warp point exits instead since warp points may be one way - // warp battles start with everyone mashed together to allow blockades - foreach (var c in Combatants.OrderByDescending(q => q.Size)) - PlaceCombatant(locations, 0, 0, c); - } - else - { - // place all combatants at the points of a regular polygon - var sideLength = 20 + (int)Math.Ceiling((double)Combatants.GroupBy(q => q.Owner).Max(q => q.Count())); // make sure no one can shoot each other at the start - // https://stackoverflow.com/questions/32169875/calculating-the-coordinates-of-a-regular-polygon-given-its-center-and-its-side-l - var radius = sideLength / (2 * Sin(PI / Empires.Count())); - var combs = Combatants.ToArray(); - for (int i = 0; i < Empires.Count(); i++) - { - var x = radius * Cos(PI / Empires.Count() * (1 + 2 * i)); - var y = radius * Sin(PI / Empires.Count() * (1 + 2 * i)); - foreach (var comb in Combatants.Where(q => q.Owner == Empires.ElementAt(i)).OrderByDescending(q => q.Size)) - { - PlaceCombatant(locations, x, y, comb); - } - } - } - } - - private void PlaceCombatant(SafeDictionary locations, double x, double y, ICombatant comb) - { - // scramble all tile-filling combatants in rings around the largest - if (comb.FillsCombatTile) - { - for (int r = 0; ; r++) - { - bool done = false; - var tiles = IntVector2.AtRadius(r); - foreach (var tile in tiles.Shuffle(Dice)) - { - var atHere = locations.Where(q => q.Key.FillsCombatTile && q.Value == tile); - if (!atHere.Any()) - { - locations.Add(comb, new IntVector2((int)x + tile.X, (int)y + tile.Y)); - done = true; - break; - } - } - if (done) - break; - } - } - else // put non-filling combatants in the center - locations.Add(comb, new IntVector2((int)x, (int)y)); - } - - /// - /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. - /// - public override string Name - { - get - { - if (Sector.SpaceObjects.OfType().Any()) - return "Battle at " + Sector.SpaceObjects.OfType().Largest(); - var coords = Sector.Coordinates; - return "Battle at " + Sector.StarSystem + " sector (" + coords.X + ", " + coords.Y + ")"; - } - } - - public override int MaxRounds => Mod.Current.Settings.SpaceCombatTurns; - - public override void ModifyHappiness() - { - foreach (var e in Empires) - { - switch (this.ResultFor(e)) - { - case "victory": - e.TriggerHappinessChange(StarSystem, hm => hm.BattleInSystemWin); - e.TriggerHappinessChange(Sector, hm => hm.BattleInSectorWin); - break; - case "defeat": - e.TriggerHappinessChange(StarSystem, hm => hm.BattleInSystemLoss); - e.TriggerHappinessChange(Sector, hm => hm.BattleInSectorLoss); - break; - case "stalemate": - case "Pyrrhic victory": - e.TriggerHappinessChange(StarSystem, hm => hm.BattleInSystemStalemate); - e.TriggerHappinessChange(Sector, hm => hm.BattleInSectorStalemate); - break; - } - } - } - } -} +using FrEee.Interfaces; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using Microsoft.Scripting.Runtime; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Principal; +using System.Text; +using System.Threading.Tasks; +using static System.Math; + +namespace FrEee.Objects.Combat.Grid +{ + /// + /// A battle which takes place... IIIN... SPAAACE!!! + /// + /// + public class SpaceBattle : Battle + { + public SpaceBattle(Sector location) + : base() + { + Sector = location ?? throw new Exception("Space battles require a sector location."); + + // TODO - what about cloaked ships? should they not participate in combat? + Empires = Sector.SpaceObjects.OfType().Select(sobj => sobj.Owner).Where(emp => emp != null).Distinct().ToArray(); + Combatants = new HashSet(Sector.SpaceObjects.OfType().Where(o => o.Owner != null).Union(Sector.SpaceObjects.OfType().SelectMany(f => f.Combatants)).Where(o => !(o is Fleet))); + + Initialize(new HashSet(Sector.SpaceObjects.OfType().Where(o => o.Owner != null).Union(Sector.SpaceObjects.OfType().SelectMany(f => f.Combatants)).Where(o => !(o is Fleet)))); + } + + public override int DamagePercentage => 100; + + public override void Initialize(IEnumerable combatants) + { + base.Initialize(combatants); + + Empires = Sector.SpaceObjects.OfType().Select(sobj => sobj.Owner).Where(emp => emp != null).Distinct().ToArray(); + + int moduloID = (int)(Sector.StarSystem.ID % 100000); + Dice = new PRNG((int)(moduloID / Galaxy.Current.Timestamp * 10)); + } + + public override void PlaceCombatants(SafeDictionary locations) + { + if (Sector.SpaceObjects.OfType().Any()) + { + // HACK - warp point in sector, assume someone warped + // TODO - do this for warp point exits instead since warp points may be one way + // warp battles start with everyone mashed together to allow blockades + foreach (var c in Combatants.OrderByDescending(q => q.Size)) + PlaceCombatant(locations, 0, 0, c); + } + else + { + // place all combatants at the points of a regular polygon + var sideLength = 20 + (int)Math.Ceiling((double)Combatants.GroupBy(q => q.Owner).Max(q => q.Count())); // make sure no one can shoot each other at the start + // https://stackoverflow.com/questions/32169875/calculating-the-coordinates-of-a-regular-polygon-given-its-center-and-its-side-l + var radius = sideLength / (2 * Sin(PI / Empires.Count())); + var combs = Combatants.ToArray(); + for (int i = 0; i < Empires.Count(); i++) + { + var x = radius * Cos(PI / Empires.Count() * (1 + 2 * i)); + var y = radius * Sin(PI / Empires.Count() * (1 + 2 * i)); + foreach (var comb in Combatants.Where(q => q.Owner == Empires.ElementAt(i)).OrderByDescending(q => q.Size)) + { + PlaceCombatant(locations, x, y, comb); + } + } + } + } + + private void PlaceCombatant(SafeDictionary locations, double x, double y, ICombatant comb) + { + // scramble all tile-filling combatants in rings around the largest + if (comb.FillsCombatTile) + { + for (int r = 0; ; r++) + { + bool done = false; + var tiles = IntVector2.AtRadius(r); + foreach (var tile in tiles.Shuffle(Dice)) + { + var atHere = locations.Where(q => q.Key.FillsCombatTile && q.Value == tile); + if (!atHere.Any()) + { + locations.Add(comb, new IntVector2((int)x + tile.X, (int)y + tile.Y)); + done = true; + break; + } + } + if (done) + break; + } + } + else // put non-filling combatants in the center + locations.Add(comb, new IntVector2((int)x, (int)y)); + } + + /// + /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. + /// + public override string Name + { + get + { + if (Sector.SpaceObjects.OfType().Any()) + return "Battle at " + Sector.SpaceObjects.OfType().Largest(); + var coords = Sector.Coordinates; + return "Battle at " + Sector.StarSystem + " sector (" + coords.X + ", " + coords.Y + ")"; + } + } + + public override int MaxRounds => Mod.Current.Settings.SpaceCombatTurns; + + public override void ModifyHappiness() + { + foreach (var e in Empires) + { + switch (this.ResultFor(e)) + { + case "victory": + e.TriggerHappinessChange(StarSystem, hm => hm.BattleInSystemWin); + e.TriggerHappinessChange(Sector, hm => hm.BattleInSectorWin); + break; + case "defeat": + e.TriggerHappinessChange(StarSystem, hm => hm.BattleInSystemLoss); + e.TriggerHappinessChange(Sector, hm => hm.BattleInSectorLoss); + break; + case "stalemate": + case "Pyrrhic victory": + e.TriggerHappinessChange(StarSystem, hm => hm.BattleInSystemStalemate); + e.TriggerHappinessChange(Sector, hm => hm.BattleInSectorStalemate); + break; + } + } + } + } +} diff --git a/FrEee/Game/Objects/Combat/Grid/WeaponFiresEvent.cs b/FrEee/Objects/Combat/Grid/WeaponFiresEvent.cs similarity index 84% rename from FrEee/Game/Objects/Combat/Grid/WeaponFiresEvent.cs rename to FrEee/Objects/Combat/Grid/WeaponFiresEvent.cs index f2be5aa8f..0a55e0d71 100644 --- a/FrEee/Game/Objects/Combat/Grid/WeaponFiresEvent.cs +++ b/FrEee/Objects/Combat/Grid/WeaponFiresEvent.cs @@ -1,49 +1,49 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Technology; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Combat.Grid -{ - public class WeaponFiresEvent : BattleEvent - { - public WeaponFiresEvent(Battle battle, ICombatant attacker, IntVector2 here, ICombatant target, IntVector2 there, Component weapon, Hit hit, bool wasTargetDisarmed) - : base(battle, attacker, here, there) - { - Attacker = attacker; - Target = target; - Weapon = weapon; - Hit = hit; - IsHit = hit != null; - Damage = hit?.NominalDamage ?? 0; - WasTargetDisarmed = wasTargetDisarmed; - } - public bool IsHit { get; set; } - - private GalaxyReference attacker { get; set; } - - private GalaxyReference target { get; set; } - - [DoNotSerialize] - public ICombatant Attacker - { - get => attacker?.Value ?? Battle?.StartCombatants?[attacker.ID]; - set => attacker = value.ReferViaGalaxy(); - } - - [DoNotSerialize] - public ICombatant Target - { - get => target?.Value ?? Battle?.StartCombatants?[target.ID]; - set => target = value.ReferViaGalaxy(); - } - - // TODO - make this some sort of reference? - public Component Weapon { get; set; } - - public Hit Hit { get; set; } - public int Damage { get; set; } - - public bool WasTargetDisarmed { get; set; } - } +using FrEee.Interfaces; +using FrEee.Objects.Technology; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Combat.Grid +{ + public class WeaponFiresEvent : BattleEvent + { + public WeaponFiresEvent(Battle battle, ICombatant attacker, IntVector2 here, ICombatant target, IntVector2 there, Component weapon, Hit hit, bool wasTargetDisarmed) + : base(battle, attacker, here, there) + { + Attacker = attacker; + Target = target; + Weapon = weapon; + Hit = hit; + IsHit = hit != null; + Damage = hit?.NominalDamage ?? 0; + WasTargetDisarmed = wasTargetDisarmed; + } + public bool IsHit { get; set; } + + private GalaxyReference attacker { get; set; } + + private GalaxyReference target { get; set; } + + [DoNotSerialize] + public ICombatant Attacker + { + get => attacker?.Value ?? Battle?.StartCombatants?[attacker.ID]; + set => attacker = value.ReferViaGalaxy(); + } + + [DoNotSerialize] + public ICombatant Target + { + get => target?.Value ?? Battle?.StartCombatants?[target.ID]; + set => target = value.ReferViaGalaxy(); + } + + // TODO - make this some sort of reference? + public Component Weapon { get; set; } + + public Hit Hit { get; set; } + public int Damage { get; set; } + + public bool WasTargetDisarmed { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Hit.cs b/FrEee/Objects/Combat/Hit.cs similarity index 89% rename from FrEee/Game/Objects/Combat/Hit.cs rename to FrEee/Objects/Combat/Hit.cs index e102a2e02..b0703380a 100644 --- a/FrEee/Game/Objects/Combat/Hit.cs +++ b/FrEee/Objects/Combat/Hit.cs @@ -1,75 +1,75 @@ -using System.Collections.Generic; -using FrEee.Game.Interfaces; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Combat -{ - /// - /// A hit by a weapon or other source of damage. - /// - public class Hit : IFormulaHost - { - public Hit(Shot shot, IDamageable target, int? nominalDamage = null) - { - Shot = shot; - DamageType = shot?.DamageType ?? DamageType.Normal; - Target = target; - NominalDamage = nominalDamage ?? shot.DamageLeft; - } - - public Hit(DamageType dt, int damage, IDamageable target) - { - DamageType = dt; - Target = target; - NominalDamage = damage; - } - - public DamageType DamageType { get; set; } - - /// - /// The nominal damage inflicted by this hit, not accounting for special damage types and target defenses. - /// - public int NominalDamage { get; set; } - - /// - /// The shot which inflicted this hit. - /// - public Shot Shot { get; set; } - - /// - /// The specific target of this hit. - /// - [DoNotSerialize] - public IDamageable Target - { - get { return target?.Value ?? _target; } - set - { - if (value is IDamageableReferrable dr) - target = dr.ReferViaGalaxy(); - else - _target = value; - } - } - - public IDictionary Variables - { - get - { - var sv = Shot.Variables; - var result = new SafeDictionary(); - foreach (var v in sv) - result.Add(v); - result["target"] = Target; - return result; - } - } - - private GalaxyReference target { get; set; } - - private IDamageable _target { get; set; } - } +using System.Collections.Generic; +using FrEee.Interfaces; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Combat +{ + /// + /// A hit by a weapon or other source of damage. + /// + public class Hit : IFormulaHost + { + public Hit(Shot shot, IDamageable target, int? nominalDamage = null) + { + Shot = shot; + DamageType = shot?.DamageType ?? DamageType.Normal; + Target = target; + NominalDamage = nominalDamage ?? shot.DamageLeft; + } + + public Hit(DamageType dt, int damage, IDamageable target) + { + DamageType = dt; + Target = target; + NominalDamage = damage; + } + + public DamageType DamageType { get; set; } + + /// + /// The nominal damage inflicted by this hit, not accounting for special damage types and target defenses. + /// + public int NominalDamage { get; set; } + + /// + /// The shot which inflicted this hit. + /// + public Shot Shot { get; set; } + + /// + /// The specific target of this hit. + /// + [DoNotSerialize] + public IDamageable Target + { + get { return target?.Value ?? _target; } + set + { + if (value is IDamageableReferrable dr) + target = dr.ReferViaGalaxy(); + else + _target = value; + } + } + + public IDictionary Variables + { + get + { + var sv = Shot.Variables; + var result = new SafeDictionary(); + foreach (var v in sv) + result.Add(v); + result["target"] = Target; + return result; + } + } + + private GalaxyReference target { get; set; } + + private IDamageable _target { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/IBattle.cs b/FrEee/Objects/Combat/IBattle.cs similarity index 63% rename from FrEee/Game/Objects/Combat/IBattle.cs rename to FrEee/Objects/Combat/IBattle.cs index c7186c425..f20b1bac8 100644 --- a/FrEee/Game/Objects/Combat/IBattle.cs +++ b/FrEee/Objects/Combat/IBattle.cs @@ -1,22 +1,22 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Technology; -using FrEee.Utility; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Combat -{ - public interface IBattle : INamed, IPictorial, ILocated - { - ISet Combatants { get; } - PRNG Dice { get; set; } - IEnumerable Empires { get; } - IList Log { get; } - double Timestamp { get; } - IDictionary StartCombatants { get; } - IDictionary EndCombatants { get; } - - void Resolve(); - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Technology; +using FrEee.Utility; using FrEee.Serialization; +using System.Collections.Generic; + +namespace FrEee.Objects.Combat +{ + public interface IBattle : INamed, IPictorial, ILocated + { + ISet Combatants { get; } + PRNG Dice { get; set; } + IEnumerable Empires { get; } + IList Log { get; } + double Timestamp { get; } + IDictionary StartCombatants { get; } + IDictionary EndCombatants { get; } + + void Resolve(); + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/ProjectileWeaponDisplayEffect.cs b/FrEee/Objects/Combat/ProjectileWeaponDisplayEffect.cs similarity index 89% rename from FrEee/Game/Objects/Combat/ProjectileWeaponDisplayEffect.cs rename to FrEee/Objects/Combat/ProjectileWeaponDisplayEffect.cs index b1a1184f5..87e39b71e 100644 --- a/FrEee/Game/Objects/Combat/ProjectileWeaponDisplayEffect.cs +++ b/FrEee/Objects/Combat/ProjectileWeaponDisplayEffect.cs @@ -1,39 +1,39 @@ -using System; -using System.Drawing; - -namespace FrEee.Game.Objects.Combat -{ - [Serializable] - public class ProjectileWeaponDisplayEffect : WeaponDisplayEffect - { - public ProjectileWeaponDisplayEffect(string name) - : base(name) - { - } - - public override Point GlobalSpriteOffset - { - get { return new Point(); } - } - - public override string GlobalSpriteSheetName - { - get { return "Torps"; } - } - - public override Point ShipsetSpriteOffset - { - get { return new Point(); } - } - - public override string ShipsetSpriteSheetName - { - get { return "Torps"; } - } - - public override Size SpriteSize - { - get { return new Size(20, 20); } - } - } +using System; +using System.Drawing; + +namespace FrEee.Objects.Combat +{ + [Serializable] + public class ProjectileWeaponDisplayEffect : WeaponDisplayEffect + { + public ProjectileWeaponDisplayEffect(string name) + : base(name) + { + } + + public override Point GlobalSpriteOffset + { + get { return new Point(); } + } + + public override string GlobalSpriteSheetName + { + get { return "Torps"; } + } + + public override Point ShipsetSpriteOffset + { + get { return new Point(); } + } + + public override string ShipsetSpriteSheetName + { + get { return "Torps"; } + } + + public override Size SpriteSize + { + get { return new Size(20, 20); } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Seeker.cs b/FrEee/Objects/Combat/Seeker.cs similarity index 92% rename from FrEee/Game/Objects/Combat/Seeker.cs rename to FrEee/Objects/Combat/Seeker.cs index 06a6a85ea..2a4de1cf4 100644 --- a/FrEee/Game/Objects/Combat/Seeker.cs +++ b/FrEee/Objects/Combat/Seeker.cs @@ -1,371 +1,371 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; - -namespace FrEee.Game.Objects.Combat -{ - /// - /// A seeking missile or torpedo. - /// - public class Seeker : ICombatant - { - public Seeker(Sector sector, Empire owner, ICombatant attacker, Component launcher, ICombatant target) - { - Sector = sector; - Owner = owner; - if (launcher.Template.ComponentTemplate.WeaponInfo is SeekingWeaponInfo) - LaunchingComponent = launcher; - else - throw new Exception(launcher + " cannot launch seekers."); - Name = Owner.Name + " " + launcher.Name; - if (WeaponInfo.Targets.HasFlag(target.WeaponTargetType)) - Target = target; - else - throw new Exception(launcher + " cannot target a " + target.WeaponTargetType + "."); - Hitpoints = WeaponInfo.SeekerDurability; // TODO - can mounts affect seeker durability? - CombatSpeed = WeaponInfo.SeekerSpeed; - } - - /// - /// Seekers don't fire so it doesn't really matter... - /// - public int Accuracy - { - get { return 0; } - } - - /// - /// TODO - armored seekers? - /// - public int ArmorHitpoints - { - get { return 0; } - } - - /// - /// The battle in which this seeker was fired. - /// - [DoNotSerialize(false)] - [Obsolete("Seekers don't need to know what battle they're in; this property is obsolete.")] - public IBattle Battle { get; set; } - - public double CombatSpeed { get; set; } - - public Formula Damage - { - get - { - return LaunchingComponent.Template.GetWeaponDamage(1); // TODO - seekers that do different damage based on some sort of abstracted "range" - } - } - - public int DistanceTraveled { get; set; } - - /// - /// Seeker evasion is determined by Settings.txt. - /// TODO - add a field to Components.txt that lets seekers have custom evasion values? - /// - public int Evasion - { - get { return Mod.Current.Settings.SeekerEvasion; } - } - - public int HitChance - { - get { return 1; } - } - - /// - /// The remaining durability of this seeker. - /// - public int Hitpoints { get; set; } - - public int HullHitpoints - { - get { return Hitpoints; } - } - - public Image Icon - { - get { return Portrait; } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return PortraitPaths; - } - } - - public long ID - { - get; - set; - } - - public bool IsAlive => !IsDestroyed; - - public bool IsDestroyed - { - get { return Hitpoints <= 0; } - } - - public bool IsDisposed { get; set; } - - public bool IsMemory - { - get; - set; - } - - /// - /// The combatant which launched the seeker. - /// - public ICombatant LaunchingCombatant { get; private set; } - - /// - /// The component which launched this seeker. - /// - public Component LaunchingComponent { get; private set; } - - public int MaxArmorHitpoints - { - get { return 0; } - } - - public int MaxHitpoints - { - get - { - return WeaponInfo.SeekerDurability; // TODO - let mounts affect seeker HP? - } - } - - public int MaxHullHitpoints - { - get { return MaxHitpoints; } - } - - public int MaxNormalShields - { - get { return 0; } - } - - public int MaxPhasedShields - { - get { return 0; } - } - - public int MaxShieldHitpoints - { - get { return MaxNormalShields + MaxPhasedShields; } - } - - public int MaxTargets => 0; - - /// - /// The name of the seeker. - /// - public string Name { get; private set; } - - /// - /// Seekers do not have shields. - /// TODO - maybe let seekers have shields? - /// - public int NormalShields - { - get - { - return 0; - } - set - { - // do nothing - } - } - - /// - /// The owner of the seeker. - /// - public Empire Owner { get; set; } - - /// - /// Seekers do not have shields. - /// TODO - maybe let seekers have shields? - /// - public int PhasedShields - { - get - { - return 0; - } - set - { - // do nothing - } - } - - public Image Portrait - { - // TODO - custom seeker images per shipset - get { return Pictures.GetGenericImage(1.0); } - } - - public IEnumerable PortraitPaths - { - get - { - var paths = new List(); - - var shipsetPath = Owner.ShipsetPath; - - if (Mod.Current?.RootPath != null) - { - paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, "Seeker")); - paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, shipsetPath + "_" + "Seeker")); - } - paths.Add(Path.Combine("Pictures", "Races", shipsetPath, "Seeker")); - paths.Add(Path.Combine("Pictures", "Races", shipsetPath, shipsetPath + "_" + "Seeker")); - return paths; - } - } - - public Sector Sector - { - get; set; - } - - public int ShieldHitpoints - { - get { return NormalShields + PhasedShields; } - } - - public StarSystem StarSystem - { - get { return Sector.StarSystem; } - } - - /// - /// The target of the seeker. - /// - public ICombatant Target { get; private set; } - - public double Timestamp { get; set; } - - public SeekingWeaponInfo WeaponInfo - { - get { return (SeekingWeaponInfo)LaunchingComponent.Template.ComponentTemplate.WeaponInfo; } - } - - /// - /// Seekers do not carry other weapons. - /// - public IEnumerable Weapons - { - get { return Enumerable.Empty(); } - } - - public WeaponTargets WeaponTargetType - { - get { return WeaponTargets.Seeker; } - } - - public bool CanTarget(ITargetable target) - { - return target != null && LaunchingComponent.Template.ComponentTemplate.WeaponInfo.Targets.HasFlag(target.WeaponTargetType); - } - - public Visibility CheckVisibility(Empire emp) - { - if (Owner == emp) - return Visibility.Owned; - if (Galaxy.Current.Battles.Any(b => - (b.Combatants.Contains(this) - || b.StartCombatants.Values.Contains(this) - || b.EndCombatants.Values.Contains(this)) - && b.Combatants.Any(c => c.Owner == emp))) - return Visibility.Scanned; - return Visibility.Unknown; - } - - public void Dispose() - { - if (IsDisposed) - return; - Target = null; - Galaxy.Current.UnassignID(this); - } - - public bool IsHostileTo(Empire emp) - { - return Owner == null ? false : Owner.IsEnemyOf(emp, StarSystem); - } - - public bool IsObsoleteMemory(Empire emp) - { - return Timestamp < Galaxy.Current.Timestamp - 1; - } - - public void Redact(Empire emp) - { - var vis = CheckVisibility(emp); - if (vis < Visibility.Fogged) - Dispose(); - } - - public int? Repair(int? amount = null) - { - if (amount == null) - { - Hitpoints = MaxHitpoints; - return amount; - } - else - { - var actual = Math.Min(MaxHitpoints - Hitpoints, amount.Value); - Hitpoints += actual; - return amount.Value - actual; - } - } - - public void ReplenishShields(int? amount = null) - { - // do nothing, seekers don't have shields - } - - public int TakeDamage(Hit hit, PRNG dice = null) - { - var damage = hit.Shot.DamageLeft; - damage *= hit.Shot.DamageType.SeekerDamage.Evaluate(this) / 100; - var pierced = damage * hit.Shot.DamageType.ComponentPiercing.Evaluate(this); - int realDamage; - realDamage = Math.Min(Hitpoints, damage); - Hitpoints -= realDamage; - return damage - realDamage; - } - - public override string ToString() - { - return Name; - } - - public IEnumerable Components => Enumerable.Empty(); - - public bool FillsCombatTile => false; - - public int Size => 0; - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; + +namespace FrEee.Objects.Combat +{ + /// + /// A seeking missile or torpedo. + /// + public class Seeker : ICombatant + { + public Seeker(Sector sector, Empire owner, ICombatant attacker, Component launcher, ICombatant target) + { + Sector = sector; + Owner = owner; + if (launcher.Template.ComponentTemplate.WeaponInfo is SeekingWeaponInfo) + LaunchingComponent = launcher; + else + throw new Exception(launcher + " cannot launch seekers."); + Name = Owner.Name + " " + launcher.Name; + if (WeaponInfo.Targets.HasFlag(target.WeaponTargetType)) + Target = target; + else + throw new Exception(launcher + " cannot target a " + target.WeaponTargetType + "."); + Hitpoints = WeaponInfo.SeekerDurability; // TODO - can mounts affect seeker durability? + CombatSpeed = WeaponInfo.SeekerSpeed; + } + + /// + /// Seekers don't fire so it doesn't really matter... + /// + public int Accuracy + { + get { return 0; } + } + + /// + /// TODO - armored seekers? + /// + public int ArmorHitpoints + { + get { return 0; } + } + + /// + /// The battle in which this seeker was fired. + /// + [DoNotSerialize(false)] + [Obsolete("Seekers don't need to know what battle they're in; this property is obsolete.")] + public IBattle Battle { get; set; } + + public double CombatSpeed { get; set; } + + public Formula Damage + { + get + { + return LaunchingComponent.Template.GetWeaponDamage(1); // TODO - seekers that do different damage based on some sort of abstracted "range" + } + } + + public int DistanceTraveled { get; set; } + + /// + /// Seeker evasion is determined by Settings.txt. + /// TODO - add a field to Components.txt that lets seekers have custom evasion values? + /// + public int Evasion + { + get { return Mod.Current.Settings.SeekerEvasion; } + } + + public int HitChance + { + get { return 1; } + } + + /// + /// The remaining durability of this seeker. + /// + public int Hitpoints { get; set; } + + public int HullHitpoints + { + get { return Hitpoints; } + } + + public Image Icon + { + get { return Portrait; } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return PortraitPaths; + } + } + + public long ID + { + get; + set; + } + + public bool IsAlive => !IsDestroyed; + + public bool IsDestroyed + { + get { return Hitpoints <= 0; } + } + + public bool IsDisposed { get; set; } + + public bool IsMemory + { + get; + set; + } + + /// + /// The combatant which launched the seeker. + /// + public ICombatant LaunchingCombatant { get; private set; } + + /// + /// The component which launched this seeker. + /// + public Component LaunchingComponent { get; private set; } + + public int MaxArmorHitpoints + { + get { return 0; } + } + + public int MaxHitpoints + { + get + { + return WeaponInfo.SeekerDurability; // TODO - let mounts affect seeker HP? + } + } + + public int MaxHullHitpoints + { + get { return MaxHitpoints; } + } + + public int MaxNormalShields + { + get { return 0; } + } + + public int MaxPhasedShields + { + get { return 0; } + } + + public int MaxShieldHitpoints + { + get { return MaxNormalShields + MaxPhasedShields; } + } + + public int MaxTargets => 0; + + /// + /// The name of the seeker. + /// + public string Name { get; private set; } + + /// + /// Seekers do not have shields. + /// TODO - maybe let seekers have shields? + /// + public int NormalShields + { + get + { + return 0; + } + set + { + // do nothing + } + } + + /// + /// The owner of the seeker. + /// + public Empire Owner { get; set; } + + /// + /// Seekers do not have shields. + /// TODO - maybe let seekers have shields? + /// + public int PhasedShields + { + get + { + return 0; + } + set + { + // do nothing + } + } + + public Image Portrait + { + // TODO - custom seeker images per shipset + get { return Pictures.GetGenericImage(1.0); } + } + + public IEnumerable PortraitPaths + { + get + { + var paths = new List(); + + var shipsetPath = Owner.ShipsetPath; + + if (Mod.Current?.RootPath != null) + { + paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, "Seeker")); + paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, shipsetPath + "_" + "Seeker")); + } + paths.Add(Path.Combine("Pictures", "Races", shipsetPath, "Seeker")); + paths.Add(Path.Combine("Pictures", "Races", shipsetPath, shipsetPath + "_" + "Seeker")); + return paths; + } + } + + public Sector Sector + { + get; set; + } + + public int ShieldHitpoints + { + get { return NormalShields + PhasedShields; } + } + + public StarSystem StarSystem + { + get { return Sector.StarSystem; } + } + + /// + /// The target of the seeker. + /// + public ICombatant Target { get; private set; } + + public double Timestamp { get; set; } + + public SeekingWeaponInfo WeaponInfo + { + get { return (SeekingWeaponInfo)LaunchingComponent.Template.ComponentTemplate.WeaponInfo; } + } + + /// + /// Seekers do not carry other weapons. + /// + public IEnumerable Weapons + { + get { return Enumerable.Empty(); } + } + + public WeaponTargets WeaponTargetType + { + get { return WeaponTargets.Seeker; } + } + + public bool CanTarget(ITargetable target) + { + return target != null && LaunchingComponent.Template.ComponentTemplate.WeaponInfo.Targets.HasFlag(target.WeaponTargetType); + } + + public Visibility CheckVisibility(Empire emp) + { + if (Owner == emp) + return Visibility.Owned; + if (Galaxy.Current.Battles.Any(b => + (b.Combatants.Contains(this) + || b.StartCombatants.Values.Contains(this) + || b.EndCombatants.Values.Contains(this)) + && b.Combatants.Any(c => c.Owner == emp))) + return Visibility.Scanned; + return Visibility.Unknown; + } + + public void Dispose() + { + if (IsDisposed) + return; + Target = null; + Galaxy.Current.UnassignID(this); + } + + public bool IsHostileTo(Empire emp) + { + return Owner == null ? false : Owner.IsEnemyOf(emp, StarSystem); + } + + public bool IsObsoleteMemory(Empire emp) + { + return Timestamp < Galaxy.Current.Timestamp - 1; + } + + public void Redact(Empire emp) + { + var vis = CheckVisibility(emp); + if (vis < Visibility.Fogged) + Dispose(); + } + + public int? Repair(int? amount = null) + { + if (amount == null) + { + Hitpoints = MaxHitpoints; + return amount; + } + else + { + var actual = Math.Min(MaxHitpoints - Hitpoints, amount.Value); + Hitpoints += actual; + return amount.Value - actual; + } + } + + public void ReplenishShields(int? amount = null) + { + // do nothing, seekers don't have shields + } + + public int TakeDamage(Hit hit, PRNG dice = null) + { + var damage = hit.Shot.DamageLeft; + damage *= hit.Shot.DamageType.SeekerDamage.Evaluate(this) / 100; + var pierced = damage * hit.Shot.DamageType.ComponentPiercing.Evaluate(this); + int realDamage; + realDamage = Math.Min(Hitpoints, damage); + Hitpoints -= realDamage; + return damage - realDamage; + } + + public override string ToString() + { + return Name; + } + + public IEnumerable Components => Enumerable.Empty(); + + public bool FillsCombatTile => false; + + public int Size => 0; + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/SeekerWeaponDisplayEffect.cs b/FrEee/Objects/Combat/SeekerWeaponDisplayEffect.cs similarity index 89% rename from FrEee/Game/Objects/Combat/SeekerWeaponDisplayEffect.cs rename to FrEee/Objects/Combat/SeekerWeaponDisplayEffect.cs index 5fa8c5ddd..9063a8886 100644 --- a/FrEee/Game/Objects/Combat/SeekerWeaponDisplayEffect.cs +++ b/FrEee/Objects/Combat/SeekerWeaponDisplayEffect.cs @@ -1,39 +1,39 @@ -using System; -using System.Drawing; - -namespace FrEee.Game.Objects.Combat -{ - [Serializable] - public class SeekerWeaponDisplayEffect : WeaponDisplayEffect - { - public SeekerWeaponDisplayEffect(string name) - : base(name) - { - } - - public override Point GlobalSpriteOffset - { - get { return new Point(); } - } - - public override string GlobalSpriteSheetName - { - get { return "Seekers"; } - } - - public override Point ShipsetSpriteOffset - { - get { return new Point(40, 0); } - } - - public override string ShipsetSpriteSheetName - { - get { return "Main"; } - } - - public override Size SpriteSize - { - get { return new Size(20, 20); } - } - } +using System; +using System.Drawing; + +namespace FrEee.Objects.Combat +{ + [Serializable] + public class SeekerWeaponDisplayEffect : WeaponDisplayEffect + { + public SeekerWeaponDisplayEffect(string name) + : base(name) + { + } + + public override Point GlobalSpriteOffset + { + get { return new Point(); } + } + + public override string GlobalSpriteSheetName + { + get { return "Seekers"; } + } + + public override Point ShipsetSpriteOffset + { + get { return new Point(40, 0); } + } + + public override string ShipsetSpriteSheetName + { + get { return "Main"; } + } + + public override Size SpriteSize + { + get { return new Size(20, 20); } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Shot.cs b/FrEee/Objects/Combat/Shot.cs similarity index 91% rename from FrEee/Game/Objects/Combat/Shot.cs rename to FrEee/Objects/Combat/Shot.cs index 504bf4ae5..bb9cdaa42 100644 --- a/FrEee/Game/Objects/Combat/Shot.cs +++ b/FrEee/Objects/Combat/Shot.cs @@ -1,127 +1,127 @@ -using System.Collections.Generic; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Combat -{ - /// - /// A weapon's fire, or another source of damage. - /// - public class Shot : IFormulaHost - { - public Shot(ICombatant attacker, Component weapon, IDamageable defender, int range) - { - Attacker = attacker; - Weapon = weapon; - Defender = defender; - Range = range; - DamageLeft = FullDamage; - } - - public GalaxyReference attacker { get; set; } - - [DoNotSerialize] - public ICombatant Attacker { get { return attacker == null ? null : attacker.Value; } set { attacker = value == null ? null : value.ReferViaGalaxy(); } } - - public int DamageLeft { get; private set; } - - public DamageType DamageType - { - get - { - if (Weapon != null && Weapon.Template.ComponentTemplate.WeaponInfo != null) - return Weapon.Template.ComponentTemplate.WeaponInfo.DamageType; - return Mod.Current.DamageTypes.FindByName("Normal") ?? new DamageType(); // TODO - moddable damage types for storms, etc. - } - } - - /// - /// The specific target of this hit. - /// - [DoNotSerialize] - public IDamageable Defender - { - get { return target?.Value ?? _target; } - set - { - if (value is IDamageableReferrable dr) - target = dr.ReferViaGalaxy(); - else - _target = value; - } - } - - /// - /// Effective range for damage purposes, due to mount range modifiers - /// - public int EffectiveRange - { - get - { - var r = Range - (Weapon.Template.Mount == null ? 0 : Weapon.Template.Mount.WeaponRangeModifier.Evaluate(Weapon)); - if (r < 1) - return 1; - return r; - } - } - - public int FullDamage - { - get - { - if (Weapon == null || Range < Weapon.Template.WeaponMinRange || Range > Weapon.Template.WeaponMaxRange) - return 0; - return Weapon.Template.GetWeaponDamage(EffectiveRange); // TODO - use PRNG - } - } - - public IEnumerable Hits { get; private set; } - public int Range { get; set; } - public GalaxyReference target { get; set; } - private IDamageable _target { get; set; } - - public IDictionary Variables - { - get - { - return new Dictionary - { - { "range", Range}, - }; - } - } - - // TODO - make this some sort of reference? - public Component Weapon { get; set; } - - public int InflictDamage(IDamageable target, PRNG dice = null) - { - var hit = new Hit(this, target, DamageLeft); - DamageLeft = target.TakeDamage(hit, dice); - return DamageLeft; - } - - public bool RollAccuracy(PRNG dice = null) - { - var accuracy = Weapon.Template.WeaponAccuracy + Attacker.Accuracy + Mod.Current.Settings.WeaponAccuracyPointBlank - Range * Mod.Current.Settings.WeaponAccuracyLossPerSquare; - int evasion = 0; - if (Defender is ITargetable t) - evasion = t.Evasion; - var netAccuracy = accuracy - evasion; - if (netAccuracy > 99) - netAccuracy = 99; - if (netAccuracy < 1) - netAccuracy = 1; - return RandomHelper.Range(0, 99, dice) < netAccuracy; - } - - public override string ToString() - { - return Attacker + "'s " + Weapon + " vs. " + Defender + " at range " + Range + " (" + DamageLeft + " damage left)"; - } - } +using System.Collections.Generic; +using FrEee.Interfaces; +using FrEee.Objects.Technology; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Combat +{ + /// + /// A weapon's fire, or another source of damage. + /// + public class Shot : IFormulaHost + { + public Shot(ICombatant attacker, Component weapon, IDamageable defender, int range) + { + Attacker = attacker; + Weapon = weapon; + Defender = defender; + Range = range; + DamageLeft = FullDamage; + } + + public GalaxyReference attacker { get; set; } + + [DoNotSerialize] + public ICombatant Attacker { get { return attacker == null ? null : attacker.Value; } set { attacker = value == null ? null : value.ReferViaGalaxy(); } } + + public int DamageLeft { get; private set; } + + public DamageType DamageType + { + get + { + if (Weapon != null && Weapon.Template.ComponentTemplate.WeaponInfo != null) + return Weapon.Template.ComponentTemplate.WeaponInfo.DamageType; + return Mod.Current.DamageTypes.FindByName("Normal") ?? new DamageType(); // TODO - moddable damage types for storms, etc. + } + } + + /// + /// The specific target of this hit. + /// + [DoNotSerialize] + public IDamageable Defender + { + get { return target?.Value ?? _target; } + set + { + if (value is IDamageableReferrable dr) + target = dr.ReferViaGalaxy(); + else + _target = value; + } + } + + /// + /// Effective range for damage purposes, due to mount range modifiers + /// + public int EffectiveRange + { + get + { + var r = Range - (Weapon.Template.Mount == null ? 0 : Weapon.Template.Mount.WeaponRangeModifier.Evaluate(Weapon)); + if (r < 1) + return 1; + return r; + } + } + + public int FullDamage + { + get + { + if (Weapon == null || Range < Weapon.Template.WeaponMinRange || Range > Weapon.Template.WeaponMaxRange) + return 0; + return Weapon.Template.GetWeaponDamage(EffectiveRange); // TODO - use PRNG + } + } + + public IEnumerable Hits { get; private set; } + public int Range { get; set; } + public GalaxyReference target { get; set; } + private IDamageable _target { get; set; } + + public IDictionary Variables + { + get + { + return new Dictionary + { + { "range", Range}, + }; + } + } + + // TODO - make this some sort of reference? + public Component Weapon { get; set; } + + public int InflictDamage(IDamageable target, PRNG dice = null) + { + var hit = new Hit(this, target, DamageLeft); + DamageLeft = target.TakeDamage(hit, dice); + return DamageLeft; + } + + public bool RollAccuracy(PRNG dice = null) + { + var accuracy = Weapon.Template.WeaponAccuracy + Attacker.Accuracy + Mod.Current.Settings.WeaponAccuracyPointBlank - Range * Mod.Current.Settings.WeaponAccuracyLossPerSquare; + int evasion = 0; + if (Defender is ITargetable t) + evasion = t.Evasion; + var netAccuracy = accuracy - evasion; + if (netAccuracy > 99) + netAccuracy = 99; + if (netAccuracy < 1) + netAccuracy = 1; + return RandomHelper.Range(0, 99, dice) < netAccuracy; + } + + public override string ToString() + { + return Attacker + "'s " + Weapon + " vs. " + Defender + " at range " + Range + " (" + DamageLeft + " damage left)"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/Simple/Battle.cs b/FrEee/Objects/Combat/Simple/Battle.cs similarity index 97% rename from FrEee/Game/Objects/Combat/Simple/Battle.cs rename to FrEee/Objects/Combat/Simple/Battle.cs index b2cb7baf8..d5763cf1a 100644 --- a/FrEee/Game/Objects/Combat/Simple/Battle.cs +++ b/FrEee/Objects/Combat/Simple/Battle.cs @@ -1,315 +1,315 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Drawing; - -namespace FrEee.Game.Objects.Combat.Simple -{ - [Obsolete("Simple.Battle is obsolete, use Grid.Battle instead.")] - public class Battle : IBattle - { - static Battle() - { - Current = new HashSet(); - Previous = new HashSet(); - } - - public Battle(Sector location) - { - if (location == null) - throw new Exception("Battles require a sector location."); - Sector = location; - Log = new List(); - Empires = Sector.SpaceObjects.OfType().Select(sobj => sobj.Owner).Where(emp => emp != null).Distinct().ToArray(); - Combatants = new HashSet(Sector.SpaceObjects.OfType().Where(o => o.Owner != null).Union(Sector.SpaceObjects.OfType().SelectMany(f => f.Combatants)).Where(o => !(o is Fleet))); - foreach (var c in Combatants) - { - OriginalHitpoints[c] = c.ArmorHitpoints + c.HullHitpoints; - OriginalOwners[c] = c.Owner; - } - - double stardate = Galaxy.Current.Timestamp; - int moduloID = (int)(Sector.StarSystem.ID % 100000); - Dice = new PRNG((int)(moduloID / stardate * 10)); - Timestamp = stardate; - } - - /// - /// Any battles that are currently ongoing. - /// This is a collection so we can multithread battle resolution if so desired. - /// - public static ICollection Current { get; private set; } - - /// - /// Any battles that have completed this turn. - /// - public static ICollection Previous { get; private set; } - - /// - /// The combatants in this battle. - /// - public ISet Combatants { get; private set; } - - public PRNG Dice { get; set; } - - /// - /// The empires engagaed in battle. - /// - public IEnumerable Empires { get; private set; } - - public System.Drawing.Image Icon - { - get { return Combatants.OfType().Largest().Icon; } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return Combatants.OfType().Largest().IconPaths; - } - } - - public IList Log { get; private set; } - - /// - /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. - /// - public string Name - { - get - { - if (Sector.SpaceObjects.OfType().Any()) - return "Battle at " + Sector.SpaceObjects.OfType().Largest(); - var coords = Sector.Coordinates; - return "Battle at " + Sector.StarSystem + " sector (" + coords.X + ", " + coords.Y + ")"; - } - } - - /// - /// Starting HP of all combatants. - /// - public SafeDictionary OriginalHitpoints { get; private set; } = new SafeDictionary(); - - /// - /// Who originally owned each combatant? - /// - public SafeDictionary OriginalOwners { get; private set; } = new SafeDictionary(); - - public System.Drawing.Image Portrait - { - get { return Combatants.OfType().Largest().Portrait; } - } - - public IEnumerable PortraitPaths - { - get - { - return Combatants.OfType().Largest().PortraitPaths; - } - } - - /// - /// The sector in which this battle took place. - /// - public Sector Sector { get; set; } - - /// - /// The star system in which this battle took place. - /// - public StarSystem StarSystem { get { return Sector.StarSystem; } } - - public double Timestamp { get; private set; } - - public void LogComponentDamage(Component component, int damage) - { - if (component.IsDestroyed) - Log.Add(new PictorialLogMessage(component + " takes " + damage + " damage and is destroyed!", component)); - else - Log.Add(new PictorialLogMessage(component + " takes " + damage + " damage!", component)); - } - - public void LogLaunch(ICombatant craft) - { - Log.Add(new PictorialLogMessage("Launches " + craft + "!", craft)); - } - - public void LogPopulationDamage(Race race, long casualties) - { - Log.Add(race.CreateLogMessage(casualties.ToUnitString(true) + " " + race + " are killed!")); - } - - public void LogRound(int i) - { - Log.Add(new GenericLogMessage("Begin round " + i + "!")); - } - - public void LogSalvo(ICombatant attacker, ICombatant defender, int damage) - { - Log.Add(new PictorialLogMessage(attacker + " attacks " + defender + " for " + damage + " damage!", attacker)); - } - - public void LogSeekerDamage(Seeker seeker, int damage) - { - Log.Add(seeker.CreateLogMessage(seeker + " takes " + damage + " damage!")); - } - - public void LogShieldDamage(ICombatant defender, int damage) - { - Log.Add(new PictorialLogMessage(defender + "'s shields take " + damage + " damage!", defender)); - } - - public void LogShot(Component weapon, bool hit) - { - Log.Add(new PictorialLogMessage("Fires " + weapon + " and " + (hit ? "hits" : "misses") + "!", weapon)); - } - - public void LogTargetDeath(ICombatant defender) - { - Log.Add(new PictorialLogMessage(defender + " is destroyed!", defender)); - } - - /// - /// Resolves the battle. - /// - public void Resolve() - { - // update memories - foreach (var sobj in StarSystem.SpaceObjects.Where(x => !x.IsMemory).ToArray()) - sobj.UpdateEmpireMemories(); - - Current.Add(this); - var reloads = new SafeDictionary(); - var seekers = new Dictionary(); - - // let all combatants scan each other - foreach (var c in Combatants) - c.UpdateEmpireMemories(); - - for (int i = 0; i < Mod.Current.Settings.SpaceCombatTurns; i++) - { - LogRound(i + 1); - // TODO - real 2D combat mechanics - foreach (var seeker in seekers.Keys.ToArray()) - { - seekers[seeker]--; - if (seekers[seeker] <= 0) - { - seekers.Remove(seeker); - var minrng = seeker.LaunchingComponent.Template.WeaponMinRange; - var maxrng = seeker.LaunchingComponent.Template.WeaponMinRange; - var range = Dice.Next(maxrng - minrng) + minrng; // just pick a random valid range - var shot = new Shot(seeker.LaunchingCombatant, seeker.LaunchingComponent, seeker.Target, range); - Log.Add(seeker.CreateLogMessage(seeker + " detonates! " + seeker.Target + " takes " + shot.FullDamage + " damage.")); - seeker.Target.TakeDamage(new Hit(shot, seeker.Target, seeker.Damage.Value)); - } - else - Log.Add(seeker.CreateLogMessage(seeker + " moves closer to " + seeker.Target + " (" + seekers[seeker] + " rounds to detonation)")); - } - foreach (var launcher in Combatants.ToArray()) - { - // find launchable units - var unitsToLaunch = new List(); - if (launcher is Planet) - { - // planets can launch infinite units per turn - var p = (Planet)launcher; - if (p.Cargo != null && p.Cargo.Units != null) - unitsToLaunch.AddRange(p.Cargo.Units.OfType()); - } - else if (launcher is ICargoTransferrer) - { - // ships, etc. can launch units based on abilities - var ct = (ICargoTransferrer)launcher; - foreach (var vt in Enum.GetValues(typeof(VehicleTypes)).Cast().Distinct()) - { - var rate = ct.GetAbilityValue("Launch/Recover " + vt.ToSpacedString() + "s").ToInt(); - unitsToLaunch.AddRange(ct.Cargo.Units.Where(u => u.Design.VehicleType == vt).OfType().Take(rate)); - } - } - - // launch them temporarily for combat - foreach (var unit in unitsToLaunch) - Combatants.Add(unit); - } - foreach (var attacker in Combatants.Shuffle(Dice).Where(sobj => sobj.Weapons.Any()).ToArray()) - { - if (!attacker.IsAlive) - continue; - - var defenders = Combatants.Where(sobj => attacker.CanTarget(sobj) && sobj.IsAlive); - if (!defenders.Any()) - continue; // no one to shoot at - var defender = defenders.PickRandom(Dice); - - int dmg = 0; - foreach (var weapon in attacker.Weapons.Where(w => w.CanTarget(defender))) - { - while (reloads[weapon] <= 0) - { - // fire - var winfo = weapon.Template.ComponentTemplate.WeaponInfo; - if (winfo is SeekingWeaponInfo) - { - // launch a seeker - var swinfo = (SeekingWeaponInfo)winfo; - var seeker = new Seeker(this, attacker.Owner, attacker, weapon, defender); - seekers.Add(seeker, 20 / swinfo.SeekerSpeed); - LogLaunch(seeker); - } - else - { - // direct fire - var minrng = weapon.Template.WeaponMinRange; - var maxrng = weapon.Template.WeaponMinRange; - var range = Dice.Next(maxrng - minrng) + minrng; // just pick a random valid range - var shot = new Shot(attacker, weapon, defender, range); - dmg += shot.FullDamage; - defender.TakeDamage(new Hit(shot, defender, weapon.Template.GetWeaponDamage(range))); - } - // TODO - mounts that affect reload rate? - reloads[weapon] += weapon.Template.ComponentTemplate.WeaponInfo.ReloadRate; - } - - // reload - reloads[weapon] -= 1; - } - LogSalvo(attacker, defender, dmg); - } - } - - // validate fleets since some ships might have died - foreach (var fleet in Sector.SpaceObjects.OfType()) - fleet.Validate(); - - // replenish combatants' shields - foreach (var combatant in Sector.SpaceObjects.OfType()) - combatant.ReplenishShields(); - - // mark battle complete - Current.Remove(this); - Previous.Add(this); - - // update memories - foreach (var sobj in Combatants.OfType().Where(x => !x.IsMemory).ToArray()) - { - foreach (var emp in Empires) - { - emp.UpdateMemory(sobj); ; - } - } - } - } +using FrEee.Game.Enumerations; +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Civilization; +using FrEee.Game.Objects.LogMessages; +using FrEee.Game.Objects.Space; +using FrEee.Game.Objects.Technology; +using FrEee.Game.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Utility; +using FrEee.Utility.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Drawing; + +namespace FrEee.Game.Objects.Combat.Simple +{ + [Obsolete("Simple.Battle is obsolete, use Grid.Battle instead.")] + public class Battle : IBattle + { + static Battle() + { + Current = new HashSet(); + Previous = new HashSet(); + } + + public Battle(Sector location) + { + if (location == null) + throw new Exception("Battles require a sector location."); + Sector = location; + Log = new List(); + Empires = Sector.SpaceObjects.OfType().Select(sobj => sobj.Owner).Where(emp => emp != null).Distinct().ToArray(); + Combatants = new HashSet(Sector.SpaceObjects.OfType().Where(o => o.Owner != null).Union(Sector.SpaceObjects.OfType().SelectMany(f => f.Combatants)).Where(o => !(o is Fleet))); + foreach (var c in Combatants) + { + OriginalHitpoints[c] = c.ArmorHitpoints + c.HullHitpoints; + OriginalOwners[c] = c.Owner; + } + + double stardate = Galaxy.Current.Timestamp; + int moduloID = (int)(Sector.StarSystem.ID % 100000); + Dice = new PRNG((int)(moduloID / stardate * 10)); + Timestamp = stardate; + } + + /// + /// Any battles that are currently ongoing. + /// This is a collection so we can multithread battle resolution if so desired. + /// + public static ICollection Current { get; private set; } + + /// + /// Any battles that have completed this turn. + /// + public static ICollection Previous { get; private set; } + + /// + /// The combatants in this battle. + /// + public ISet Combatants { get; private set; } + + public PRNG Dice { get; set; } + + /// + /// The empires engagaed in battle. + /// + public IEnumerable Empires { get; private set; } + + public System.Drawing.Image Icon + { + get { return Combatants.OfType().Largest().Icon; } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return Combatants.OfType().Largest().IconPaths; + } + } + + public IList Log { get; private set; } + + /// + /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. + /// + public string Name + { + get + { + if (Sector.SpaceObjects.OfType().Any()) + return "Battle at " + Sector.SpaceObjects.OfType().Largest(); + var coords = Sector.Coordinates; + return "Battle at " + Sector.StarSystem + " sector (" + coords.X + ", " + coords.Y + ")"; + } + } + + /// + /// Starting HP of all combatants. + /// + public SafeDictionary OriginalHitpoints { get; private set; } = new SafeDictionary(); + + /// + /// Who originally owned each combatant? + /// + public SafeDictionary OriginalOwners { get; private set; } = new SafeDictionary(); + + public System.Drawing.Image Portrait + { + get { return Combatants.OfType().Largest().Portrait; } + } + + public IEnumerable PortraitPaths + { + get + { + return Combatants.OfType().Largest().PortraitPaths; + } + } + + /// + /// The sector in which this battle took place. + /// + public Sector Sector { get; set; } + + /// + /// The star system in which this battle took place. + /// + public StarSystem StarSystem { get { return Sector.StarSystem; } } + + public double Timestamp { get; private set; } + + public void LogComponentDamage(Component component, int damage) + { + if (component.IsDestroyed) + Log.Add(new PictorialLogMessage(component + " takes " + damage + " damage and is destroyed!", component)); + else + Log.Add(new PictorialLogMessage(component + " takes " + damage + " damage!", component)); + } + + public void LogLaunch(ICombatant craft) + { + Log.Add(new PictorialLogMessage("Launches " + craft + "!", craft)); + } + + public void LogPopulationDamage(Race race, long casualties) + { + Log.Add(race.CreateLogMessage(casualties.ToUnitString(true) + " " + race + " are killed!")); + } + + public void LogRound(int i) + { + Log.Add(new GenericLogMessage("Begin round " + i + "!")); + } + + public void LogSalvo(ICombatant attacker, ICombatant defender, int damage) + { + Log.Add(new PictorialLogMessage(attacker + " attacks " + defender + " for " + damage + " damage!", attacker)); + } + + public void LogSeekerDamage(Seeker seeker, int damage) + { + Log.Add(seeker.CreateLogMessage(seeker + " takes " + damage + " damage!")); + } + + public void LogShieldDamage(ICombatant defender, int damage) + { + Log.Add(new PictorialLogMessage(defender + "'s shields take " + damage + " damage!", defender)); + } + + public void LogShot(Component weapon, bool hit) + { + Log.Add(new PictorialLogMessage("Fires " + weapon + " and " + (hit ? "hits" : "misses") + "!", weapon)); + } + + public void LogTargetDeath(ICombatant defender) + { + Log.Add(new PictorialLogMessage(defender + " is destroyed!", defender)); + } + + /// + /// Resolves the battle. + /// + public void Resolve() + { + // update memories + foreach (var sobj in StarSystem.SpaceObjects.Where(x => !x.IsMemory).ToArray()) + sobj.UpdateEmpireMemories(); + + Current.Add(this); + var reloads = new SafeDictionary(); + var seekers = new Dictionary(); + + // let all combatants scan each other + foreach (var c in Combatants) + c.UpdateEmpireMemories(); + + for (int i = 0; i < Mod.Current.Settings.SpaceCombatTurns; i++) + { + LogRound(i + 1); + // TODO - real 2D combat mechanics + foreach (var seeker in seekers.Keys.ToArray()) + { + seekers[seeker]--; + if (seekers[seeker] <= 0) + { + seekers.Remove(seeker); + var minrng = seeker.LaunchingComponent.Template.WeaponMinRange; + var maxrng = seeker.LaunchingComponent.Template.WeaponMinRange; + var range = Dice.Next(maxrng - minrng) + minrng; // just pick a random valid range + var shot = new Shot(seeker.LaunchingCombatant, seeker.LaunchingComponent, seeker.Target, range); + Log.Add(seeker.CreateLogMessage(seeker + " detonates! " + seeker.Target + " takes " + shot.FullDamage + " damage.")); + seeker.Target.TakeDamage(new Hit(shot, seeker.Target, seeker.Damage.Value)); + } + else + Log.Add(seeker.CreateLogMessage(seeker + " moves closer to " + seeker.Target + " (" + seekers[seeker] + " rounds to detonation)")); + } + foreach (var launcher in Combatants.ToArray()) + { + // find launchable units + var unitsToLaunch = new List(); + if (launcher is Planet) + { + // planets can launch infinite units per turn + var p = (Planet)launcher; + if (p.Cargo != null && p.Cargo.Units != null) + unitsToLaunch.AddRange(p.Cargo.Units.OfType()); + } + else if (launcher is ICargoTransferrer) + { + // ships, etc. can launch units based on abilities + var ct = (ICargoTransferrer)launcher; + foreach (var vt in Enum.GetValues(typeof(VehicleTypes)).Cast().Distinct()) + { + var rate = ct.GetAbilityValue("Launch/Recover " + vt.ToSpacedString() + "s").ToInt(); + unitsToLaunch.AddRange(ct.Cargo.Units.Where(u => u.Design.VehicleType == vt).OfType().Take(rate)); + } + } + + // launch them temporarily for combat + foreach (var unit in unitsToLaunch) + Combatants.Add(unit); + } + foreach (var attacker in Combatants.Shuffle(Dice).Where(sobj => sobj.Weapons.Any()).ToArray()) + { + if (!attacker.IsAlive) + continue; + + var defenders = Combatants.Where(sobj => attacker.CanTarget(sobj) && sobj.IsAlive); + if (!defenders.Any()) + continue; // no one to shoot at + var defender = defenders.PickRandom(Dice); + + int dmg = 0; + foreach (var weapon in attacker.Weapons.Where(w => w.CanTarget(defender))) + { + while (reloads[weapon] <= 0) + { + // fire + var winfo = weapon.Template.ComponentTemplate.WeaponInfo; + if (winfo is SeekingWeaponInfo) + { + // launch a seeker + var swinfo = (SeekingWeaponInfo)winfo; + var seeker = new Seeker(this, attacker.Owner, attacker, weapon, defender); + seekers.Add(seeker, 20 / swinfo.SeekerSpeed); + LogLaunch(seeker); + } + else + { + // direct fire + var minrng = weapon.Template.WeaponMinRange; + var maxrng = weapon.Template.WeaponMinRange; + var range = Dice.Next(maxrng - minrng) + minrng; // just pick a random valid range + var shot = new Shot(attacker, weapon, defender, range); + dmg += shot.FullDamage; + defender.TakeDamage(new Hit(shot, defender, weapon.Template.GetWeaponDamage(range))); + } + // TODO - mounts that affect reload rate? + reloads[weapon] += weapon.Template.ComponentTemplate.WeaponInfo.ReloadRate; + } + + // reload + reloads[weapon] -= 1; + } + LogSalvo(attacker, defender, dmg); + } + } + + // validate fleets since some ships might have died + foreach (var fleet in Sector.SpaceObjects.OfType()) + fleet.Validate(); + + // replenish combatants' shields + foreach (var combatant in Sector.SpaceObjects.OfType()) + combatant.ReplenishShields(); + + // mark battle complete + Current.Remove(this); + Previous.Add(this); + + // update memories + foreach (var sobj in Combatants.OfType().Where(x => !x.IsMemory).ToArray()) + { + foreach (var emp in Empires) + { + emp.UpdateMemory(sobj); ; + } + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat/WeaponDisplayEffect.cs b/FrEee/Objects/Combat/WeaponDisplayEffect.cs similarity index 92% rename from FrEee/Game/Objects/Combat/WeaponDisplayEffect.cs rename to FrEee/Objects/Combat/WeaponDisplayEffect.cs index 8f3255e6a..96afc3ab2 100644 --- a/FrEee/Game/Objects/Combat/WeaponDisplayEffect.cs +++ b/FrEee/Objects/Combat/WeaponDisplayEffect.cs @@ -1,146 +1,146 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; - -namespace FrEee.Game.Objects.Combat -{ - /// - /// The display effect to use for a weapon in combat. - /// - [Serializable] - public abstract class WeaponDisplayEffect : IPictorial - { - protected WeaponDisplayEffect(string name) - { - Name = name; - } - - /// - /// The pixel offset to the first sprite in the global sprite sheet. - /// - public abstract Point GlobalSpriteOffset { get; } - - public Image GlobalSpriteSheet - { - get - { - return Pictures.GetModImage(Path.Combine("Pictures", "Combat", GlobalSpriteSheetName)); - } - } - - /// - /// The name of the sprite sheet to use. - /// - public abstract string GlobalSpriteSheetName { get; } - - public Image Icon - { - get { return GetIcon(null); } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - yield return Path.Combine("Races", "Default", Name); - yield return Path.Combine("Races", "Default", "Default" + "_" + Name); - yield return Path.Combine("Combat", Name); - } - } - - /// - /// The name or index of the effect to use. - /// - public string Name { get; set; } - - public Image Portrait - { - get { return Icon; } - } - - public IEnumerable PortraitPaths - { - get - { - return IconPaths; - } - } - - /// - /// The pixel offset to the first sprite in the shipset-specific sprite sheet. - /// - public abstract Point ShipsetSpriteOffset { get; } - - /// - /// The name of the sprite sheet to use. - /// - public abstract string ShipsetSpriteSheetName { get; } - - /// - /// The size of each sprite, in pixels. - /// - public abstract Size SpriteSize { get; } - - public Image GetIcon(string shipset) - { - // see if we have a positive number to use a sprite sheet - int index = 0; - int.TryParse(Name, out index); - - if (index > 0) - { - // use sprite sheets - var shipsetSpriteSheet = LoadShipsetSpriteSheet(shipset); - Image spriteSheet; - Point offset; - if (shipsetSpriteSheet != null) - { - // crop shipset sprite sheet - spriteSheet = shipsetSpriteSheet; - offset = ShipsetSpriteOffset; - } - else if (GlobalSpriteSheet != null) - { - // crop global sprite sheet - spriteSheet = GlobalSpriteSheet; - offset = GlobalSpriteOffset; - } - else - { - // no sprite sheets found - return Pictures.GetModImage( - Path.Combine("Pictures", "Races", shipset, Name), - Path.Combine("Pictures", "Races", shipset, shipset + "_" + Name), - Path.Combine("Pictures", "Combat", Name)); - } - - // make sprite - var spritesAcross = (spriteSheet.Width - offset.X) / SpriteSize.Width; - var num = index - 1; - var row = num / spritesAcross; - var col = num % spritesAcross; - var pos = new Point(offset.X + SpriteSize.Width * col, offset.Y + SpriteSize.Height * row); - return spriteSheet.Crop(pos, SpriteSize); - } - else - { - // use individual sprites - return Pictures.GetModImage( - Path.Combine("Pictures", "Races", shipset, Name), - Path.Combine("Pictures", "Races", shipset, shipset + "_" + Name), - Path.Combine("Pictures", "Combat", Name)); - } - } - - public Image LoadShipsetSpriteSheet(string shipset) - { - return Pictures.GetModImage(Path.Combine("Pictures", "Races", shipset, ShipsetSpriteSheetName)); - } - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; + +namespace FrEee.Objects.Combat +{ + /// + /// The display effect to use for a weapon in combat. + /// + [Serializable] + public abstract class WeaponDisplayEffect : IPictorial + { + protected WeaponDisplayEffect(string name) + { + Name = name; + } + + /// + /// The pixel offset to the first sprite in the global sprite sheet. + /// + public abstract Point GlobalSpriteOffset { get; } + + public Image GlobalSpriteSheet + { + get + { + return Pictures.GetModImage(Path.Combine("Pictures", "Combat", GlobalSpriteSheetName)); + } + } + + /// + /// The name of the sprite sheet to use. + /// + public abstract string GlobalSpriteSheetName { get; } + + public Image Icon + { + get { return GetIcon(null); } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + yield return Path.Combine("Races", "Default", Name); + yield return Path.Combine("Races", "Default", "Default" + "_" + Name); + yield return Path.Combine("Combat", Name); + } + } + + /// + /// The name or index of the effect to use. + /// + public string Name { get; set; } + + public Image Portrait + { + get { return Icon; } + } + + public IEnumerable PortraitPaths + { + get + { + return IconPaths; + } + } + + /// + /// The pixel offset to the first sprite in the shipset-specific sprite sheet. + /// + public abstract Point ShipsetSpriteOffset { get; } + + /// + /// The name of the sprite sheet to use. + /// + public abstract string ShipsetSpriteSheetName { get; } + + /// + /// The size of each sprite, in pixels. + /// + public abstract Size SpriteSize { get; } + + public Image GetIcon(string shipset) + { + // see if we have a positive number to use a sprite sheet + int index = 0; + int.TryParse(Name, out index); + + if (index > 0) + { + // use sprite sheets + var shipsetSpriteSheet = LoadShipsetSpriteSheet(shipset); + Image spriteSheet; + Point offset; + if (shipsetSpriteSheet != null) + { + // crop shipset sprite sheet + spriteSheet = shipsetSpriteSheet; + offset = ShipsetSpriteOffset; + } + else if (GlobalSpriteSheet != null) + { + // crop global sprite sheet + spriteSheet = GlobalSpriteSheet; + offset = GlobalSpriteOffset; + } + else + { + // no sprite sheets found + return Pictures.GetModImage( + Path.Combine("Pictures", "Races", shipset, Name), + Path.Combine("Pictures", "Races", shipset, shipset + "_" + Name), + Path.Combine("Pictures", "Combat", Name)); + } + + // make sprite + var spritesAcross = (spriteSheet.Width - offset.X) / SpriteSize.Width; + var num = index - 1; + var row = num / spritesAcross; + var col = num % spritesAcross; + var pos = new Point(offset.X + SpriteSize.Width * col, offset.Y + SpriteSize.Height * row); + return spriteSheet.Crop(pos, SpriteSize); + } + else + { + // use individual sprites + return Pictures.GetModImage( + Path.Combine("Pictures", "Races", shipset, Name), + Path.Combine("Pictures", "Races", shipset, shipset + "_" + Name), + Path.Combine("Pictures", "Combat", Name)); + } + } + + public Image LoadShipsetSpriteSheet(string shipset) + { + return Pictures.GetModImage(Path.Combine("Pictures", "Races", shipset, ShipsetSpriteSheetName)); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat2/Battle_Space.cs b/FrEee/Objects/Combat2/Battle_Space.cs similarity index 97% rename from FrEee/Game/Objects/Combat2/Battle_Space.cs rename to FrEee/Objects/Combat2/Battle_Space.cs index a42b1b324..869f24199 100644 --- a/FrEee/Game/Objects/Combat2/Battle_Space.cs +++ b/FrEee/Objects/Combat2/Battle_Space.cs @@ -1,1444 +1,1444 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using NewtMath.f16; - -using FixMath.NET; -using FrEee.Game.Objects.Combat; - -namespace FrEee.Game.Objects.Combat2 -{ - public class Battle_Space : INamed, ILocated, IPictorial, IFoggable - { - /// - /// Standard battlespace constructor. - /// - /// - /// - public Battle_Space(Sector location) - { - if (location == null) - throw new ArgumentNullException("location", "Battles require a sector location."); - else - { - Sector = location; - Timestamp = Galaxy.Current?.Timestamp ?? 0; - Initialize(location.SpaceObjects.OfType().Where(o => !o.IsMemory && o.Owner != null).Union(location.SpaceObjects.OfType().Where(f => !f.IsMemory).SelectMany(f => f.Combatants))); - } - } - - /// - /// Battlespace constructor for unit tests (doesn't need a sector; will create a fake sector). - /// - /// - /// - public Battle_Space(IEnumerable combatants) - { - this.Sector = new Sector(new StarSystem(0), new System.Drawing.Point()); - Initialize(combatants); - - } - - private void Initialize(IEnumerable combatants) - { - double stardate = Timestamp; - int moduloID = (int)(Sector.StarSystem.ID % 100000); - this.battleseed = (int)(moduloID / stardate * 10); - - EmpiresArray = combatants.Select(c => c.Owner).Where(emp => emp != null).Distinct().ToArray(); - Empires = new Dictionary { }; - - StartCombatants = new Dictionary(); - ActualCombatants = combatants.ToDictionary(c => c.ID); - EndCombatants = new Dictionary(); - CombatNodes = new HashSet(); - StartNodes = new HashSet(); - FreshNodes = new HashSet(); - DeadNodes = new HashSet(); - CombatFleets = new Dictionary { }; - foreach (var fleet in Sector.SpaceObjects.OfType()) - { - CombatFleet cfleet = new CombatFleet(fleet); - CombatFleets.Add(cfleet.Name, cfleet); - } - - foreach (ICombatant obj in combatants) - { - ICombatant copy = obj.CopyAndAssignNewID();//obj.Copy(); - copy.IsMemory = true; - - if (obj is SpaceVehicle) - { - SpaceVehicle scopy = (SpaceVehicle)copy; - - StartCombatants.Add(obj.ID, scopy); - CombatVehicle comObj = new CombatVehicle(scopy, (SpaceVehicle)obj, battleseed, obj.ID); - StartNodes.Add(comObj); - if (scopy.Container != null) - { - CombatFleet comfleet = CombatFleets[scopy.Container.Name]; - comfleet.combatObjects.Add(comObj); - comObj.combatfleet = comfleet; - } - } - else if (obj is Planet) - { - Planet pcopy = (Planet)copy; - - StartCombatants.Add(obj.ID, pcopy); - CombatPlanet comObj = new CombatPlanet(pcopy, (Planet)obj, battleseed, obj.ID); - StartNodes.Add(comObj); - } - else - { - Console.Error.WriteLine("Unknown ICombatant type found in " + this + ": " + obj.GetType()); - } - } - - - //ReplayLog = new CombatReplayLog(); - - - } - - static Battle_Space() - { - Current = new HashSet(); - } - - - #region fields & properties - /// - /// whether or not this is a processing(false) or a replay(true) - /// - [Obsolete("Battle replays are now complete reenactments; this flag is unnecessary.")] - public bool IsReplay { get; set; } - - /// - /// seed for this battle. - /// - private int battleseed { get; set; } - - /// - /// Any battles that are currently ongoing. - /// This is a collection so we can multithread battle resolution if so desired. - /// - public static ICollection Current { get; private set; } - - /// - /// Any battles that have completed this turn. - /// - public static ICollection Previous { get { return Galaxy.Current.Battles; } } - - /// - /// The sector in which this battle took place. - /// - public Sector Sector { get; set; } - - /// - /// The star system in which this battle took place. - /// - public StarSystem StarSystem { get { return Sector.StarSystem; } } - - /// - /// The empires engagaed in battle. - /// - public IEnumerable EmpiresArray { get; private set; } - public Dictionary Empires { get; private set; } - - /// - /// The combatants at the start of this battle. - /// - [DoNotAssignID(true)] - public IDictionary StartCombatants { get; private set; } - - /// - /// The REAL combatants objects. - /// - [DoNotSerialize] - public IDictionary ActualCombatants { get; private set; } - - /// - /// The combatants at the end of this battle. - /// - [DoNotAssignID(true)] - public IDictionary EndCombatants { get; private set; } - - /// - /// combat fleets - /// - public IDictionary CombatFleets { get; private set; } - - /// - /// All combat nodes in this battle, including ships, fighters, seekers, projectiles, etc. - /// - public ISet CombatNodes { get; private set; } - - /// - /// these are objects at the beginning of the combat. - /// - public ISet StartNodes { get; private set; } - - /// - /// objects go here when they're created during combat, so the replay can create the graphic ojects) - /// Objects Not Launched or Created during combat should not go here, (ie not objects at combat start) - /// - public ISet FreshNodes { get; set; } - - /// - /// objects go here to die. (this is so replay can clean up the graphic objects) - /// ONLY OBJECTS CREATED *DURING* combat should go here. (or Replaysetup() won't have all the objects. humn, how' we going to diferentiate for launchable cargo, ie fighters?) - /// Maybe we need StartNodes as well, and have Replaysetup() go from that. and it won't matter. - /// - public ISet DeadNodes { get; set; } - - /// - /// Combat nodes that have an AI attached to them. - /// This includes ships, bases, units, and seekers. - /// - public IEnumerable CombatObjects - { - get - { - return CombatNodes.OfType(); - } - } - - /// - /// Combat nodes that represent vehicles. - /// This includes ships, bases, and units. - /// - public IEnumerable CombatVehicles - { - get - { - return CombatNodes.OfType(); - } - } - - /// - /// Combat nodes that represent controllable objects. - /// This includes vehicles and planets. - /// - public IEnumerable ControlledCombatObjects - { - get - { - return CombatNodes.OfType(); - } - } - - /// - /// the Fleets in this battle - /// - //public ICollection Fleets { get; private set; } - - [Obsolete("Battle replays are now complete reenactments; this log is not populated anymore.")] - public CombatReplayLog ReplayLog { get; private set; } - - public Sector sectoratStart { get; private set; } - - /// - /// Combat sim temporal resolution. - /// physics gets calculated every tick. - /// - public const int TicksPerSecond = 10; - - /// - /// Physics tick length in seconds. - /// One SE4 combat round is taken to be one second. - /// - public static readonly Fix16 TickLength = (Fix16)1 / (Fix16)TicksPerSecond; - - /// - /// Number of seconds between commands. (accelerate, target, etc.) - /// - public static readonly Fix16 CommandFrequencySeconds = 1; - - /// - /// Number of ticks between commands. (accelerate, target, etc.) - /// - public static readonly int CommandFrequencyTicks = CommandFrequencySeconds * TicksPerSecond; - - /// - /// Number of kilometers per "combat square" in SE4 terms (for range calculations). - /// - public static readonly Fix16 KilometersPerSquare = 10; - - private int tOC = 0; - private int tempObjCounter - { - get - { -#if DEBUG - Console.WriteLine("TempObjCounter :" + tOC); -#endif - return tOC++; - } - } - - /// - /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. - /// - public string Name - { - get - { - return "Battle at " + Location; - } - } - - /// - /// The result (victory/defeat/stalemate) for a given empire. - /// If empire or its allies are not involved or no empire specified, just say "battle". - /// - /// - /// - public string ResultFor(Empire emp) - { - if (emp == null) - return "battle"; // no empire specified - if (!StartCombatants.Values.Any(c => c.Owner == emp || c.Owner.IsAllyOf(emp, StarSystem))) - return "battle"; // empire/allies not involved - var survivors = EndCombatants.Values.Where(c => !c.IsDestroyed && c.Owner != null); // glassed planets aren't destroyed but they do have null owners - var ourSurvivors = survivors.Where(c => c.Owner == emp); - var allySurvivors = survivors.Where(c => c.Owner.IsAllyOf(emp, StarSystem)); - var friendlySurvivors = ourSurvivors.Union(allySurvivors); - var enemySurvivors = survivors.Where(c => c.Owner.IsEnemyOf(emp, StarSystem)); - if (friendlySurvivors.Any() && enemySurvivors.Any()) - return "stalemate"; - if (friendlySurvivors.Any()) - return "victory"; - if (enemySurvivors.Any()) - return "defeat"; - return "Pyrrhic victory"; // mutual annihilation! - } - - /// - /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. - /// - public string NameFor(Empire emp) - { - return ResultFor(emp).Capitalize() + " at " + Location; - } - - /// - /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. - /// - public string Location - { - get - { - if (Sector.SpaceObjects.OfType().Any()) - return Sector.SpaceObjects.OfType().Largest().Name; - var coords = Sector.Coordinates; - return Sector.StarSystem + " sector (" + coords.X + ", " + coords.Y + ")"; - } - } - - #endregion - - private void FirstSetup() - { -#if DEBUG - Console.WriteLine("Beginning Processing Setup"); - Console.WriteLine("Adding Empires"); -#endif - foreach (Empire empire in EmpiresArray.Where(e => !Empires.ContainsKey(e))) - { - Empires.Add(empire, new CombatEmpire()); -#if DEBUG - Console.Write("."); -#endif - } -#if DEBUG - Console.WriteLine("Done"); -#endif -#if DEBUG - Console.WriteLine("Creating IFF lists"); -#endif - foreach (CombatObject comObj in StartNodes) - { - if (comObj is CombatControlledObject) - { -#if DEBUG - Console.WriteLine("Getting Empire for this ship"); -#endif - Empire thisemp = ((CombatControlledObject)comObj).StartCombatant.Owner; -#if DEBUG - Console.WriteLine("Done"); -#endif - Empires[thisemp].ownships.Add(comObj); -#if DEBUG - Console.Write("."); -#endif - } - } -#if DEBUG - Console.WriteLine("Done Initial Setup"); -#endif - CombatNodes = StartNodes; - } - - /*private void ReplaySetup() - { -#if DEBUG - Console.WriteLine("Beginning Replay Setup"); - - Console.WriteLine("Creating IFF lists"); -#endif - foreach (CombatEmpire emp in Empires.Values) - { - emp.renewtostart(); - } - foreach (CombatObject comObj in StartNodes) - { - comObj.renewtoStart(); - if (comObj is CombatControlledObject) - { -#if DEBUG - Console.WriteLine("Getting Empire for this ship"); -#endif - Empire thisemp = ((CombatControlledObject)comObj).StartCombatant.Owner; -#if DEBUG - Console.WriteLine("Done"); -#endif - Empires[thisemp].ownships.Add(comObj); -#if DEBUG - Console.Write("."); -#endif - } -#if DEBUG - Console.Write("."); -#endif - } -#if DEBUG - Console.WriteLine("Done"); -#endif - CombatNodes = StartNodes; - }*/ - - private bool AnyWeaponsInRange - { - get - { - foreach (var ccobj in ControlledCombatObjects) - { - foreach (var target in ControlledCombatObjects) - { - if (ccobj.StartCombatant.IsHostileTo(target.StartCombatant.Owner)) - { - foreach (var w in ccobj.Weapons) - { - if (w.isinRange(ccobj, target)) - return true; - } - } - } - } - return false; - // return ControlledCombatObjects.Any(ccobj => ccobj.Weapons.Any(w => ControlledCombatObjects.Any(target => ccobj.StartCombatant.IsHostileTo(target.StartCombatant.Owner) && w.isinRange(ccobj, target))))); - } - } - - public void SetUpPieces() - { -#if DEBUG - Console.WriteLine("Setting up combat Objects"); -#endif - tOC = 0; //reset temp object counter. - - - //if (!IsReplay) - FirstSetup(); - //else -// ReplaySetup(); - - //setup the game peice locations - - // sides start this distance from the center of the combat arena. - // start at range of one square, see if any weapons are in range, if so move ships out a bit - Fix16 empstartrange = KilometersPerSquare; - do - { - // find where each empire's forces will start - PointXd[] empstartpoints = new PointXd[EmpiresArray.Count()]; - Compass empstartangle = new Compass((Fix16)360 / (Fix16)EmpiresArray.Count(), false); - for (int i = 0; i <= EmpiresArray.Count() - 1; i++) - { - Fix16 angleoffset = empstartangle.Radians * (Fix16)i; - empstartpoints[i] = new PointXd(Trig.sides_ab(empstartrange, angleoffset)); - } - - // place ships - foreach (var ccobj in ControlledCombatObjects) - { - if (ccobj.empire == null) - ccobj.empire = Empires[ccobj.StartCombatant.Owner]; - if (ccobj.strategy == null) - ccobj.strategy = new StragegyObject_Default(); - - int numobjs = ccobj.empire.ownships.Count; - - int empindex = EmpiresArray.IndexOf(ccobj.StartCombatant.Owner); - PointXd fleetloc = new PointXd(empstartpoints[empindex]); - Compass fleetheading = new Compass(fleetloc, new PointXd(0, 0, 0)); // todo have the ships face the other fleet if persuing or towards the sector they were heading if not persuing. - - int distancebetweenships = 250 * ccobj.empire.ownships.IndexOf(ccobj); - Compass posanglefromfleetheading = new Compass(90, false); - - PointXd shiploc = Trig.sides_ab(distancebetweenships, fleetheading.Degrees - posanglefromfleetheading.Degrees); - - ccobj.cmbt_loc = fleetloc + shiploc; //todo add offeset from this for each ship put in a formation (atm this is just all ships in one position) ie + PointXd(x,y,z) - ccobj.cmbt_head = new Compass(fleetheading.Degrees, false); - ccobj.cmbt_att = new Compass(0); - Fix16 speed = (Fix16)0; - if (ccobj.WorkingObject is Vehicle) - speed = ((Fix16)((Vehicle)ccobj.WorkingObject).Speed) / (Fix16)2; - ccobj.cmbt_vel = Trig.sides_ab(speed, ccobj.cmbt_head.Radians); - } - - // for next iteration - empstartrange += KilometersPerSquare; - } while (AnyWeaponsInRange); - - foreach (CombatControlledObject ccobj in ControlledCombatObjects) - { - foreach (KeyValuePair empire in Empires) - { - ITargetable ship = ccobj.WorkingObject; - if (ship is ICombatant) - { - var c = (ICombatant)ship; - if (c.IsHostileTo(empire.Key)) - empire.Value.hostile.Add(ccobj); - else if (c.Owner != empire.Key) - empire.Value.friendly.Add(ccobj); - } - } - - ccobj.newDice(battleseed); - - } - foreach (var ccobj in ControlledCombatObjects) - { - commandAI(ccobj, 0); - } - -#if DEBUG - Console.WriteLine("Done setting up combat Objects"); - Console.WriteLine("CNodes :" + CombatNodes.Count()); - Console.WriteLine("FNodes :" + FreshNodes.Count()); - Console.WriteLine("DNodes :" + DeadNodes.Count()); -#endif - } - - public void Start() - { - //start combat - Current.Add(this); - - SetUpPieces(); - } - - public void End(int tick) - { - //end combat - //ReplayLog.Events.Add(new CombatEndBattleEvent(tick)); - Current.Remove(this); - Previous.Add(this); - - // delete leftover seekers that were en route when combat ended - foreach (var seeker in CombatNodes.OfType().ToArray()) - CombatNodes.Remove(seeker); - - // save state of end combatants if this isn't a replay - //if (!IsReplay) - { - foreach (var kvp in ActualCombatants) - { - var id = kvp.Key; - var c = kvp.Value; - var c2 = c.CopyAndAssignNewID(); - c2.IsMemory = true; - EndCombatants.Add(id, c2); - } - } - - //IsReplay = true; - } - - /// - /// Processes a tick of combat (processing only) - /// - /// The tick number - /// Counter to keep track of when the ship AI can issue comamnds. - /// True if the battle should continue; false if it should end. - public bool ProcessTick(ref int tick, ref int cmdfreqCounter) - { - var maxTick = (Mod.Current == null || Mod.Current.Settings.SpaceCombatTurns <= 0 ? 30 : Mod.Current.Settings.SpaceCombatTurns) * TicksPerSecond; -#if DEBUG - Console.WriteLine($"***PROCESSING COMBAT TICK: {tick} of {maxTick}"); -#endif - //unleash the dogs of war! - foreach (var comObj in CombatObjects) - comObj.debuginfo = ""; //cleardebuginfo txt. - - // remove shields from vehicles lacking supplies - foreach (var comObj in CombatObjects.OfType()) - { - var v = comObj.WorkingVehicle; - if (v is SpaceVehicle) - { - var sv = v as SpaceVehicle; - if (sv.SupplyRemaining <= 0) - { - sv.NormalShields = 0; - sv.PhasedShields = 0; - } - } - } - - foreach (var comObj in CombatObjects.Where(ccobj => !ccobj.WorkingObject.IsDestroyed).ToArray()) - { -#if DEBUG - Console.WriteLine("comObj.helm " + comObj.strID); -#endif - comObj.helm(); //heading and thrust - } - - foreach (var comObj in CombatObjects.Where(o => !o.WorkingObject.IsDestroyed).ToArray()) - firecontrol(tick, comObj); //fire ready weapons. - - foreach (var comObj in CombatObjects) - SimNewtonianPhysics(comObj); //physicsmove objects. - - if (cmdfreqCounter >= Battle_Space.CommandFrequencyTicks) - { - foreach (CombatControlledObject ccobj in ControlledCombatObjects.Where(ccobj => !ccobj.WorkingObject.IsDestroyed)) - { - commandAI(ccobj, tick); - } - cmdfreqCounter = 0; - } - - foreach (CombatNode comNod in FreshNodes.ToArray()) - { - CombatNodes.Add(comNod); - FreshNodes.Remove(comNod); -#if DEBUG - Console.WriteLine("adding " + comNod.strID + " to combatNodes from fresh"); -#endif - } - foreach (CombatNode comNod in DeadNodes.ToArray()) - { - CombatNodes.Remove(comNod); - DeadNodes.Remove(comNod); - if (comNod is CombatObject) - { - - foreach (CombatEmpire emp in Empires.Values) - { - emp.removeComObj((CombatObject)comNod); - } - } -#if DEBUG - Console.WriteLine("disposing obj from deadNodes"); -#endif - - } - - bool ships_persuing = true; // TODO - check if ships are actually pursuing - bool ships_inrange = true; //ships are in skipdrive interdiction range of enemy ships TODO - check if ships are in range - //TODO: check for alive missiles and bullets. - bool hostiles = ControlledCombatObjects.Any(o => !o.WorkingCombatant.IsDestroyed && ControlledCombatObjects.Any(o2 => !o2.WorkingCombatant.IsDestroyed && o.WorkingCombatant.IsHostileTo(o2.WorkingCombatant.Owner))); - - bool cont; - if (!ships_persuing && !ships_inrange) - { - cont = false; - Console.WriteLine("***COMBAT END - ships are no longer pursuing each other or in weapons range"); - } - else if (!hostiles) - { - Console.WriteLine("***COMBAT END - no hostiles remain"); - cont = false; - } - else if (tick > maxTick) - { - Console.WriteLine("***COMBAT END - time expired"); - cont = false; - } - else - cont = true; - cmdfreqCounter++; - tick++; - CurrentTick = tick; - return cont; - } - - public int CurrentTick { get; private set; } - - public void Resolve() - { - Start(); - - - int tick = 0, cmdFreqCounter = 0; - while (ProcessTick(ref tick, ref cmdFreqCounter)) - { - // keep on truckin' - } - - End(tick); - } - - - public PointXd SimNewtonianPhysics(CombatNode comObj) - { - if (comObj is CombatObject) - { - CombatObject comObjo = (CombatObject)comObj; - comObjo.cmbt_accel = (NMath.accelVector(comObjo.cmbt_mass, comObjo.cmbt_thrust)); - comObjo.cmbt_vel += comObjo.cmbt_accel / TicksPerSecond; -#if DEBUG - Console.WriteLine(comObj.strID + " Acc " + comObjo.cmbt_accel); -#endif - } - - comObj.cmbt_loc += comObj.cmbt_vel / TicksPerSecond; -#if DEBUG - Console.WriteLine(comObj.strID + " Loc " + comObj.cmbt_loc); - - Console.WriteLine(comObj.strID + " Vel " + comObj.cmbt_vel); -#endif - return comObj.cmbt_loc; - } - - - /// - /// this is to make animation/ship movement smoother, and should not affect the physics in any way. - /// - /// - /// - /// - public PointXd InterpolatePosition(CombatNode comObj, double fractionalTick) - { - return comObj.cmbt_loc + comObj.cmbt_vel / TicksPerSecond * (Fix16)fractionalTick; - } - - public void commandAI(CombatControlledObject ccobj, int battletick) - { - //do AI decision stuff. - //pick a primary target to persue, use AI script from somewhere. this could also be a formate point. and could be a vector rather than a static point. - if (ccobj.WorkingObject != null) - { - - // int hp1 = ccobj.WorkingCombatant.Hitpoints; - // int hp2 = ccobj.WorkingObject.Hitpoints; - // int hp3 = ccobj.WorkingObject.HullHitpoints; - // int hp4 = ccobj.StartCombatant.Hitpoints; - // int hp5 = ccobj.StartCombatant.HullHitpoints; - //#if DEBUG - // Console.WriteLine(ccobj.WorkingCombatant.Name); - // Console.WriteLine("hp = " + hp1 + ", " + hp2 + ", " + hp3 + ", " + hp4 + ", " + hp5); - - // Vehicle startV = (Vehicle)ccobj.StartCombatant; - // foreach (Component comp in startV.Components) - // { - // Console.WriteLine(comp.Name + " container " + comp.Container); - // } - //#endif - string comAI = ""; - //CombatObject tgtObj; - if (ccobj.WorkingObject.Owner != null && Empires[ccobj.WorkingObject.Owner].hostile.Any()) - { - /*old - tgtObj = Empires[ccobj.WorkingObject.Owner].hostile[0]; - combatWaypoint wpt = new combatWaypoint(tgtObj); - ccobj.waypointTarget = wpt; - //pick a primary target to fire apon from a list of enemy within weapon range - ccobj.weaponTarget = new List(); - ccobj.weaponTarget.Add(Empires[ccobj.WorkingObject.Owner].hostile[0]); - * */ - ccobj.calcWaypoint(); - ccobj.calcWpnTarget(); - } - else - { -#if DEBUG - Console.WriteLine(ccobj.WorkingCombatant.Name + " Has no hostile Targets"); -#endif - } - /*if (IsReplay && battletick < 1000) - { - List evnts = ReplayLog.EventsForObjectAtTick(ccobj, battletick).ToList(); - var locevnts = evnts.OfType().Where(e => e.Object == ccobj && e.Tick == battletick); - comAI = "Location "; - if (locevnts.Any() && locevnts.All(le => le.Location == ccobj.cmbt_loc)) - comAI += "Does match \r\n"; - else - comAI += "Not matched \r\n"; - } - else if (!IsReplay && battletick < 1000) - {*/ - CombatLocationEvent locevnt = new CombatLocationEvent(battletick, ccobj, ccobj.cmbt_loc); - //ReplayLog.Events.Add(locevnt); - //} - - ccobj.debuginfo += comAI; - } - } - - private void missilefirecontrol(int tick, CombatSeeker comSek) - { - //Fix16 locdistance = Trig.distance(comSek.cmbt_loc, comSek.weaponTarget[0].cmbt_loc); - //PointXd vectortowaypoint = comSek.cmbt_loc - comSek.waypointTarget.cmbt_loc; - //Fix16 locdistance2 = vectortowaypoint.Length; - PointXd vectortowaypoint = comSek.cmbt_loc - comSek.weaponTarget[0].cmbt_loc; - Fix16 locdistance = vectortowaypoint.Length; -#if DEBUG - //Console.WriteLine("firecontrol for: " + comSek.strID); - //Console.WriteLine(comSek.strID + " Targeting " + comSek.weaponTarget[0].strID); - Console.WriteLine(comSek.strID + " Range " + locdistance + "to " + comSek.weaponTarget[0].strID); - //Console.WriteLine("Rangettgt " + locdistance2); - //Console.WriteLine("Rangettgt " + locdistance3); -#endif - - if (locdistance <= comSek.cmbt_vel.Length / TicksPerSecond)//erm, I think? (if we're as close as we're going to get in one tick) could screw up at high velocities. - { -#if DEBUG - Console.WriteLine("ProxDetonation!"); -#endif - CombatTakeFireEvent evnt = comSek.seekertargethit; - //if (!IsReplay) - { - evnt.IsHit = true; - evnt.Tick = tick; //update the tick to where the hit occurs. - } - /*else if (!evnt.IsHit || evnt.Tick != tick) - { - Console.WriteLine("Seeker Hit Out of synch detected!"); - Console.WriteLine("Seeker: " + comSek.ID); - Console.WriteLine("Attacker: " + comSek.launcher.weapon.Owner.Name); - Console.WriteLine("Target: " + comSek.weaponTarget[0]); - Console.WriteLine("This Tick: " + tick); - Console.WriteLine("Expected Tick: " + tick); - Console.WriteLine("Expected Hit: " + evnt.IsHit); - }*/ - Component launcher = comSek.launcher.weapon; - CombatObject target = comSek.weaponTarget[0]; - if (target is CombatControlledObject) //TODO handle seekers and other objects as seeker targets. - { - CombatControlledObject ccTarget = (CombatControlledObject)target; - var target_icomobj = ccTarget.WorkingObject; - //var shot = new Combat.Shot(launcher, target_icomobj, 0); - //defender.TakeDamage(weapon.Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, battle); - //int damage = shot.Damage; - combatDamage(tick, target, comSek.launcher, 1, comSek.getDice()); - if (target_icomobj.MaxNormalShields < target_icomobj.NormalShields) - target_icomobj.NormalShields = target_icomobj.MaxNormalShields; - if (target_icomobj.MaxPhasedShields < target_icomobj.PhasedShields) - target_icomobj.PhasedShields = target_icomobj.MaxPhasedShields; - - } - else if (target is CombatSeeker) - { - int damage = 0; - WeaponInfo w = launcher.Template.ComponentTemplate.WeaponInfo; - if (launcher.Template.Mount == null) - damage = w.Damage; - else - damage = w.Damage * launcher.Template.Mount.WeaponDamagePercent / 100; - - DamageType damageType = w.DamageType; - CombatSeeker targetsec = (CombatSeeker)target; - var shot = new Shot(launcher.Parents.OfType().Single(), launcher, target.WorkingObject, 0); // TODO - range of seekers targeting seekers? - targetsec.TakeDamage(new Hit(shot, target.WorkingObject, damage), comSek.getDice()); - - if (targetsec.IsDestroyed) - { -#if DEBUG - Console.WriteLine(target.strID + " is destroyed!"); -#endif - targetsec.Dispose(); - target.deathTick = tick; - //if (!IsReplay) - //{ - CombatDestructionEvent deathEvent = new CombatDestructionEvent(tick, target, target.cmbt_loc); - //ReplayLog.Events.Add(deathEvent); - //} - foreach (KeyValuePair empireKVP in Empires) - { - CombatEmpire empire = empireKVP.Value; - if (empire.ownships.Contains(target)) - empire.ownships.Remove(target); - else if (empire.hostile.Contains(target)) - empire.hostile.Remove(target); - else if (empire.friendly.Contains(target)) - empire.friendly.Remove(target); - } - } - } - - DeadNodes.Add(comSek); - CombatNodes.Remove(comSek); - } - else if (tick > comSek.deathTick) - { -#if DEBUG - Console.WriteLine("Out of Juice!"); -#endif - DeadNodes.Add(comSek); - CombatNodes.Remove(comSek); - } - } - - /// - /// TODO - move fire control to CombatObject as an abstract method - /// - /// - /// - public void firecontrol(int tic_countr, CombatObject comObj) - { - if (comObj.strategy != null) - comObj.strategy.Zeroize(); - if (comObj is CombatSeeker) - { - //is a seeker - missilefirecontrol(tic_countr, (CombatSeeker)comObj); - } - else if (comObj is CombatControlledObject) - { - - //is a ship, base, unit, or planet - CombatControlledObject ccobj = (CombatControlledObject)comObj; -#if DEBUG - Console.WriteLine("firecontrol for: " + ccobj.WorkingCombatant.Name); -#endif - - List allweapons = ccobj.Weapons.ToList(); - - for (int i = 0; i < ccobj.strategy.numberOfTargetStrategies(); i++) - { - CombatObject targetObject = ccobj.strategy.targetforgroup(ccobj, i); - List wpnindexesthistarget = ccobj.strategy.weaponslists[i].Keys.ToList(); - List wpnsforthistarget = new List(); -#if DEBUG - Console.WriteLine("Target: " + (targetObject == null ? "(none)" : targetObject.strID)); -#endif - foreach (int wpndex in wpnindexesthistarget) - { - if (wpndex < allweapons.Count)//handling a case where a strategy might have more wpns than this ship does. - wpnsforthistarget.Add(allweapons[wpndex]); - } - - foreach (CombatWeapon wpn in wpnsforthistarget) - { -#if DEBUG - Console.WriteLine("Weapon: " + wpn.weapon.Name); -#endif - //var wpn = ccobj.Weapons.ToList()[i]; - ICombatant ship = (ICombatant)ccobj.WorkingObject; - - if (comObj.weaponTarget.Count() > 0 && //if there ARE targets - wpn.CanTarget(targetObject.WorkingObject) && //if we CAN target - tic_countr >= wpn.nextReload && //if the weapon is ready to fire. - ( - // if the firing object has enough supplies (or is not a space vehicle, and so does not use supplies) - !(comObj.WorkingObject is SpaceVehicle) || - ((SpaceVehicle)comObj.WorkingObject).HasInfiniteSupplies || - wpn.weapon.Template.SupplyUsage <= ((SpaceVehicle)comObj.WorkingObject).SupplyRemaining - )) - { - if (wpn.isinRange(comObj, targetObject))//weaponTarget[i] should match the - { - //this function figures out if there's a hit, deals the damage, and creates an event. -#if DEBUG - Console.WriteLine("Fire Weapon!"); - -#endif - //first create the event for the target ship - CombatTakeFireEvent targets_event = FireWeapon(tic_countr, comObj, wpn, targetObject); - //then create teh event for this ship firing on the target - CombatFireOnTargetEvent attack_event = new CombatFireOnTargetEvent(tic_countr, comObj, comObj.cmbt_loc, wpn, targets_event); - - - //if (!IsReplay) - { - targets_event.fireOnEvent = attack_event; - //ReplayLog.Events.Add(targets_event); - //ReplayLog.Events.Add(attack_event); - } - - } - } - } - } - //update any events where this ship has taken fire, and set the location. - /*(if (!IsReplay) - { - foreach (CombatEvent comevnt in ReplayLog.EventsForObjectAtTick(comObj, tic_countr)) - { - if (comevnt.GetType() == typeof(CombatTakeFireEvent)) - { - CombatTakeFireEvent takefire = (CombatTakeFireEvent)comevnt; - takefire.setLocation(comObj.cmbt_loc); - } - } - }*/ - } - } - - int to_hit(Sector sector, CombatObject attacker, CombatWeapon weapon, CombatObject target) - { - - //// TODO - check range too - //var tohit = - // Mod.Current.Settings.WeaponAccuracyPointBlank // default weapon accuracy at point blank range - // + weapon.weapon.Template.WeaponAccuracy // weapon's intrinsic accuracy modifier - // + weapon.weapon.Container.Accuracy // firing ship's accuracy modifier - // - target_icomobj.Evasion // target's evasion modifier - // - Sector.GetAbilityValue(target.WorkingObject.Owner, "Sector - Sensor Interference").ToInt() // sector evasion modifier - // + Sector.GetAbilityValue(attacker.WorkingObject.Owner, "Combat Modifier - Sector").ToInt() // generic combat bonuses - // - Sector.GetAbilityValue(target.WorkingObject.Owner, "Combat Modifier - Sector").ToInt() - // + Sector.StarSystem.GetAbilityValue(attacker.WorkingObject.Owner, "Combat Modifier - System").ToInt() - // - Sector.StarSystem.GetAbilityValue(target.WorkingObject.Owner, "Combat Modifier - System").ToInt() - // + attacker.WorkingObject.Owner.GetAbilityValue("Combat Modifier - Empire").ToInt() - // - target.WorkingObject.Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); - //// TODO - moddable min/max hit chances with per-weapon overrides - var vehicle = (IMobileSpaceObject)attacker.WorkingObject; - int wpn_Accu_blankrng = Mod.Current.Settings.WeaponAccuracyPointBlank; - int wpn_AccuMod = weapon.weapon.Template.WeaponAccuracy; // weapon's intrinsic accuracy modifier - int atkr_AccuMod = vehicle.Accuracy;//weapon.weapon.Container.Accuracy; // firing ship's accuracy modifier - int tgt_EvdMod = target.WorkingObject.Evasion; // target's evasion modifier - - return - wpn_Accu_blankrng - + wpn_AccuMod - + atkr_AccuMod - - tgt_EvdMod; - } - - - private CombatTakeFireEvent FireSeeker(int tick, CombatObject attacker, CombatWeapon weapon, CombatObject target) - { - CombatTakeFireEvent target_event = null; - SeekingWeaponInfo skrinfo = (SeekingWeaponInfo)weapon.weapon.Template.ComponentTemplate.WeaponInfo; - int targettick = tick + (int)CombatSeeker.seekerTimeToTarget(attacker, target, skrinfo) * TicksPerSecond; - //create seeker and node. - CombatSeeker seeker = new CombatSeeker(attacker, weapon, -tempObjCounter); - seeker.waypointTarget = new CombatWaypoint(target); - seeker.weaponTarget = new List() { target }; - seeker.deathTick = tick + weapon.maxRange_time * TicksPerSecond; - seeker.cmbt_head = new Compass(attacker.cmbt_head.Degrees, false); - seeker.cmbt_att = new Compass(attacker.cmbt_att.Degrees, false); - FreshNodes.Add(seeker); -#if DEBUG - Console.WriteLine("Seeker " + seeker.strID + " added to FreshNodes"); -#endif - foreach (var emp in Empires.Values) - { - if (emp.ownships.Contains(attacker)) - emp.ownships.Add(seeker); - if (emp.friendly.Contains(attacker)) - emp.friendly.Add(seeker); - if (emp.neutral.Contains(attacker)) - emp.neutral.Add(seeker); - if (emp.hostile.Contains(attacker)) - emp.hostile.Add(seeker); - } - - /*if (IsReplay) - { -#if DEBUG - Console.WriteLine("Tick: " + targettick); -#endif - //read the event - //target_event = ReplayLog.EventsForObjectAtTick(target, targettick).OfType().ToList()[0]; - List atkrevnts = ReplayLog.EventsForObjectAtTick(attacker, tick).OfType().ToList(); - target_event = atkrevnts[0].TakeFireEvent; //need to check which in the list here is the correct event, since ships with multiple weapons will have multiple events here. - //target_event.BulletNode = seeker; - seeker.seekertargethit = target_event; //need to link the seeker and the event. (since the seeker object does not get carried over between processing and replay, but gets re-created) - } - else - {*/ -#if DEBUG - Console.WriteLine("Tick: " + targettick); -#endif - //*write* the event - //the tick gets updated if there's an acutal hit by the seeker fire control - target_event = new CombatTakeFireEvent(targettick, target, target.cmbt_loc, false); //false since we don't know if it's going to hit yet. - target_event.BulletNode = seeker; - seeker.seekertargethit = target_event; //seeker stores a link to the event so we can flag the event has having hit the ship later. - //} - - return target_event; - } - - private CombatTakeFireEvent FireBolt(int tick, CombatObject attacker, CombatWeapon weapon, CombatObject target, bool hit) - { - CombatTakeFireEvent target_event = null; - - - Fix16 boltTTT = weapon.boltTimeToTarget(attacker, target); //in seconds - //set target tick for the future. - int targettic = tick + (int)boltTTT * TicksPerSecond; - - - - /*if (IsReplay) - { - //read the event - target_event = ReplayLog.EventsForObjectAtTick(target, targettic).OfType().ToList()[0];// need to check for the right event here. - - //because bullets don't need to be created during processing - Fix16 rThis_distance = (target_event.Location - target_event.fireOnEvent.Location).Length; - PointXd bulletVector = Trig.intermediatePoint(attacker.cmbt_loc, target_event.Location, rThis_distance); - if (!target_event.IsHit) //jitter it! - { - // TODO - take into account firing ship's accuracy and target's evasion - int accuracy = target_event.fireOnEvent.Weapon.weapon.Template.WeaponAccuracy; - int jitterAmount = 0; - if (accuracy < 50) - jitterAmount = (int)System.Math.Pow(50 - accuracy, 2) / 50; - if (jitterAmount < 5) - jitterAmount = 5; - if (jitterAmount > 30) - jitterAmount = 30; - //do *NOT* use ship prng here!!!! (since this is not done during normal processing, it'll cause differences, use any rand) - Compass jitter = new Compass(RandomHelper.Range(-jitterAmount, jitterAmount), false); - Compass bulletCompass = bulletVector.Compass; - Compass offsetCompass = bulletCompass + jitter; - bulletVector = offsetCompass.Point(bulletVector.Length); - } - CombatNode bullet = new CombatNode(attacker.cmbt_loc, bulletVector, -tempObjCounter, "BLT"); - target_event.BulletNode = bullet; - FreshNodes.Add(bullet); - if (target_event.IsHit) - { - bullet.deathTick = target_event.Tick; - } - else - { - bullet.deathTick = tick + target_event.fireOnEvent.Weapon.maxRange; - } - } - else - {*/ - //*write* the event - target_event = new CombatTakeFireEvent(targettic, target, target.cmbt_loc, hit); - int psudoboltID = -tempObjCounter; //increase it just so processing has the same number of tempObjects created as replay will. - //} - - return target_event; - } - - private CombatTakeFireEvent FireBeam(int tick, CombatObject attacker, CombatWeapon weapon, CombatObject target, bool hit) - { - CombatTakeFireEvent target_event = null; - int targettick = tick; - /*if (IsReplay) - { //read the replay... nothing to do if a beam. - } - else*/ - { //write the event. - target_event = new CombatTakeFireEvent(targettick, target, target.cmbt_loc, hit); - } - return target_event; - } - - public CombatTakeFireEvent FireWeapon(int battletick, CombatObject attacker, CombatWeapon weapon, CombatObject target) - { -#if DEBUG - Console.WriteLine("FireWeapon/TakeFireEvent"); - Console.WriteLine(attacker.WorkingObject); - Console.WriteLine(weapon.weapon.Name); - Console.WriteLine(target.WorkingObject); -#endif - var wpninfo = weapon.weapon.Template.ComponentTemplate.WeaponInfo; - Fix16 rangeForDamageCalcs = (Fix16)0; - Fix16 rangetotarget = NMath.distance(attacker.cmbt_loc, target.cmbt_loc);//Trig.distance(attacker.cmbt_loc, target.cmbt_loc); - - int targettic = battletick; - - //reset the weapon nextReload. - weapon.nextReload = battletick + (int)(weapon.reloadRate * TicksPerSecond); // TODO - round up, so weapons that fire more than 10 times per second don't fire at infinite rate - - var target_icomobj = target.WorkingObject; - //Vehicle defenderV = (Vehicle)target_icomobj; - var attkVeh = (IMobileSpaceObject)attacker.WorkingObject; - if (!weapon.CanTarget(target_icomobj)) - return null; - int tohit = this.to_hit(Sector, attacker, weapon, target); - - if (tohit > 99) - tohit = 99; - if (tohit < 1) - tohit = 1; - if (attkVeh.HasAbility("Weapons Always Hit"))//weapon.weapon.Container.HasAbility("Weapons Always Hit")) - tohit = 100; - - //bool hit = RandomHelper.Range(0, 99) < tohit; - PRNG dice = attacker.getDice(); - bool hit = dice.Range(0, 99) < tohit; - - CombatTakeFireEvent target_event = null; - - if (weapon.weaponType == "Seeker") - { - target_event = FireSeeker(battletick, attacker, weapon, target); - } - //for bolt calc, need again for adding to list. - else if (weapon.weaponType == "Bolt") - { - target_event = FireBolt(battletick, attacker, weapon, target, hit); - rangeForDamageCalcs = rangeForDamageCalcs_bolt(attacker, weapon, target); - } - - else //not bolt, should be a beam. - { - target_event = FireBeam(battletick, attacker, weapon, target, hit); - rangeForDamageCalcs = rangetotarget / KilometersPerSquare; - } - - rangeForDamageCalcs = Fix16.Max((Fix16)1, rangeForDamageCalcs); //don't be less than 1. - - // consume supplies - if (attacker.WorkingObject is SpaceVehicle) - { - var sv = (SpaceVehicle)attacker.WorkingObject; - if (!sv.HasInfiniteSupplies) - sv.SupplyRemaining -= weapon.weapon.Template.SupplyUsage; - } - - if (hit && !target_icomobj.IsDestroyed && weapon.weaponType != "Seeker") - { - combatDamage(battletick, target, weapon, rangeForDamageCalcs, attacker.getDice()); - //var shot = new CombatShot(weapon.weapon, target_icomobj, (int)rangeForDamageCalcs); - ////defender.TakeDamage(weapon.Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, battle); - //int damage = shot.Damage; - //combatDamage(battletick, target, weapon, damage, attacker.getDice()); - //if (target_icomobj.MaxNormalShields < target_icomobj.NormalShields) - // target_icomobj.NormalShields = target_icomobj.MaxNormalShields; - //if (target_icomobj.MaxPhasedShields < target_icomobj.PhasedShields) - // target_icomobj.PhasedShields = target_icomobj.MaxPhasedShields; - //if (defender.IsDestroyed) - //battle.LogTargetDeath(defender); - } - return target_event; - } - - - public static Fix16 rangeForDamageCalcs_bolt(CombatObject attacker, CombatWeapon weapon, CombatObject target) - { - Fix16 boltTTT = weapon.boltTimeToTarget(attacker, target); - Fix16 boltSpeed = weapon.boltClosingSpeed(attacker, target); // m/s - Fix16 rThis_distance = boltSpeed * boltTTT; - - Fix16 rMax_distance = boltSpeed * weapon.maxRange; //s * t = d - Fix16 rMin_distance = boltSpeed * weapon.minRange; //s * t = d - - Fix16 rMax_distance_standstill = weapon.boltSpeed * weapon.maxRange; - Fix16 rMin_distance_standstill = weapon.boltSpeed * weapon.minRange; - - Fix16 scaler = rMax_distance_standstill / rMax_distance; - - Fix16 rangeForDamageCalcs = rThis_distance * scaler * (Fix16)0.001; - return rangeForDamageCalcs; - } - - private void combatDamage(int tick, CombatObject target, CombatWeapon weapon, int rangeForDamageCalcs, PRNG attackersdice) - { - var target_icomobj = target.WorkingObject; - var shot = new CombatShot(weapon.weapon, target_icomobj, (int)rangeForDamageCalcs); - //defender.TakeDamage(weapon.Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, battle); - int damage = shot.Damage; - //combatDamage(battletick, target, weapon, damage, attacker.getDice()); - if (target_icomobj.MaxNormalShields < target_icomobj.NormalShields) - target_icomobj.NormalShields = target_icomobj.MaxNormalShields; - if (target_icomobj.MaxPhasedShields < target_icomobj.PhasedShields) - target_icomobj.PhasedShields = target_icomobj.MaxPhasedShields; - - DamageType damageType = weapon.weapon.Template.ComponentTemplate.WeaponInfo.DamageType; - - var targetV = target.WorkingObject; - if (targetV.IsDestroyed) - return; //damage; // she canna take any more! - - var hit = new Hit(new Shot(weapon.weapon.Parents.OfType().Single(), weapon.weapon, target.WorkingObject, rangeForDamageCalcs), target.WorkingObject, damage); - targetV.TakeDamage(hit, attackersdice); - - CheckForDeath(tick, target); - } - - public bool CheckForDeath(int tick, CombatObject cobj) - { - var obj = cobj.WorkingObject; - if (cobj.WorkingObject.IsDestroyed) - { -#if DEBUG - Console.WriteLine(cobj.strID + " is destroyed!"); -#endif - obj.Dispose(); - cobj.deathTick = tick; - //if (!IsReplay) - { - CombatDestructionEvent deathEvent = new CombatDestructionEvent(CurrentTick, cobj, cobj.cmbt_loc); -// ReplayLog.Events.Add(deathEvent); - } - foreach (KeyValuePair empireKVP in Empires) - { - CombatEmpire empire = empireKVP.Value; - if (empire.ownships.Contains(cobj)) - empire.ownships.Remove(cobj); - else if (empire.hostile.Contains(cobj)) - empire.hostile.Remove(cobj); - else if (empire.friendly.Contains(cobj)) - empire.friendly.Remove(cobj); - } - - return true; - } - - return false; - } - - public System.Drawing.Image Icon - { - get { return StartCombatants.Values.OfType().Largest().Icon; } - } - - public System.Drawing.Image Portrait - { - get { return StartCombatants.Values.OfType().Largest().Portrait; } - } - - public IEnumerable IconPaths - { - get - { - return StartCombatants.Values.OfType().Largest().IconPaths; - } - } - - public IEnumerable PortraitPaths - { - get - { - return StartCombatants.Values.OfType().Largest().PortraitPaths; - } - } - - public ICombatant FindStartCombatant(ICombatant c) - { - return StartCombatants[c.ID]; - } - - public ICombatant FindWorkingCombatant(ICombatant c) - { - foreach (var n in CombatNodes.OfType()) - { - if (n.StartCombatant == c) - return n.WorkingCombatant; - if (n.WorkingCombatant == c) - return c; - } - throw new ArgumentException("Can't find working combatant for " + c + "."); - } - - public ICombatant FindActualCombatant(ICombatant c) - { - return ActualCombatants[c.ID]; - } - - public CombatObject FindCombatObject(ICombatant c) - { - foreach (var n in CombatNodes.OfType()) - { - if (n.StartCombatant == c || n.WorkingCombatant == c) - return n; - } - throw new ArgumentException("Can't find combat object for " + c + "."); - } - - /// - /// Battles are scanned by anyone who has a combatant in them; otherwise they're unknown. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - // TODO - "share combat logs" treaties? - return StartCombatants.Values.Any(c => c.Owner == emp) ? Visibility.Scanned : Visibility.Unknown; - } - - public void Redact(Empire emp) - { - var vis = CheckVisibility(emp); - if (vis < Visibility.Fogged) - Dispose(); - else - { - // start combatants are memories but need to be redacted anyway - // TODO - why are they not considered "scanned" so we can see the designs? - foreach (var memory in StartCombatants.Values) - memory.Redact(emp); - } - } - - public bool IsMemory - { - get; - set; - } - - public double Timestamp - { - get; - set; - } - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - public long ID - { - get; - set; - } - - public bool IsDisposed - { - get; - set; - } - - public void Dispose() - { - Current.Remove(this); - Previous.Remove(this); - Galaxy.Current.Battles.Remove(this); - IsDisposed = true; - } - - public Empire Owner - { - get { return null; } - } - } -} +using FrEee.Game.Enumerations; +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Civilization; +using FrEee.Game.Objects.LogMessages; +using FrEee.Game.Objects.Space; +using FrEee.Game.Objects.Technology; +using FrEee.Game.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Utility; +using FrEee.Utility.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using NewtMath.f16; + +using FixMath.NET; +using FrEee.Game.Objects.Combat; + +namespace FrEee.Game.Objects.Combat2 +{ + public class Battle_Space : INamed, ILocated, IPictorial, IFoggable + { + /// + /// Standard battlespace constructor. + /// + /// + /// + public Battle_Space(Sector location) + { + if (location == null) + throw new ArgumentNullException("location", "Battles require a sector location."); + else + { + Sector = location; + Timestamp = Galaxy.Current?.Timestamp ?? 0; + Initialize(location.SpaceObjects.OfType().Where(o => !o.IsMemory && o.Owner != null).Union(location.SpaceObjects.OfType().Where(f => !f.IsMemory).SelectMany(f => f.Combatants))); + } + } + + /// + /// Battlespace constructor for unit tests (doesn't need a sector; will create a fake sector). + /// + /// + /// + public Battle_Space(IEnumerable combatants) + { + this.Sector = new Sector(new StarSystem(0), new System.Drawing.Point()); + Initialize(combatants); + + } + + private void Initialize(IEnumerable combatants) + { + double stardate = Timestamp; + int moduloID = (int)(Sector.StarSystem.ID % 100000); + this.battleseed = (int)(moduloID / stardate * 10); + + EmpiresArray = combatants.Select(c => c.Owner).Where(emp => emp != null).Distinct().ToArray(); + Empires = new Dictionary { }; + + StartCombatants = new Dictionary(); + ActualCombatants = combatants.ToDictionary(c => c.ID); + EndCombatants = new Dictionary(); + CombatNodes = new HashSet(); + StartNodes = new HashSet(); + FreshNodes = new HashSet(); + DeadNodes = new HashSet(); + CombatFleets = new Dictionary { }; + foreach (var fleet in Sector.SpaceObjects.OfType()) + { + CombatFleet cfleet = new CombatFleet(fleet); + CombatFleets.Add(cfleet.Name, cfleet); + } + + foreach (ICombatant obj in combatants) + { + ICombatant copy = obj.CopyAndAssignNewID();//obj.Copy(); + copy.IsMemory = true; + + if (obj is SpaceVehicle) + { + SpaceVehicle scopy = (SpaceVehicle)copy; + + StartCombatants.Add(obj.ID, scopy); + CombatVehicle comObj = new CombatVehicle(scopy, (SpaceVehicle)obj, battleseed, obj.ID); + StartNodes.Add(comObj); + if (scopy.Container != null) + { + CombatFleet comfleet = CombatFleets[scopy.Container.Name]; + comfleet.combatObjects.Add(comObj); + comObj.combatfleet = comfleet; + } + } + else if (obj is Planet) + { + Planet pcopy = (Planet)copy; + + StartCombatants.Add(obj.ID, pcopy); + CombatPlanet comObj = new CombatPlanet(pcopy, (Planet)obj, battleseed, obj.ID); + StartNodes.Add(comObj); + } + else + { + Console.Error.WriteLine("Unknown ICombatant type found in " + this + ": " + obj.GetType()); + } + } + + + //ReplayLog = new CombatReplayLog(); + + + } + + static Battle_Space() + { + Current = new HashSet(); + } + + + #region fields & properties + /// + /// whether or not this is a processing(false) or a replay(true) + /// + [Obsolete("Battle replays are now complete reenactments; this flag is unnecessary.")] + public bool IsReplay { get; set; } + + /// + /// seed for this battle. + /// + private int battleseed { get; set; } + + /// + /// Any battles that are currently ongoing. + /// This is a collection so we can multithread battle resolution if so desired. + /// + public static ICollection Current { get; private set; } + + /// + /// Any battles that have completed this turn. + /// + public static ICollection Previous { get { return Galaxy.Current.Battles; } } + + /// + /// The sector in which this battle took place. + /// + public Sector Sector { get; set; } + + /// + /// The star system in which this battle took place. + /// + public StarSystem StarSystem { get { return Sector.StarSystem; } } + + /// + /// The empires engagaed in battle. + /// + public IEnumerable EmpiresArray { get; private set; } + public Dictionary Empires { get; private set; } + + /// + /// The combatants at the start of this battle. + /// + [DoNotAssignID(true)] + public IDictionary StartCombatants { get; private set; } + + /// + /// The REAL combatants objects. + /// + [DoNotSerialize] + public IDictionary ActualCombatants { get; private set; } + + /// + /// The combatants at the end of this battle. + /// + [DoNotAssignID(true)] + public IDictionary EndCombatants { get; private set; } + + /// + /// combat fleets + /// + public IDictionary CombatFleets { get; private set; } + + /// + /// All combat nodes in this battle, including ships, fighters, seekers, projectiles, etc. + /// + public ISet CombatNodes { get; private set; } + + /// + /// these are objects at the beginning of the combat. + /// + public ISet StartNodes { get; private set; } + + /// + /// objects go here when they're created during combat, so the replay can create the graphic ojects) + /// Objects Not Launched or Created during combat should not go here, (ie not objects at combat start) + /// + public ISet FreshNodes { get; set; } + + /// + /// objects go here to die. (this is so replay can clean up the graphic objects) + /// ONLY OBJECTS CREATED *DURING* combat should go here. (or Replaysetup() won't have all the objects. humn, how' we going to diferentiate for launchable cargo, ie fighters?) + /// Maybe we need StartNodes as well, and have Replaysetup() go from that. and it won't matter. + /// + public ISet DeadNodes { get; set; } + + /// + /// Combat nodes that have an AI attached to them. + /// This includes ships, bases, units, and seekers. + /// + public IEnumerable CombatObjects + { + get + { + return CombatNodes.OfType(); + } + } + + /// + /// Combat nodes that represent vehicles. + /// This includes ships, bases, and units. + /// + public IEnumerable CombatVehicles + { + get + { + return CombatNodes.OfType(); + } + } + + /// + /// Combat nodes that represent controllable objects. + /// This includes vehicles and planets. + /// + public IEnumerable ControlledCombatObjects + { + get + { + return CombatNodes.OfType(); + } + } + + /// + /// the Fleets in this battle + /// + //public ICollection Fleets { get; private set; } + + [Obsolete("Battle replays are now complete reenactments; this log is not populated anymore.")] + public CombatReplayLog ReplayLog { get; private set; } + + public Sector sectoratStart { get; private set; } + + /// + /// Combat sim temporal resolution. + /// physics gets calculated every tick. + /// + public const int TicksPerSecond = 10; + + /// + /// Physics tick length in seconds. + /// One SE4 combat round is taken to be one second. + /// + public static readonly Fix16 TickLength = (Fix16)1 / (Fix16)TicksPerSecond; + + /// + /// Number of seconds between commands. (accelerate, target, etc.) + /// + public static readonly Fix16 CommandFrequencySeconds = 1; + + /// + /// Number of ticks between commands. (accelerate, target, etc.) + /// + public static readonly int CommandFrequencyTicks = CommandFrequencySeconds * TicksPerSecond; + + /// + /// Number of kilometers per "combat square" in SE4 terms (for range calculations). + /// + public static readonly Fix16 KilometersPerSquare = 10; + + private int tOC = 0; + private int tempObjCounter + { + get + { +#if DEBUG + Console.WriteLine("TempObjCounter :" + tOC); +#endif + return tOC++; + } + } + + /// + /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. + /// + public string Name + { + get + { + return "Battle at " + Location; + } + } + + /// + /// The result (victory/defeat/stalemate) for a given empire. + /// If empire or its allies are not involved or no empire specified, just say "battle". + /// + /// + /// + public string ResultFor(Empire emp) + { + if (emp == null) + return "battle"; // no empire specified + if (!StartCombatants.Values.Any(c => c.Owner == emp || c.Owner.IsAllyOf(emp, StarSystem))) + return "battle"; // empire/allies not involved + var survivors = EndCombatants.Values.Where(c => !c.IsDestroyed && c.Owner != null); // glassed planets aren't destroyed but they do have null owners + var ourSurvivors = survivors.Where(c => c.Owner == emp); + var allySurvivors = survivors.Where(c => c.Owner.IsAllyOf(emp, StarSystem)); + var friendlySurvivors = ourSurvivors.Union(allySurvivors); + var enemySurvivors = survivors.Where(c => c.Owner.IsEnemyOf(emp, StarSystem)); + if (friendlySurvivors.Any() && enemySurvivors.Any()) + return "stalemate"; + if (friendlySurvivors.Any()) + return "victory"; + if (enemySurvivors.Any()) + return "defeat"; + return "Pyrrhic victory"; // mutual annihilation! + } + + /// + /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. + /// + public string NameFor(Empire emp) + { + return ResultFor(emp).Capitalize() + " at " + Location; + } + + /// + /// Battles are named after any stellar objects in their sector; failing that, they are named after the star system and sector coordinates. + /// + public string Location + { + get + { + if (Sector.SpaceObjects.OfType().Any()) + return Sector.SpaceObjects.OfType().Largest().Name; + var coords = Sector.Coordinates; + return Sector.StarSystem + " sector (" + coords.X + ", " + coords.Y + ")"; + } + } + + #endregion + + private void FirstSetup() + { +#if DEBUG + Console.WriteLine("Beginning Processing Setup"); + Console.WriteLine("Adding Empires"); +#endif + foreach (Empire empire in EmpiresArray.Where(e => !Empires.ContainsKey(e))) + { + Empires.Add(empire, new CombatEmpire()); +#if DEBUG + Console.Write("."); +#endif + } +#if DEBUG + Console.WriteLine("Done"); +#endif +#if DEBUG + Console.WriteLine("Creating IFF lists"); +#endif + foreach (CombatObject comObj in StartNodes) + { + if (comObj is CombatControlledObject) + { +#if DEBUG + Console.WriteLine("Getting Empire for this ship"); +#endif + Empire thisemp = ((CombatControlledObject)comObj).StartCombatant.Owner; +#if DEBUG + Console.WriteLine("Done"); +#endif + Empires[thisemp].ownships.Add(comObj); +#if DEBUG + Console.Write("."); +#endif + } + } +#if DEBUG + Console.WriteLine("Done Initial Setup"); +#endif + CombatNodes = StartNodes; + } + + /*private void ReplaySetup() + { +#if DEBUG + Console.WriteLine("Beginning Replay Setup"); + + Console.WriteLine("Creating IFF lists"); +#endif + foreach (CombatEmpire emp in Empires.Values) + { + emp.renewtostart(); + } + foreach (CombatObject comObj in StartNodes) + { + comObj.renewtoStart(); + if (comObj is CombatControlledObject) + { +#if DEBUG + Console.WriteLine("Getting Empire for this ship"); +#endif + Empire thisemp = ((CombatControlledObject)comObj).StartCombatant.Owner; +#if DEBUG + Console.WriteLine("Done"); +#endif + Empires[thisemp].ownships.Add(comObj); +#if DEBUG + Console.Write("."); +#endif + } +#if DEBUG + Console.Write("."); +#endif + } +#if DEBUG + Console.WriteLine("Done"); +#endif + CombatNodes = StartNodes; + }*/ + + private bool AnyWeaponsInRange + { + get + { + foreach (var ccobj in ControlledCombatObjects) + { + foreach (var target in ControlledCombatObjects) + { + if (ccobj.StartCombatant.IsHostileTo(target.StartCombatant.Owner)) + { + foreach (var w in ccobj.Weapons) + { + if (w.isinRange(ccobj, target)) + return true; + } + } + } + } + return false; + // return ControlledCombatObjects.Any(ccobj => ccobj.Weapons.Any(w => ControlledCombatObjects.Any(target => ccobj.StartCombatant.IsHostileTo(target.StartCombatant.Owner) && w.isinRange(ccobj, target))))); + } + } + + public void SetUpPieces() + { +#if DEBUG + Console.WriteLine("Setting up combat Objects"); +#endif + tOC = 0; //reset temp object counter. + + + //if (!IsReplay) + FirstSetup(); + //else +// ReplaySetup(); + + //setup the game peice locations + + // sides start this distance from the center of the combat arena. + // start at range of one square, see if any weapons are in range, if so move ships out a bit + Fix16 empstartrange = KilometersPerSquare; + do + { + // find where each empire's forces will start + PointXd[] empstartpoints = new PointXd[EmpiresArray.Count()]; + Compass empstartangle = new Compass((Fix16)360 / (Fix16)EmpiresArray.Count(), false); + for (int i = 0; i <= EmpiresArray.Count() - 1; i++) + { + Fix16 angleoffset = empstartangle.Radians * (Fix16)i; + empstartpoints[i] = new PointXd(Trig.sides_ab(empstartrange, angleoffset)); + } + + // place ships + foreach (var ccobj in ControlledCombatObjects) + { + if (ccobj.empire == null) + ccobj.empire = Empires[ccobj.StartCombatant.Owner]; + if (ccobj.strategy == null) + ccobj.strategy = new StragegyObject_Default(); + + int numobjs = ccobj.empire.ownships.Count; + + int empindex = EmpiresArray.IndexOf(ccobj.StartCombatant.Owner); + PointXd fleetloc = new PointXd(empstartpoints[empindex]); + Compass fleetheading = new Compass(fleetloc, new PointXd(0, 0, 0)); // todo have the ships face the other fleet if persuing or towards the sector they were heading if not persuing. + + int distancebetweenships = 250 * ccobj.empire.ownships.IndexOf(ccobj); + Compass posanglefromfleetheading = new Compass(90, false); + + PointXd shiploc = Trig.sides_ab(distancebetweenships, fleetheading.Degrees - posanglefromfleetheading.Degrees); + + ccobj.cmbt_loc = fleetloc + shiploc; //todo add offeset from this for each ship put in a formation (atm this is just all ships in one position) ie + PointXd(x,y,z) + ccobj.cmbt_head = new Compass(fleetheading.Degrees, false); + ccobj.cmbt_att = new Compass(0); + Fix16 speed = (Fix16)0; + if (ccobj.WorkingObject is Vehicle) + speed = ((Fix16)((Vehicle)ccobj.WorkingObject).Speed) / (Fix16)2; + ccobj.cmbt_vel = Trig.sides_ab(speed, ccobj.cmbt_head.Radians); + } + + // for next iteration + empstartrange += KilometersPerSquare; + } while (AnyWeaponsInRange); + + foreach (CombatControlledObject ccobj in ControlledCombatObjects) + { + foreach (KeyValuePair empire in Empires) + { + ITargetable ship = ccobj.WorkingObject; + if (ship is ICombatant) + { + var c = (ICombatant)ship; + if (c.IsHostileTo(empire.Key)) + empire.Value.hostile.Add(ccobj); + else if (c.Owner != empire.Key) + empire.Value.friendly.Add(ccobj); + } + } + + ccobj.newDice(battleseed); + + } + foreach (var ccobj in ControlledCombatObjects) + { + commandAI(ccobj, 0); + } + +#if DEBUG + Console.WriteLine("Done setting up combat Objects"); + Console.WriteLine("CNodes :" + CombatNodes.Count()); + Console.WriteLine("FNodes :" + FreshNodes.Count()); + Console.WriteLine("DNodes :" + DeadNodes.Count()); +#endif + } + + public void Start() + { + //start combat + Current.Add(this); + + SetUpPieces(); + } + + public void End(int tick) + { + //end combat + //ReplayLog.Events.Add(new CombatEndBattleEvent(tick)); + Current.Remove(this); + Previous.Add(this); + + // delete leftover seekers that were en route when combat ended + foreach (var seeker in CombatNodes.OfType().ToArray()) + CombatNodes.Remove(seeker); + + // save state of end combatants if this isn't a replay + //if (!IsReplay) + { + foreach (var kvp in ActualCombatants) + { + var id = kvp.Key; + var c = kvp.Value; + var c2 = c.CopyAndAssignNewID(); + c2.IsMemory = true; + EndCombatants.Add(id, c2); + } + } + + //IsReplay = true; + } + + /// + /// Processes a tick of combat (processing only) + /// + /// The tick number + /// Counter to keep track of when the ship AI can issue comamnds. + /// True if the battle should continue; false if it should end. + public bool ProcessTick(ref int tick, ref int cmdfreqCounter) + { + var maxTick = (Mod.Current == null || Mod.Current.Settings.SpaceCombatTurns <= 0 ? 30 : Mod.Current.Settings.SpaceCombatTurns) * TicksPerSecond; +#if DEBUG + Console.WriteLine($"***PROCESSING COMBAT TICK: {tick} of {maxTick}"); +#endif + //unleash the dogs of war! + foreach (var comObj in CombatObjects) + comObj.debuginfo = ""; //cleardebuginfo txt. + + // remove shields from vehicles lacking supplies + foreach (var comObj in CombatObjects.OfType()) + { + var v = comObj.WorkingVehicle; + if (v is SpaceVehicle) + { + var sv = v as SpaceVehicle; + if (sv.SupplyRemaining <= 0) + { + sv.NormalShields = 0; + sv.PhasedShields = 0; + } + } + } + + foreach (var comObj in CombatObjects.Where(ccobj => !ccobj.WorkingObject.IsDestroyed).ToArray()) + { +#if DEBUG + Console.WriteLine("comObj.helm " + comObj.strID); +#endif + comObj.helm(); //heading and thrust + } + + foreach (var comObj in CombatObjects.Where(o => !o.WorkingObject.IsDestroyed).ToArray()) + firecontrol(tick, comObj); //fire ready weapons. + + foreach (var comObj in CombatObjects) + SimNewtonianPhysics(comObj); //physicsmove objects. + + if (cmdfreqCounter >= Battle_Space.CommandFrequencyTicks) + { + foreach (CombatControlledObject ccobj in ControlledCombatObjects.Where(ccobj => !ccobj.WorkingObject.IsDestroyed)) + { + commandAI(ccobj, tick); + } + cmdfreqCounter = 0; + } + + foreach (CombatNode comNod in FreshNodes.ToArray()) + { + CombatNodes.Add(comNod); + FreshNodes.Remove(comNod); +#if DEBUG + Console.WriteLine("adding " + comNod.strID + " to combatNodes from fresh"); +#endif + } + foreach (CombatNode comNod in DeadNodes.ToArray()) + { + CombatNodes.Remove(comNod); + DeadNodes.Remove(comNod); + if (comNod is CombatObject) + { + + foreach (CombatEmpire emp in Empires.Values) + { + emp.removeComObj((CombatObject)comNod); + } + } +#if DEBUG + Console.WriteLine("disposing obj from deadNodes"); +#endif + + } + + bool ships_persuing = true; // TODO - check if ships are actually pursuing + bool ships_inrange = true; //ships are in skipdrive interdiction range of enemy ships TODO - check if ships are in range + //TODO: check for alive missiles and bullets. + bool hostiles = ControlledCombatObjects.Any(o => !o.WorkingCombatant.IsDestroyed && ControlledCombatObjects.Any(o2 => !o2.WorkingCombatant.IsDestroyed && o.WorkingCombatant.IsHostileTo(o2.WorkingCombatant.Owner))); + + bool cont; + if (!ships_persuing && !ships_inrange) + { + cont = false; + Console.WriteLine("***COMBAT END - ships are no longer pursuing each other or in weapons range"); + } + else if (!hostiles) + { + Console.WriteLine("***COMBAT END - no hostiles remain"); + cont = false; + } + else if (tick > maxTick) + { + Console.WriteLine("***COMBAT END - time expired"); + cont = false; + } + else + cont = true; + cmdfreqCounter++; + tick++; + CurrentTick = tick; + return cont; + } + + public int CurrentTick { get; private set; } + + public void Resolve() + { + Start(); + + + int tick = 0, cmdFreqCounter = 0; + while (ProcessTick(ref tick, ref cmdFreqCounter)) + { + // keep on truckin' + } + + End(tick); + } + + + public PointXd SimNewtonianPhysics(CombatNode comObj) + { + if (comObj is CombatObject) + { + CombatObject comObjo = (CombatObject)comObj; + comObjo.cmbt_accel = (NMath.accelVector(comObjo.cmbt_mass, comObjo.cmbt_thrust)); + comObjo.cmbt_vel += comObjo.cmbt_accel / TicksPerSecond; +#if DEBUG + Console.WriteLine(comObj.strID + " Acc " + comObjo.cmbt_accel); +#endif + } + + comObj.cmbt_loc += comObj.cmbt_vel / TicksPerSecond; +#if DEBUG + Console.WriteLine(comObj.strID + " Loc " + comObj.cmbt_loc); + + Console.WriteLine(comObj.strID + " Vel " + comObj.cmbt_vel); +#endif + return comObj.cmbt_loc; + } + + + /// + /// this is to make animation/ship movement smoother, and should not affect the physics in any way. + /// + /// + /// + /// + public PointXd InterpolatePosition(CombatNode comObj, double fractionalTick) + { + return comObj.cmbt_loc + comObj.cmbt_vel / TicksPerSecond * (Fix16)fractionalTick; + } + + public void commandAI(CombatControlledObject ccobj, int battletick) + { + //do AI decision stuff. + //pick a primary target to persue, use AI script from somewhere. this could also be a formate point. and could be a vector rather than a static point. + if (ccobj.WorkingObject != null) + { + + // int hp1 = ccobj.WorkingCombatant.Hitpoints; + // int hp2 = ccobj.WorkingObject.Hitpoints; + // int hp3 = ccobj.WorkingObject.HullHitpoints; + // int hp4 = ccobj.StartCombatant.Hitpoints; + // int hp5 = ccobj.StartCombatant.HullHitpoints; + //#if DEBUG + // Console.WriteLine(ccobj.WorkingCombatant.Name); + // Console.WriteLine("hp = " + hp1 + ", " + hp2 + ", " + hp3 + ", " + hp4 + ", " + hp5); + + // Vehicle startV = (Vehicle)ccobj.StartCombatant; + // foreach (Component comp in startV.Components) + // { + // Console.WriteLine(comp.Name + " container " + comp.Container); + // } + //#endif + string comAI = ""; + //CombatObject tgtObj; + if (ccobj.WorkingObject.Owner != null && Empires[ccobj.WorkingObject.Owner].hostile.Any()) + { + /*old + tgtObj = Empires[ccobj.WorkingObject.Owner].hostile[0]; + combatWaypoint wpt = new combatWaypoint(tgtObj); + ccobj.waypointTarget = wpt; + //pick a primary target to fire apon from a list of enemy within weapon range + ccobj.weaponTarget = new List(); + ccobj.weaponTarget.Add(Empires[ccobj.WorkingObject.Owner].hostile[0]); + * */ + ccobj.calcWaypoint(); + ccobj.calcWpnTarget(); + } + else + { +#if DEBUG + Console.WriteLine(ccobj.WorkingCombatant.Name + " Has no hostile Targets"); +#endif + } + /*if (IsReplay && battletick < 1000) + { + List evnts = ReplayLog.EventsForObjectAtTick(ccobj, battletick).ToList(); + var locevnts = evnts.OfType().Where(e => e.Object == ccobj && e.Tick == battletick); + comAI = "Location "; + if (locevnts.Any() && locevnts.All(le => le.Location == ccobj.cmbt_loc)) + comAI += "Does match \r\n"; + else + comAI += "Not matched \r\n"; + } + else if (!IsReplay && battletick < 1000) + {*/ + CombatLocationEvent locevnt = new CombatLocationEvent(battletick, ccobj, ccobj.cmbt_loc); + //ReplayLog.Events.Add(locevnt); + //} + + ccobj.debuginfo += comAI; + } + } + + private void missilefirecontrol(int tick, CombatSeeker comSek) + { + //Fix16 locdistance = Trig.distance(comSek.cmbt_loc, comSek.weaponTarget[0].cmbt_loc); + //PointXd vectortowaypoint = comSek.cmbt_loc - comSek.waypointTarget.cmbt_loc; + //Fix16 locdistance2 = vectortowaypoint.Length; + PointXd vectortowaypoint = comSek.cmbt_loc - comSek.weaponTarget[0].cmbt_loc; + Fix16 locdistance = vectortowaypoint.Length; +#if DEBUG + //Console.WriteLine("firecontrol for: " + comSek.strID); + //Console.WriteLine(comSek.strID + " Targeting " + comSek.weaponTarget[0].strID); + Console.WriteLine(comSek.strID + " Range " + locdistance + "to " + comSek.weaponTarget[0].strID); + //Console.WriteLine("Rangettgt " + locdistance2); + //Console.WriteLine("Rangettgt " + locdistance3); +#endif + + if (locdistance <= comSek.cmbt_vel.Length / TicksPerSecond)//erm, I think? (if we're as close as we're going to get in one tick) could screw up at high velocities. + { +#if DEBUG + Console.WriteLine("ProxDetonation!"); +#endif + CombatTakeFireEvent evnt = comSek.seekertargethit; + //if (!IsReplay) + { + evnt.IsHit = true; + evnt.Tick = tick; //update the tick to where the hit occurs. + } + /*else if (!evnt.IsHit || evnt.Tick != tick) + { + Console.WriteLine("Seeker Hit Out of synch detected!"); + Console.WriteLine("Seeker: " + comSek.ID); + Console.WriteLine("Attacker: " + comSek.launcher.weapon.Owner.Name); + Console.WriteLine("Target: " + comSek.weaponTarget[0]); + Console.WriteLine("This Tick: " + tick); + Console.WriteLine("Expected Tick: " + tick); + Console.WriteLine("Expected Hit: " + evnt.IsHit); + }*/ + Component launcher = comSek.launcher.weapon; + CombatObject target = comSek.weaponTarget[0]; + if (target is CombatControlledObject) //TODO handle seekers and other objects as seeker targets. + { + CombatControlledObject ccTarget = (CombatControlledObject)target; + var target_icomobj = ccTarget.WorkingObject; + //var shot = new Combat.Shot(launcher, target_icomobj, 0); + //defender.TakeDamage(weapon.Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, battle); + //int damage = shot.Damage; + combatDamage(tick, target, comSek.launcher, 1, comSek.getDice()); + if (target_icomobj.MaxNormalShields < target_icomobj.NormalShields) + target_icomobj.NormalShields = target_icomobj.MaxNormalShields; + if (target_icomobj.MaxPhasedShields < target_icomobj.PhasedShields) + target_icomobj.PhasedShields = target_icomobj.MaxPhasedShields; + + } + else if (target is CombatSeeker) + { + int damage = 0; + WeaponInfo w = launcher.Template.ComponentTemplate.WeaponInfo; + if (launcher.Template.Mount == null) + damage = w.Damage; + else + damage = w.Damage * launcher.Template.Mount.WeaponDamagePercent / 100; + + DamageType damageType = w.DamageType; + CombatSeeker targetsec = (CombatSeeker)target; + var shot = new Shot(launcher.Parents.OfType().Single(), launcher, target.WorkingObject, 0); // TODO - range of seekers targeting seekers? + targetsec.TakeDamage(new Hit(shot, target.WorkingObject, damage), comSek.getDice()); + + if (targetsec.IsDestroyed) + { +#if DEBUG + Console.WriteLine(target.strID + " is destroyed!"); +#endif + targetsec.Dispose(); + target.deathTick = tick; + //if (!IsReplay) + //{ + CombatDestructionEvent deathEvent = new CombatDestructionEvent(tick, target, target.cmbt_loc); + //ReplayLog.Events.Add(deathEvent); + //} + foreach (KeyValuePair empireKVP in Empires) + { + CombatEmpire empire = empireKVP.Value; + if (empire.ownships.Contains(target)) + empire.ownships.Remove(target); + else if (empire.hostile.Contains(target)) + empire.hostile.Remove(target); + else if (empire.friendly.Contains(target)) + empire.friendly.Remove(target); + } + } + } + + DeadNodes.Add(comSek); + CombatNodes.Remove(comSek); + } + else if (tick > comSek.deathTick) + { +#if DEBUG + Console.WriteLine("Out of Juice!"); +#endif + DeadNodes.Add(comSek); + CombatNodes.Remove(comSek); + } + } + + /// + /// TODO - move fire control to CombatObject as an abstract method + /// + /// + /// + public void firecontrol(int tic_countr, CombatObject comObj) + { + if (comObj.strategy != null) + comObj.strategy.Zeroize(); + if (comObj is CombatSeeker) + { + //is a seeker + missilefirecontrol(tic_countr, (CombatSeeker)comObj); + } + else if (comObj is CombatControlledObject) + { + + //is a ship, base, unit, or planet + CombatControlledObject ccobj = (CombatControlledObject)comObj; +#if DEBUG + Console.WriteLine("firecontrol for: " + ccobj.WorkingCombatant.Name); +#endif + + List allweapons = ccobj.Weapons.ToList(); + + for (int i = 0; i < ccobj.strategy.numberOfTargetStrategies(); i++) + { + CombatObject targetObject = ccobj.strategy.targetforgroup(ccobj, i); + List wpnindexesthistarget = ccobj.strategy.weaponslists[i].Keys.ToList(); + List wpnsforthistarget = new List(); +#if DEBUG + Console.WriteLine("Target: " + (targetObject == null ? "(none)" : targetObject.strID)); +#endif + foreach (int wpndex in wpnindexesthistarget) + { + if (wpndex < allweapons.Count)//handling a case where a strategy might have more wpns than this ship does. + wpnsforthistarget.Add(allweapons[wpndex]); + } + + foreach (CombatWeapon wpn in wpnsforthistarget) + { +#if DEBUG + Console.WriteLine("Weapon: " + wpn.weapon.Name); +#endif + //var wpn = ccobj.Weapons.ToList()[i]; + ICombatant ship = (ICombatant)ccobj.WorkingObject; + + if (comObj.weaponTarget.Count() > 0 && //if there ARE targets + wpn.CanTarget(targetObject.WorkingObject) && //if we CAN target + tic_countr >= wpn.nextReload && //if the weapon is ready to fire. + ( + // if the firing object has enough supplies (or is not a space vehicle, and so does not use supplies) + !(comObj.WorkingObject is SpaceVehicle) || + ((SpaceVehicle)comObj.WorkingObject).HasInfiniteSupplies || + wpn.weapon.Template.SupplyUsage <= ((SpaceVehicle)comObj.WorkingObject).SupplyRemaining + )) + { + if (wpn.isinRange(comObj, targetObject))//weaponTarget[i] should match the + { + //this function figures out if there's a hit, deals the damage, and creates an event. +#if DEBUG + Console.WriteLine("Fire Weapon!"); + +#endif + //first create the event for the target ship + CombatTakeFireEvent targets_event = FireWeapon(tic_countr, comObj, wpn, targetObject); + //then create teh event for this ship firing on the target + CombatFireOnTargetEvent attack_event = new CombatFireOnTargetEvent(tic_countr, comObj, comObj.cmbt_loc, wpn, targets_event); + + + //if (!IsReplay) + { + targets_event.fireOnEvent = attack_event; + //ReplayLog.Events.Add(targets_event); + //ReplayLog.Events.Add(attack_event); + } + + } + } + } + } + //update any events where this ship has taken fire, and set the location. + /*(if (!IsReplay) + { + foreach (CombatEvent comevnt in ReplayLog.EventsForObjectAtTick(comObj, tic_countr)) + { + if (comevnt.GetType() == typeof(CombatTakeFireEvent)) + { + CombatTakeFireEvent takefire = (CombatTakeFireEvent)comevnt; + takefire.setLocation(comObj.cmbt_loc); + } + } + }*/ + } + } + + int to_hit(Sector sector, CombatObject attacker, CombatWeapon weapon, CombatObject target) + { + + //// TODO - check range too + //var tohit = + // Mod.Current.Settings.WeaponAccuracyPointBlank // default weapon accuracy at point blank range + // + weapon.weapon.Template.WeaponAccuracy // weapon's intrinsic accuracy modifier + // + weapon.weapon.Container.Accuracy // firing ship's accuracy modifier + // - target_icomobj.Evasion // target's evasion modifier + // - Sector.GetAbilityValue(target.WorkingObject.Owner, "Sector - Sensor Interference").ToInt() // sector evasion modifier + // + Sector.GetAbilityValue(attacker.WorkingObject.Owner, "Combat Modifier - Sector").ToInt() // generic combat bonuses + // - Sector.GetAbilityValue(target.WorkingObject.Owner, "Combat Modifier - Sector").ToInt() + // + Sector.StarSystem.GetAbilityValue(attacker.WorkingObject.Owner, "Combat Modifier - System").ToInt() + // - Sector.StarSystem.GetAbilityValue(target.WorkingObject.Owner, "Combat Modifier - System").ToInt() + // + attacker.WorkingObject.Owner.GetAbilityValue("Combat Modifier - Empire").ToInt() + // - target.WorkingObject.Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); + //// TODO - moddable min/max hit chances with per-weapon overrides + var vehicle = (IMobileSpaceObject)attacker.WorkingObject; + int wpn_Accu_blankrng = Mod.Current.Settings.WeaponAccuracyPointBlank; + int wpn_AccuMod = weapon.weapon.Template.WeaponAccuracy; // weapon's intrinsic accuracy modifier + int atkr_AccuMod = vehicle.Accuracy;//weapon.weapon.Container.Accuracy; // firing ship's accuracy modifier + int tgt_EvdMod = target.WorkingObject.Evasion; // target's evasion modifier + + return + wpn_Accu_blankrng + + wpn_AccuMod + + atkr_AccuMod + - tgt_EvdMod; + } + + + private CombatTakeFireEvent FireSeeker(int tick, CombatObject attacker, CombatWeapon weapon, CombatObject target) + { + CombatTakeFireEvent target_event = null; + SeekingWeaponInfo skrinfo = (SeekingWeaponInfo)weapon.weapon.Template.ComponentTemplate.WeaponInfo; + int targettick = tick + (int)CombatSeeker.seekerTimeToTarget(attacker, target, skrinfo) * TicksPerSecond; + //create seeker and node. + CombatSeeker seeker = new CombatSeeker(attacker, weapon, -tempObjCounter); + seeker.waypointTarget = new CombatWaypoint(target); + seeker.weaponTarget = new List() { target }; + seeker.deathTick = tick + weapon.maxRange_time * TicksPerSecond; + seeker.cmbt_head = new Compass(attacker.cmbt_head.Degrees, false); + seeker.cmbt_att = new Compass(attacker.cmbt_att.Degrees, false); + FreshNodes.Add(seeker); +#if DEBUG + Console.WriteLine("Seeker " + seeker.strID + " added to FreshNodes"); +#endif + foreach (var emp in Empires.Values) + { + if (emp.ownships.Contains(attacker)) + emp.ownships.Add(seeker); + if (emp.friendly.Contains(attacker)) + emp.friendly.Add(seeker); + if (emp.neutral.Contains(attacker)) + emp.neutral.Add(seeker); + if (emp.hostile.Contains(attacker)) + emp.hostile.Add(seeker); + } + + /*if (IsReplay) + { +#if DEBUG + Console.WriteLine("Tick: " + targettick); +#endif + //read the event + //target_event = ReplayLog.EventsForObjectAtTick(target, targettick).OfType().ToList()[0]; + List atkrevnts = ReplayLog.EventsForObjectAtTick(attacker, tick).OfType().ToList(); + target_event = atkrevnts[0].TakeFireEvent; //need to check which in the list here is the correct event, since ships with multiple weapons will have multiple events here. + //target_event.BulletNode = seeker; + seeker.seekertargethit = target_event; //need to link the seeker and the event. (since the seeker object does not get carried over between processing and replay, but gets re-created) + } + else + {*/ +#if DEBUG + Console.WriteLine("Tick: " + targettick); +#endif + //*write* the event + //the tick gets updated if there's an acutal hit by the seeker fire control + target_event = new CombatTakeFireEvent(targettick, target, target.cmbt_loc, false); //false since we don't know if it's going to hit yet. + target_event.BulletNode = seeker; + seeker.seekertargethit = target_event; //seeker stores a link to the event so we can flag the event has having hit the ship later. + //} + + return target_event; + } + + private CombatTakeFireEvent FireBolt(int tick, CombatObject attacker, CombatWeapon weapon, CombatObject target, bool hit) + { + CombatTakeFireEvent target_event = null; + + + Fix16 boltTTT = weapon.boltTimeToTarget(attacker, target); //in seconds + //set target tick for the future. + int targettic = tick + (int)boltTTT * TicksPerSecond; + + + + /*if (IsReplay) + { + //read the event + target_event = ReplayLog.EventsForObjectAtTick(target, targettic).OfType().ToList()[0];// need to check for the right event here. + + //because bullets don't need to be created during processing + Fix16 rThis_distance = (target_event.Location - target_event.fireOnEvent.Location).Length; + PointXd bulletVector = Trig.intermediatePoint(attacker.cmbt_loc, target_event.Location, rThis_distance); + if (!target_event.IsHit) //jitter it! + { + // TODO - take into account firing ship's accuracy and target's evasion + int accuracy = target_event.fireOnEvent.Weapon.weapon.Template.WeaponAccuracy; + int jitterAmount = 0; + if (accuracy < 50) + jitterAmount = (int)System.Math.Pow(50 - accuracy, 2) / 50; + if (jitterAmount < 5) + jitterAmount = 5; + if (jitterAmount > 30) + jitterAmount = 30; + //do *NOT* use ship prng here!!!! (since this is not done during normal processing, it'll cause differences, use any rand) + Compass jitter = new Compass(RandomHelper.Range(-jitterAmount, jitterAmount), false); + Compass bulletCompass = bulletVector.Compass; + Compass offsetCompass = bulletCompass + jitter; + bulletVector = offsetCompass.Point(bulletVector.Length); + } + CombatNode bullet = new CombatNode(attacker.cmbt_loc, bulletVector, -tempObjCounter, "BLT"); + target_event.BulletNode = bullet; + FreshNodes.Add(bullet); + if (target_event.IsHit) + { + bullet.deathTick = target_event.Tick; + } + else + { + bullet.deathTick = tick + target_event.fireOnEvent.Weapon.maxRange; + } + } + else + {*/ + //*write* the event + target_event = new CombatTakeFireEvent(targettic, target, target.cmbt_loc, hit); + int psudoboltID = -tempObjCounter; //increase it just so processing has the same number of tempObjects created as replay will. + //} + + return target_event; + } + + private CombatTakeFireEvent FireBeam(int tick, CombatObject attacker, CombatWeapon weapon, CombatObject target, bool hit) + { + CombatTakeFireEvent target_event = null; + int targettick = tick; + /*if (IsReplay) + { //read the replay... nothing to do if a beam. + } + else*/ + { //write the event. + target_event = new CombatTakeFireEvent(targettick, target, target.cmbt_loc, hit); + } + return target_event; + } + + public CombatTakeFireEvent FireWeapon(int battletick, CombatObject attacker, CombatWeapon weapon, CombatObject target) + { +#if DEBUG + Console.WriteLine("FireWeapon/TakeFireEvent"); + Console.WriteLine(attacker.WorkingObject); + Console.WriteLine(weapon.weapon.Name); + Console.WriteLine(target.WorkingObject); +#endif + var wpninfo = weapon.weapon.Template.ComponentTemplate.WeaponInfo; + Fix16 rangeForDamageCalcs = (Fix16)0; + Fix16 rangetotarget = NMath.distance(attacker.cmbt_loc, target.cmbt_loc);//Trig.distance(attacker.cmbt_loc, target.cmbt_loc); + + int targettic = battletick; + + //reset the weapon nextReload. + weapon.nextReload = battletick + (int)(weapon.reloadRate * TicksPerSecond); // TODO - round up, so weapons that fire more than 10 times per second don't fire at infinite rate + + var target_icomobj = target.WorkingObject; + //Vehicle defenderV = (Vehicle)target_icomobj; + var attkVeh = (IMobileSpaceObject)attacker.WorkingObject; + if (!weapon.CanTarget(target_icomobj)) + return null; + int tohit = this.to_hit(Sector, attacker, weapon, target); + + if (tohit > 99) + tohit = 99; + if (tohit < 1) + tohit = 1; + if (attkVeh.HasAbility("Weapons Always Hit"))//weapon.weapon.Container.HasAbility("Weapons Always Hit")) + tohit = 100; + + //bool hit = RandomHelper.Range(0, 99) < tohit; + PRNG dice = attacker.getDice(); + bool hit = dice.Range(0, 99) < tohit; + + CombatTakeFireEvent target_event = null; + + if (weapon.weaponType == "Seeker") + { + target_event = FireSeeker(battletick, attacker, weapon, target); + } + //for bolt calc, need again for adding to list. + else if (weapon.weaponType == "Bolt") + { + target_event = FireBolt(battletick, attacker, weapon, target, hit); + rangeForDamageCalcs = rangeForDamageCalcs_bolt(attacker, weapon, target); + } + + else //not bolt, should be a beam. + { + target_event = FireBeam(battletick, attacker, weapon, target, hit); + rangeForDamageCalcs = rangetotarget / KilometersPerSquare; + } + + rangeForDamageCalcs = Fix16.Max((Fix16)1, rangeForDamageCalcs); //don't be less than 1. + + // consume supplies + if (attacker.WorkingObject is SpaceVehicle) + { + var sv = (SpaceVehicle)attacker.WorkingObject; + if (!sv.HasInfiniteSupplies) + sv.SupplyRemaining -= weapon.weapon.Template.SupplyUsage; + } + + if (hit && !target_icomobj.IsDestroyed && weapon.weaponType != "Seeker") + { + combatDamage(battletick, target, weapon, rangeForDamageCalcs, attacker.getDice()); + //var shot = new CombatShot(weapon.weapon, target_icomobj, (int)rangeForDamageCalcs); + ////defender.TakeDamage(weapon.Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, battle); + //int damage = shot.Damage; + //combatDamage(battletick, target, weapon, damage, attacker.getDice()); + //if (target_icomobj.MaxNormalShields < target_icomobj.NormalShields) + // target_icomobj.NormalShields = target_icomobj.MaxNormalShields; + //if (target_icomobj.MaxPhasedShields < target_icomobj.PhasedShields) + // target_icomobj.PhasedShields = target_icomobj.MaxPhasedShields; + //if (defender.IsDestroyed) + //battle.LogTargetDeath(defender); + } + return target_event; + } + + + public static Fix16 rangeForDamageCalcs_bolt(CombatObject attacker, CombatWeapon weapon, CombatObject target) + { + Fix16 boltTTT = weapon.boltTimeToTarget(attacker, target); + Fix16 boltSpeed = weapon.boltClosingSpeed(attacker, target); // m/s + Fix16 rThis_distance = boltSpeed * boltTTT; + + Fix16 rMax_distance = boltSpeed * weapon.maxRange; //s * t = d + Fix16 rMin_distance = boltSpeed * weapon.minRange; //s * t = d + + Fix16 rMax_distance_standstill = weapon.boltSpeed * weapon.maxRange; + Fix16 rMin_distance_standstill = weapon.boltSpeed * weapon.minRange; + + Fix16 scaler = rMax_distance_standstill / rMax_distance; + + Fix16 rangeForDamageCalcs = rThis_distance * scaler * (Fix16)0.001; + return rangeForDamageCalcs; + } + + private void combatDamage(int tick, CombatObject target, CombatWeapon weapon, int rangeForDamageCalcs, PRNG attackersdice) + { + var target_icomobj = target.WorkingObject; + var shot = new CombatShot(weapon.weapon, target_icomobj, (int)rangeForDamageCalcs); + //defender.TakeDamage(weapon.Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, battle); + int damage = shot.Damage; + //combatDamage(battletick, target, weapon, damage, attacker.getDice()); + if (target_icomobj.MaxNormalShields < target_icomobj.NormalShields) + target_icomobj.NormalShields = target_icomobj.MaxNormalShields; + if (target_icomobj.MaxPhasedShields < target_icomobj.PhasedShields) + target_icomobj.PhasedShields = target_icomobj.MaxPhasedShields; + + DamageType damageType = weapon.weapon.Template.ComponentTemplate.WeaponInfo.DamageType; + + var targetV = target.WorkingObject; + if (targetV.IsDestroyed) + return; //damage; // she canna take any more! + + var hit = new Hit(new Shot(weapon.weapon.Parents.OfType().Single(), weapon.weapon, target.WorkingObject, rangeForDamageCalcs), target.WorkingObject, damage); + targetV.TakeDamage(hit, attackersdice); + + CheckForDeath(tick, target); + } + + public bool CheckForDeath(int tick, CombatObject cobj) + { + var obj = cobj.WorkingObject; + if (cobj.WorkingObject.IsDestroyed) + { +#if DEBUG + Console.WriteLine(cobj.strID + " is destroyed!"); +#endif + obj.Dispose(); + cobj.deathTick = tick; + //if (!IsReplay) + { + CombatDestructionEvent deathEvent = new CombatDestructionEvent(CurrentTick, cobj, cobj.cmbt_loc); +// ReplayLog.Events.Add(deathEvent); + } + foreach (KeyValuePair empireKVP in Empires) + { + CombatEmpire empire = empireKVP.Value; + if (empire.ownships.Contains(cobj)) + empire.ownships.Remove(cobj); + else if (empire.hostile.Contains(cobj)) + empire.hostile.Remove(cobj); + else if (empire.friendly.Contains(cobj)) + empire.friendly.Remove(cobj); + } + + return true; + } + + return false; + } + + public System.Drawing.Image Icon + { + get { return StartCombatants.Values.OfType().Largest().Icon; } + } + + public System.Drawing.Image Portrait + { + get { return StartCombatants.Values.OfType().Largest().Portrait; } + } + + public IEnumerable IconPaths + { + get + { + return StartCombatants.Values.OfType().Largest().IconPaths; + } + } + + public IEnumerable PortraitPaths + { + get + { + return StartCombatants.Values.OfType().Largest().PortraitPaths; + } + } + + public ICombatant FindStartCombatant(ICombatant c) + { + return StartCombatants[c.ID]; + } + + public ICombatant FindWorkingCombatant(ICombatant c) + { + foreach (var n in CombatNodes.OfType()) + { + if (n.StartCombatant == c) + return n.WorkingCombatant; + if (n.WorkingCombatant == c) + return c; + } + throw new ArgumentException("Can't find working combatant for " + c + "."); + } + + public ICombatant FindActualCombatant(ICombatant c) + { + return ActualCombatants[c.ID]; + } + + public CombatObject FindCombatObject(ICombatant c) + { + foreach (var n in CombatNodes.OfType()) + { + if (n.StartCombatant == c || n.WorkingCombatant == c) + return n; + } + throw new ArgumentException("Can't find combat object for " + c + "."); + } + + /// + /// Battles are scanned by anyone who has a combatant in them; otherwise they're unknown. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + // TODO - "share combat logs" treaties? + return StartCombatants.Values.Any(c => c.Owner == emp) ? Visibility.Scanned : Visibility.Unknown; + } + + public void Redact(Empire emp) + { + var vis = CheckVisibility(emp); + if (vis < Visibility.Fogged) + Dispose(); + else + { + // start combatants are memories but need to be redacted anyway + // TODO - why are they not considered "scanned" so we can see the designs? + foreach (var memory in StartCombatants.Values) + memory.Redact(emp); + } + } + + public bool IsMemory + { + get; + set; + } + + public double Timestamp + { + get; + set; + } + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + public long ID + { + get; + set; + } + + public bool IsDisposed + { + get; + set; + } + + public void Dispose() + { + Current.Remove(this); + Previous.Remove(this); + Galaxy.Current.Battles.Remove(this); + IsDisposed = true; + } + + public Empire Owner + { + get { return null; } + } + } +} diff --git a/FrEee/Game/Objects/Combat2/CombatPlanet.cs b/FrEee/Objects/Combat2/CombatPlanet.cs similarity index 96% rename from FrEee/Game/Objects/Combat2/CombatPlanet.cs rename to FrEee/Objects/Combat2/CombatPlanet.cs index 1931c3084..fcd8e0e95 100644 --- a/FrEee/Game/Objects/Combat2/CombatPlanet.cs +++ b/FrEee/Objects/Combat2/CombatPlanet.cs @@ -1,178 +1,178 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; - -using NewtMath.f16; -using FixMath.NET; -using FrEee.Game.Objects.Space; - -namespace FrEee.Game.Objects.Combat2 -{ - public class CombatPlanet : CombatControlledObject - { - /// - /// use this constructor when creating a 'Start' combatPlanet. - /// - /// - /// - /// - /// - /// - public CombatPlanet(Planet start, Planet working, int battleseed, long OriginalID, string IDPrefix = "PLN") - : base(start, working, new PointXd(0, 0, 0), new PointXd(0, 0, 0), battleseed, IDPrefix) - { - ID = OriginalID; - // TODO - planets that can move in combat? - //- I don't think there's much point in allowing planets to move in combat. combat shouldnt be long enough that it would make any noticible difference. - cmbt_mass = Fix16.MaxValue; - maxfowardThrust = 0; - maxStrafeThrust = 0; - maxRotate.Radians = 0; - strategy = new StragegyObject_Default(); - } - - #region fields & properties - - /// - /// The planet's state at the start of combat. - /// - [DoNotAssignID] - [DoNotSerialize] - public Planet StartPlanet { get { return (Planet)StartCombatant; } private set { StartCombatant = value; } } - - /// - /// The current state of the planet. - /// - [DoNotSerialize] - public Planet WorkingPlanet { get { return (Planet)WorkingObject; } private set { WorkingObject = value; } } - - #endregion - - #region methods and functions - public override void renewtoStart() - { - -#if DEBUG - Console.WriteLine("renewtoStart for CombatPlanet"); -#endif - var planet = StartPlanet.Copy(); - planet.IsMemory = true; - if (planet.Owner != StartPlanet.Owner) - planet.Owner.Dispose(); // don't need extra empires! - if (planet.Colony != null) - { - planet.Colony.Owner = StartPlanet.Owner; - - // copy over the facilities individually so they can take damage without affecting the starting state - planet.Colony.Facilities.Clear(); -#if DEBUG - Console.WriteLine("copying facilities"); -#endif - foreach (var f in (StartPlanet.Colony.Facilities)) - { - var fcopy = f.Copy(); - planet.Colony.Facilities.Add(fcopy); -#if DEBUG - Console.Write("."); -#endif - } -#if DEBUG - Console.WriteLine("Done"); -#endif - } - - WorkingPlanet = planet; - RefreshWeapons(); - - foreach (var w in Weapons) - w.nextReload = 1; - - base.renewtoStart(); -#if DEBUG - Console.WriteLine("Done"); -#endif - } - - protected override void RefreshWeapons() - { - var weapons = new List(); - weapons = new List(); -#if DEBUG - Console.WriteLine("RefreshingWeapons"); -#endif - foreach (Component weapon in WorkingPlanet.Weapons) - { - CombatWeapon wpn = new CombatWeapon(weapon); - weapons.Add(wpn); -#if DEBUG - Console.Write("."); -#endif - } - Weapons = weapons; -#if DEBUG - Console.WriteLine("Done"); -#endif - } - - - public override void TakeSpecialDamage(Battle_Space battle, Hit hit, PRNG dice) - { - // find out who hit us - var atkr = battle.FindCombatObject(hit.Shot.Attacker); - - // find out how too - var dmgType = hit.Shot.DamageType; - - // conditions damage - { - var cdmg = dmgType.ConditionsDamage.Value * hit.Shot.DamageLeft / 100; - // TODO - conditions damage, once we have conditions - } - - // plagues - { - var plague = dmgType.PlagueLevel; - // TODO - plaguing planets, once we have plagues - } - - // population damage - { - var popdmg = dmgType.PopulationDamage.Value * hit.Shot.DamageLeft / 100; - WorkingPlanet.TakePopulationDamage(popdmg, dice); - } - - // disrupt reload - { - var disrupt = dmgType.DisruptReload.Value * hit.Shot.DamageLeft / 100; - foreach (var w in Weapons) - { - w.nextReload += disrupt; - if (w.nextReload - battle.CurrentTick > w.reloadRate) - w.nextReload = battle.CurrentTick + w.reloadRate; // this damage type can't increase past normal reload time - } - } - - // increase reload (doesn't work againts master computers, even disabled ones) - if (WorkingPlanet.Colony != null) - { - if (!WorkingPlanet.Colony.Facilities.Cast().Union(WorkingPlanet.Cargo.Units.SelectMany(u => u.Components).Cast()).Any(c => c.HasAbility("Master Computer"))) - { - var inc = dmgType.IncreaseReload.Value * hit.Shot.DamageLeft / 100; - foreach (var w in Weapons) - w.nextReload += inc; // this damage type can increase past normal reload time - } - } - } - - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FrEee.Utility; +using FrEee.Utility.Extensions; + +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Vehicles; +using FrEee.Game.Objects.Combat; +using FrEee.Game.Objects.Technology; +using FrEee.Modding; + +using NewtMath.f16; +using FixMath.NET; +using FrEee.Game.Objects.Space; + +namespace FrEee.Game.Objects.Combat2 +{ + public class CombatPlanet : CombatControlledObject + { + /// + /// use this constructor when creating a 'Start' combatPlanet. + /// + /// + /// + /// + /// + /// + public CombatPlanet(Planet start, Planet working, int battleseed, long OriginalID, string IDPrefix = "PLN") + : base(start, working, new PointXd(0, 0, 0), new PointXd(0, 0, 0), battleseed, IDPrefix) + { + ID = OriginalID; + // TODO - planets that can move in combat? + //- I don't think there's much point in allowing planets to move in combat. combat shouldnt be long enough that it would make any noticible difference. + cmbt_mass = Fix16.MaxValue; + maxfowardThrust = 0; + maxStrafeThrust = 0; + maxRotate.Radians = 0; + strategy = new StragegyObject_Default(); + } + + #region fields & properties + + /// + /// The planet's state at the start of combat. + /// + [DoNotAssignID] + [DoNotSerialize] + public Planet StartPlanet { get { return (Planet)StartCombatant; } private set { StartCombatant = value; } } + + /// + /// The current state of the planet. + /// + [DoNotSerialize] + public Planet WorkingPlanet { get { return (Planet)WorkingObject; } private set { WorkingObject = value; } } + + #endregion + + #region methods and functions + public override void renewtoStart() + { + +#if DEBUG + Console.WriteLine("renewtoStart for CombatPlanet"); +#endif + var planet = StartPlanet.Copy(); + planet.IsMemory = true; + if (planet.Owner != StartPlanet.Owner) + planet.Owner.Dispose(); // don't need extra empires! + if (planet.Colony != null) + { + planet.Colony.Owner = StartPlanet.Owner; + + // copy over the facilities individually so they can take damage without affecting the starting state + planet.Colony.Facilities.Clear(); +#if DEBUG + Console.WriteLine("copying facilities"); +#endif + foreach (var f in (StartPlanet.Colony.Facilities)) + { + var fcopy = f.Copy(); + planet.Colony.Facilities.Add(fcopy); +#if DEBUG + Console.Write("."); +#endif + } +#if DEBUG + Console.WriteLine("Done"); +#endif + } + + WorkingPlanet = planet; + RefreshWeapons(); + + foreach (var w in Weapons) + w.nextReload = 1; + + base.renewtoStart(); +#if DEBUG + Console.WriteLine("Done"); +#endif + } + + protected override void RefreshWeapons() + { + var weapons = new List(); + weapons = new List(); +#if DEBUG + Console.WriteLine("RefreshingWeapons"); +#endif + foreach (Component weapon in WorkingPlanet.Weapons) + { + CombatWeapon wpn = new CombatWeapon(weapon); + weapons.Add(wpn); +#if DEBUG + Console.Write("."); +#endif + } + Weapons = weapons; +#if DEBUG + Console.WriteLine("Done"); +#endif + } + + + public override void TakeSpecialDamage(Battle_Space battle, Hit hit, PRNG dice) + { + // find out who hit us + var atkr = battle.FindCombatObject(hit.Shot.Attacker); + + // find out how too + var dmgType = hit.Shot.DamageType; + + // conditions damage + { + var cdmg = dmgType.ConditionsDamage.Value * hit.Shot.DamageLeft / 100; + // TODO - conditions damage, once we have conditions + } + + // plagues + { + var plague = dmgType.PlagueLevel; + // TODO - plaguing planets, once we have plagues + } + + // population damage + { + var popdmg = dmgType.PopulationDamage.Value * hit.Shot.DamageLeft / 100; + WorkingPlanet.TakePopulationDamage(popdmg, dice); + } + + // disrupt reload + { + var disrupt = dmgType.DisruptReload.Value * hit.Shot.DamageLeft / 100; + foreach (var w in Weapons) + { + w.nextReload += disrupt; + if (w.nextReload - battle.CurrentTick > w.reloadRate) + w.nextReload = battle.CurrentTick + w.reloadRate; // this damage type can't increase past normal reload time + } + } + + // increase reload (doesn't work againts master computers, even disabled ones) + if (WorkingPlanet.Colony != null) + { + if (!WorkingPlanet.Colony.Facilities.Cast().Union(WorkingPlanet.Cargo.Units.SelectMany(u => u.Components).Cast()).Any(c => c.HasAbility("Master Computer"))) + { + var inc = dmgType.IncreaseReload.Value * hit.Shot.DamageLeft / 100; + foreach (var w in Weapons) + w.nextReload += inc; // this damage type can increase past normal reload time + } + } + } + + #endregion + } +} diff --git a/FrEee/Game/Objects/Combat2/CombatReplayLog.cs b/FrEee/Objects/Combat2/CombatReplayLog.cs similarity index 96% rename from FrEee/Game/Objects/Combat2/CombatReplayLog.cs rename to FrEee/Objects/Combat2/CombatReplayLog.cs index 6a71ddd8d..6a637f941 100644 --- a/FrEee/Game/Objects/Combat2/CombatReplayLog.cs +++ b/FrEee/Objects/Combat2/CombatReplayLog.cs @@ -1,122 +1,122 @@ -using FrEee.Game.Objects.Technology; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using NewtMath.f16; - -namespace FrEee.Game.Objects.Combat2 -{ - public class CombatReplayLog - { - public ICollection Events { get; private set; } - - public CombatReplayLog() - { - Events = new List(); - } - - public IEnumerable EventsForTick(int tick) - { - return Events.Where(e => e.Tick == tick); - } - - public IEnumerable EventsForObject(CombatObject obj) - { - return Events.Where(e => e.Object != null && e.Object.ID == obj.ID).OrderBy(e => e.Tick); - } - - public IEnumerable EventsForObjectAtTick(CombatObject obj, int tick) - { - return Events.Where(e => e.Object != null && e.Object.ID == obj.ID && e.Tick == tick); - } - - public IEnumerable HitsAgainst(CombatObject obj) - { - return Events.OfType().Where(e => e.Object == obj && e.IsHit); - } - } - - public abstract class CombatEvent - { - public int Tick { get; set; } - public CombatObject Object { get; private set; } - - protected CombatEvent(int tick, CombatObject obj) - { - Tick = tick; - Object = obj; - } - } - - public class CombatLocationEvent : CombatEvent - { - public PointXd Location { get; protected set; } - public CombatLocationEvent(int tick, CombatObject obj, PointXd cmbt_loc) - : base(tick, obj) - { - this.Location = cmbt_loc; - } - } - public class CombatFireOnTargetEvent : CombatLocationEvent - { - public CombatTakeFireEvent TakeFireEvent { get; private set; } - public CombatWeapon Weapon { get; private set; } - - - /// - /// this event is for the object that is firing apon something else - /// - /// - /// - /// - /// - /// the event for the target ship - public CombatFireOnTargetEvent(int tick, CombatObject obj, PointXd loc, CombatWeapon weapon, CombatTakeFireEvent targetevent) - : base(tick, obj, loc) - { - this.Weapon = weapon; - this.TakeFireEvent = targetevent; - } - } - - public class CombatTakeFireEvent : CombatLocationEvent - { - public bool IsHit { get; set; } - public CombatNode BulletNode { get; set; } - public CombatFireOnTargetEvent fireOnEvent { get; set; } - /// - /// This event is for the object under fire. - /// - /// - /// - /// - /// whether this ship is hit or if the shot is a miss - public CombatTakeFireEvent(int tick, CombatObject obj, PointXd endpoint, bool hit) - : base(tick, obj, endpoint) - { - this.IsHit = hit; - } - - public void setLocation(PointXd location) - { - base.Location = location; - } - } - - - public class CombatDestructionEvent : CombatLocationEvent - { - public CombatDestructionEvent(int tick, CombatObject obj, PointXd point) - : base(tick, obj, point) - {} - } - - public class CombatEndBattleEvent : CombatEvent - { - public CombatEndBattleEvent(int tick) - : base(tick, null) - { } - } -} +using FrEee.Game.Objects.Technology; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using NewtMath.f16; + +namespace FrEee.Game.Objects.Combat2 +{ + public class CombatReplayLog + { + public ICollection Events { get; private set; } + + public CombatReplayLog() + { + Events = new List(); + } + + public IEnumerable EventsForTick(int tick) + { + return Events.Where(e => e.Tick == tick); + } + + public IEnumerable EventsForObject(CombatObject obj) + { + return Events.Where(e => e.Object != null && e.Object.ID == obj.ID).OrderBy(e => e.Tick); + } + + public IEnumerable EventsForObjectAtTick(CombatObject obj, int tick) + { + return Events.Where(e => e.Object != null && e.Object.ID == obj.ID && e.Tick == tick); + } + + public IEnumerable HitsAgainst(CombatObject obj) + { + return Events.OfType().Where(e => e.Object == obj && e.IsHit); + } + } + + public abstract class CombatEvent + { + public int Tick { get; set; } + public CombatObject Object { get; private set; } + + protected CombatEvent(int tick, CombatObject obj) + { + Tick = tick; + Object = obj; + } + } + + public class CombatLocationEvent : CombatEvent + { + public PointXd Location { get; protected set; } + public CombatLocationEvent(int tick, CombatObject obj, PointXd cmbt_loc) + : base(tick, obj) + { + this.Location = cmbt_loc; + } + } + public class CombatFireOnTargetEvent : CombatLocationEvent + { + public CombatTakeFireEvent TakeFireEvent { get; private set; } + public CombatWeapon Weapon { get; private set; } + + + /// + /// this event is for the object that is firing apon something else + /// + /// + /// + /// + /// + /// the event for the target ship + public CombatFireOnTargetEvent(int tick, CombatObject obj, PointXd loc, CombatWeapon weapon, CombatTakeFireEvent targetevent) + : base(tick, obj, loc) + { + this.Weapon = weapon; + this.TakeFireEvent = targetevent; + } + } + + public class CombatTakeFireEvent : CombatLocationEvent + { + public bool IsHit { get; set; } + public CombatNode BulletNode { get; set; } + public CombatFireOnTargetEvent fireOnEvent { get; set; } + /// + /// This event is for the object under fire. + /// + /// + /// + /// + /// whether this ship is hit or if the shot is a miss + public CombatTakeFireEvent(int tick, CombatObject obj, PointXd endpoint, bool hit) + : base(tick, obj, endpoint) + { + this.IsHit = hit; + } + + public void setLocation(PointXd location) + { + base.Location = location; + } + } + + + public class CombatDestructionEvent : CombatLocationEvent + { + public CombatDestructionEvent(int tick, CombatObject obj, PointXd point) + : base(tick, obj, point) + {} + } + + public class CombatEndBattleEvent : CombatEvent + { + public CombatEndBattleEvent(int tick) + : base(tick, null) + { } + } +} diff --git a/FrEee/Game/Objects/Combat2/CombatSeeker.cs b/FrEee/Objects/Combat2/CombatSeeker.cs similarity index 96% rename from FrEee/Game/Objects/Combat2/CombatSeeker.cs rename to FrEee/Objects/Combat2/CombatSeeker.cs index 0f0b7abd4..297188e86 100644 --- a/FrEee/Game/Objects/Combat2/CombatSeeker.cs +++ b/FrEee/Objects/Combat2/CombatSeeker.cs @@ -1,410 +1,410 @@ -using System; -using FrEee.Utility.Extensions; - -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; - -using NewtMath.f16; -using FixMath.NET; -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; - - -namespace FrEee.Game.Objects.Combat2 -{ - public class CombatSeeker : CombatObject, ITargetable - { - public CombatSeeker(CombatObject attacker, CombatWeapon launcher, int ID) - : base(null, new PointXd(attacker.cmbt_loc), new PointXd(attacker.cmbt_vel), ID, "SKR") - { - WorkingObject = this; - SeekingWeaponInfo skrinfo = (SeekingWeaponInfo)launcher.weapon.Template.ComponentTemplate.WeaponInfo; - Hitpoints = MaxHitpoints = skrinfo.SeekerDurability; - cmbt_mass = (Fix16)Hitpoints * 0.1;//(Fix16)s.MaxHitpoints; // sure why not? - - - maxfowardThrust = calcFowardThrust(skrinfo); - maxStrafeThrust = calcStrafeThrust(skrinfo); - maxRotate = calcRotate(skrinfo); - - - cmbt_thrust = new PointXd(0, 0, 0); - cmbt_accel = new PointXd(0, 0, 0); - - newDice(ID); -#if DEBUG - Console.WriteLine("MaxAccel = " + maxfowardThrust / cmbt_mass); -#endif - this.launcher = launcher; - } - - public static Fix16 calcFowardThrust(SeekingWeaponInfo skrinfo) - { - int wpnskrspd = skrinfo.SeekerSpeed; - int hitpoints = skrinfo.SeekerDurability; - Fix16 mass = hitpoints * 0.1; - return (Fix16)wpnskrspd * mass * (Fix16)10.0; - } - public static Fix16 calcStrafeThrust(SeekingWeaponInfo skrinfo) - { - int wpnskrspd = skrinfo.SeekerSpeed; - int hitpoints = skrinfo.SeekerDurability; - Fix16 mass = hitpoints * 0.1; - int wpnskrEvade = Mod.Current.Settings.SeekerEvasion; - return (Fix16)wpnskrspd * mass * (Fix16)5.0 / ((Fix16)4 - (Fix16)wpnskrEvade * (Fix16)0.01); - } - public static Compass calcRotate(SeekingWeaponInfo skrinfo) - { - int wpnskrspd = skrinfo.SeekerSpeed; - int hitpoints = skrinfo.SeekerDurability; - Fix16 mass = hitpoints * 0.1; - int wpnskrEvade = Mod.Current.Settings.SeekerEvasion; - return new Compass((Fix16)wpnskrspd * mass * (Fix16)10 / ((Fix16)2.5 - (Fix16)wpnskrEvade * (Fix16)0.01), false); - } - - public static Fix16 seekerTimeToTarget(CombatObject attacker, CombatObject target, SeekingWeaponInfo skrinfo) - { - //Fix16 distance_toTarget = Trig.distance(attacker.cmbt_loc, target.cmbt_loc); - PointXd px = new PointXd(attacker.cmbt_loc - target.cmbt_loc); - Fix16 distance_toTarget = px.Length; - //SeekingWeaponInfo seekerinfo = (SeekingWeaponInfo)weapon.Template.ComponentTemplate.WeaponInfo; - int hitpoints = skrinfo.SeekerDurability; - Fix16 mass = hitpoints * 0.1; - int wpnskrspd = skrinfo.SeekerSpeed; - Fix16 Thrust = calcFowardThrust(skrinfo); - Fix16 acceleration = Thrust / mass * -1; //*-1 because we should be accelerating towards the target, not away. - Fix16 startV = seekerClosingSpeed_base(attacker, target); - //Fix16 endV = ??? - Fix16 baseTimetoTarget = distance_toTarget / startV; - - //Fix16 deltaV = baseTimetoTarget - //Fix16[] ttt = NMath.quadratic(acceleration, startV, distance_toTarget); - Fix64[] ttt2 = NMath.quadratic64(acceleration, startV, distance_toTarget); - - Fix16 TimetoTarget; - if (ttt2[2] == 1) - { - TimetoTarget = Fix16.Max((Fix16)ttt2[0], (Fix16)ttt2[1]); - } - else - TimetoTarget = (Fix16)ttt2[0]; -#if DEBUG - Console.WriteLine("SeekerTimeToTarget = " + TimetoTarget); -#endif - return TimetoTarget; - } - - public static Fix16 seekerClosingSpeed_base(CombatObject attacker, CombatObject target) - { - Fix16 shotspeed = 0;// boltSpeed; //speed of bullet when ship is at standstill (0 for seekers) - Fix16 shotspeed_actual = shotspeed + NMath.closingRate(attacker.cmbt_loc, attacker.cmbt_vel, target.cmbt_loc, target.cmbt_vel); - return shotspeed_actual; - } - - #region fields & properties - - /// - /// seekeer stores this so it can flip it to being a hit or not. - /// - public CombatTakeFireEvent seekertargethit { get; set; } - - //the component that fired the missile. - public CombatWeapon launcher { get; private set; } - - public WeaponTargets WeaponTargetType - { - get { return WeaponTargets.Seeker; } - } - - public int Hitpoints - { - get; - set; - } - - public int NormalShields - { - get; - set; - } - - public int PhasedShields - { - get; - set; - } - - public int MaxHitpoints - { - get; - private set; - } - - public int MaxNormalShields - { - get { return 0; } - } - - public int MaxPhasedShields - { - get { return 0; } - } - - public int ShieldHitpoints - { - get { return NormalShields + PhasedShields; } - } - - public int ArmorHitpoints - { - get { return 0; } - } - - public int HullHitpoints - { - get { return Hitpoints; } - } - - public int MaxShieldHitpoints - { - get { return MaxNormalShields + MaxPhasedShields; } - } - - public int MaxArmorHitpoints - { - get { return 0; } - } - - public int MaxHullHitpoints - { - get { return MaxHitpoints; } - } - - public bool IsDestroyed - { - get { return Hitpoints <= 0; } - } - - public int HitChance - { - get { return 1; } - } - - [DoNotSerialize(false)] - public Empire Owner - { - // seeker owner is irrelevant outside of combat, and we have CombatEmpire for that - get { return null; } - set { throw new NotSupportedException("Cannot set the ownership of a combat seeker."); } - } - - public bool IsDisposed - { - get; - set; - } - - public int Evasion - { - get - { - // TODO - per-seeker evasion settings - return Mod.Current.Settings.SeekerEvasion; - } - } - - #endregion - - #region methods & functions - - public override void renewtoStart() - { - //do nothing. this should not ever happen here. - } - - public override void helm() - { - - Compass angletoWaypoint = new Compass(this.cmbt_loc, this.waypointTarget.cmbt_loc); //relitive to me. - - Tuple nav = Nav(angletoWaypoint); - Compass angletoturn = nav.Item1; - bool? thrustToWaypoint = nav.Item2; - - turnship(angletoturn, angletoWaypoint); - - thrustship(angletoturn, true); - } - - protected override Tuple Nav(Compass angletoWaypoint) - { - Compass angletoturn = new Compass(); - bool? thrustTowards = true; - - CombatWaypoint wpt = this.waypointTarget; - angletoturn = new Compass(angletoWaypoint.Degrees - this.cmbt_head.Degrees, false); - PointXd vectortowaypoint = this.cmbt_loc - this.waypointTarget.cmbt_loc; - - //this stuff doesn't actualy do anything yet: - Fix16 acceleration = maxfowardThrust / cmbt_mass; - Fix16 startSpeed = NMath.distance(cmbt_vel, wpt.cmbt_vel); - Fix16 distance = vectortowaypoint.Length; - - Fix16 closingSpeed = NMath.closingRate(this.cmbt_loc, this.cmbt_vel, this.waypointTarget.cmbt_loc, this.waypointTarget.cmbt_vel); - Fix16 timetowpt = distance / closingSpeed; - - - Fix64[] ttt2 = NMath.quadratic64(acceleration, startSpeed, distance); - - Fix16 TimetoTarget; - if (ttt2[2] == 1) - { - TimetoTarget = Fix16.Max((Fix16)ttt2[0], (Fix16)ttt2[1]); - } - else - TimetoTarget = (Fix16)ttt2[0]; - Fix16 endV = startSpeed + acceleration * TimetoTarget; - //above doesn't actualy do anything yet. -#if DEBUG - Console.WriteLine("seeker ttt: " + TimetoTarget); - Console.WriteLine("timetowpt: " + timetowpt); - Console.WriteLine("seeker distance: " + distance); - Console.WriteLine("seeker startV: " + startSpeed); - Console.WriteLine("seeker endV: " + endV); -#endif - - return new Tuple(angletoturn, thrustTowards); - } - - public void ReplenishShields(int? amount = null) - { - // seekers don't have shields - } - - public int? Repair(int? amount = null) - { - if (amount == null) - { - Hitpoints = MaxHitpoints; - return null; - } - if (amount + Hitpoints > MaxHitpoints) - { - amount -= (MaxHitpoints - Hitpoints); - Hitpoints = MaxHitpoints; - return amount; - } - Hitpoints += amount.Value; - return 0; - } - - public void Dispose() - { - Hitpoints = 0; - IsDisposed = true; - } - - public override int handleShieldDamage(int damage) - { - // seekers don't have shields, just leak the damage - return damage; - } - - /*/// - /// was missilefirecontrol in battlespace. - /// - /// - /// - - public override void firecontrol(int battletick) - { - Fix16 locdistance = Trig.distance(comSek.cmbt_loc, comSek.weaponTarget[0].cmbt_loc); - if (locdistance <= comSek.cmbt_vel.Length)//erm, I think? (if we're as close as we're going to get in one tick) could screw up at high velocities. - { - if (!IsReplay) - { - CombatTakeFireEvent evnt = comSek.seekertargethit; - evnt.IsHit = true; - evnt.Tick = battletick; - } - Component launcher = comSek.launcher.weapon; - CombatObject target = comSek.weaponTarget[0]; - if (target is ControlledCombatObject) - { - ControlledCombatObject ccTarget = (ControlledCombatObject)target; - var target_icomobj = ccTarget.WorkingObject; - var shot = new Combat.Shot(launcher, target_icomobj, 0); - //defender.TakeDamage(weapon.Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, battle); - int damage = shot.Damage; - combatDamage(battletick, target, comSek.launcher, damage, comSek.getDice()); - if (target_icomobj.MaxNormalShields < target_icomobj.NormalShields) - target_icomobj.NormalShields = target_icomobj.MaxNormalShields; - if (target_icomobj.MaxPhasedShields < target_icomobj.PhasedShields) - target_icomobj.PhasedShields = target_icomobj.MaxPhasedShields; - } - - DeadNodes.Add(comSek); - CombatNodes.Remove(comSek); - } - else if (battletick > comSek.deathTick) - { - DeadNodes.Add(comSek); - CombatNodes.Remove(comSek); - } - } - */ - - public override void TakeSpecialDamage(Battle_Space battle, Hit hit, PRNG dice) - { - // find out who hit us - var atkr = battle.FindCombatObject(hit.Shot.Attacker); - - // find out how too - var dmgType = hit.Shot.DamageType; - - // push/pull effects - if (atkr.CanPushOrPull(this)) - { - var deltaV = dmgType.TargetPush.Value * hit.Shot.DamageLeft / 100; - var vector = atkr.cmbt_loc - this.cmbt_loc; - if (vector.Length == 0) - { - // pick a random direction to push/pull - vector = new Compass(dice.Next(360), false).Point(1); - } - vector /= vector.Length; // normalize to unit vector - vector *= Battle_Space.KilometersPerSquare / Battle_Space.TicksPerSecond; // scale to combat map - vector *= deltaV; // scale to push/pull acceleration factor - this.cmbt_vel += deltaV; // apply force - } - - // teleport effects - { - var deltaPos = dmgType.TargetTeleport.Value * hit.Shot.DamageLeft / 100; - var vector = new Compass(dice.Next(360), false).Point(deltaPos); - this.cmbt_loc += deltaPos; // apply teleport - } - } - - public int TakeDamage(Hit hit, PRNG dice = null) - { - // TODO - damage types - var skpct = hit.Shot.DamageType.SeekerDamage.Evaluate(hit); - var damage = skpct.PercentOfRounded(hit.NominalDamage); - if (damage > Hitpoints) - { - damage -= Hitpoints; - Hitpoints = 0; - return (int)Math.Floor(damage / skpct.Percent()); - } - Hitpoints -= damage; - return 0; - } - - #endregion - } -} +using System; +using FrEee.Utility.Extensions; + +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Vehicles; +using FrEee.Game.Objects.Combat; +using FrEee.Game.Objects.Technology; +using FrEee.Modding; + +using NewtMath.f16; +using FixMath.NET; +using FrEee.Game.Enumerations; +using FrEee.Game.Objects.Civilization; +using FrEee.Utility; + + +namespace FrEee.Game.Objects.Combat2 +{ + public class CombatSeeker : CombatObject, ITargetable + { + public CombatSeeker(CombatObject attacker, CombatWeapon launcher, int ID) + : base(null, new PointXd(attacker.cmbt_loc), new PointXd(attacker.cmbt_vel), ID, "SKR") + { + WorkingObject = this; + SeekingWeaponInfo skrinfo = (SeekingWeaponInfo)launcher.weapon.Template.ComponentTemplate.WeaponInfo; + Hitpoints = MaxHitpoints = skrinfo.SeekerDurability; + cmbt_mass = (Fix16)Hitpoints * 0.1;//(Fix16)s.MaxHitpoints; // sure why not? + + + maxfowardThrust = calcFowardThrust(skrinfo); + maxStrafeThrust = calcStrafeThrust(skrinfo); + maxRotate = calcRotate(skrinfo); + + + cmbt_thrust = new PointXd(0, 0, 0); + cmbt_accel = new PointXd(0, 0, 0); + + newDice(ID); +#if DEBUG + Console.WriteLine("MaxAccel = " + maxfowardThrust / cmbt_mass); +#endif + this.launcher = launcher; + } + + public static Fix16 calcFowardThrust(SeekingWeaponInfo skrinfo) + { + int wpnskrspd = skrinfo.SeekerSpeed; + int hitpoints = skrinfo.SeekerDurability; + Fix16 mass = hitpoints * 0.1; + return (Fix16)wpnskrspd * mass * (Fix16)10.0; + } + public static Fix16 calcStrafeThrust(SeekingWeaponInfo skrinfo) + { + int wpnskrspd = skrinfo.SeekerSpeed; + int hitpoints = skrinfo.SeekerDurability; + Fix16 mass = hitpoints * 0.1; + int wpnskrEvade = Mod.Current.Settings.SeekerEvasion; + return (Fix16)wpnskrspd * mass * (Fix16)5.0 / ((Fix16)4 - (Fix16)wpnskrEvade * (Fix16)0.01); + } + public static Compass calcRotate(SeekingWeaponInfo skrinfo) + { + int wpnskrspd = skrinfo.SeekerSpeed; + int hitpoints = skrinfo.SeekerDurability; + Fix16 mass = hitpoints * 0.1; + int wpnskrEvade = Mod.Current.Settings.SeekerEvasion; + return new Compass((Fix16)wpnskrspd * mass * (Fix16)10 / ((Fix16)2.5 - (Fix16)wpnskrEvade * (Fix16)0.01), false); + } + + public static Fix16 seekerTimeToTarget(CombatObject attacker, CombatObject target, SeekingWeaponInfo skrinfo) + { + //Fix16 distance_toTarget = Trig.distance(attacker.cmbt_loc, target.cmbt_loc); + PointXd px = new PointXd(attacker.cmbt_loc - target.cmbt_loc); + Fix16 distance_toTarget = px.Length; + //SeekingWeaponInfo seekerinfo = (SeekingWeaponInfo)weapon.Template.ComponentTemplate.WeaponInfo; + int hitpoints = skrinfo.SeekerDurability; + Fix16 mass = hitpoints * 0.1; + int wpnskrspd = skrinfo.SeekerSpeed; + Fix16 Thrust = calcFowardThrust(skrinfo); + Fix16 acceleration = Thrust / mass * -1; //*-1 because we should be accelerating towards the target, not away. + Fix16 startV = seekerClosingSpeed_base(attacker, target); + //Fix16 endV = ??? + Fix16 baseTimetoTarget = distance_toTarget / startV; + + //Fix16 deltaV = baseTimetoTarget + //Fix16[] ttt = NMath.quadratic(acceleration, startV, distance_toTarget); + Fix64[] ttt2 = NMath.quadratic64(acceleration, startV, distance_toTarget); + + Fix16 TimetoTarget; + if (ttt2[2] == 1) + { + TimetoTarget = Fix16.Max((Fix16)ttt2[0], (Fix16)ttt2[1]); + } + else + TimetoTarget = (Fix16)ttt2[0]; +#if DEBUG + Console.WriteLine("SeekerTimeToTarget = " + TimetoTarget); +#endif + return TimetoTarget; + } + + public static Fix16 seekerClosingSpeed_base(CombatObject attacker, CombatObject target) + { + Fix16 shotspeed = 0;// boltSpeed; //speed of bullet when ship is at standstill (0 for seekers) + Fix16 shotspeed_actual = shotspeed + NMath.closingRate(attacker.cmbt_loc, attacker.cmbt_vel, target.cmbt_loc, target.cmbt_vel); + return shotspeed_actual; + } + + #region fields & properties + + /// + /// seekeer stores this so it can flip it to being a hit or not. + /// + public CombatTakeFireEvent seekertargethit { get; set; } + + //the component that fired the missile. + public CombatWeapon launcher { get; private set; } + + public WeaponTargets WeaponTargetType + { + get { return WeaponTargets.Seeker; } + } + + public int Hitpoints + { + get; + set; + } + + public int NormalShields + { + get; + set; + } + + public int PhasedShields + { + get; + set; + } + + public int MaxHitpoints + { + get; + private set; + } + + public int MaxNormalShields + { + get { return 0; } + } + + public int MaxPhasedShields + { + get { return 0; } + } + + public int ShieldHitpoints + { + get { return NormalShields + PhasedShields; } + } + + public int ArmorHitpoints + { + get { return 0; } + } + + public int HullHitpoints + { + get { return Hitpoints; } + } + + public int MaxShieldHitpoints + { + get { return MaxNormalShields + MaxPhasedShields; } + } + + public int MaxArmorHitpoints + { + get { return 0; } + } + + public int MaxHullHitpoints + { + get { return MaxHitpoints; } + } + + public bool IsDestroyed + { + get { return Hitpoints <= 0; } + } + + public int HitChance + { + get { return 1; } + } + + [DoNotSerialize(false)] + public Empire Owner + { + // seeker owner is irrelevant outside of combat, and we have CombatEmpire for that + get { return null; } + set { throw new NotSupportedException("Cannot set the ownership of a combat seeker."); } + } + + public bool IsDisposed + { + get; + set; + } + + public int Evasion + { + get + { + // TODO - per-seeker evasion settings + return Mod.Current.Settings.SeekerEvasion; + } + } + + #endregion + + #region methods & functions + + public override void renewtoStart() + { + //do nothing. this should not ever happen here. + } + + public override void helm() + { + + Compass angletoWaypoint = new Compass(this.cmbt_loc, this.waypointTarget.cmbt_loc); //relitive to me. + + Tuple nav = Nav(angletoWaypoint); + Compass angletoturn = nav.Item1; + bool? thrustToWaypoint = nav.Item2; + + turnship(angletoturn, angletoWaypoint); + + thrustship(angletoturn, true); + } + + protected override Tuple Nav(Compass angletoWaypoint) + { + Compass angletoturn = new Compass(); + bool? thrustTowards = true; + + CombatWaypoint wpt = this.waypointTarget; + angletoturn = new Compass(angletoWaypoint.Degrees - this.cmbt_head.Degrees, false); + PointXd vectortowaypoint = this.cmbt_loc - this.waypointTarget.cmbt_loc; + + //this stuff doesn't actualy do anything yet: + Fix16 acceleration = maxfowardThrust / cmbt_mass; + Fix16 startSpeed = NMath.distance(cmbt_vel, wpt.cmbt_vel); + Fix16 distance = vectortowaypoint.Length; + + Fix16 closingSpeed = NMath.closingRate(this.cmbt_loc, this.cmbt_vel, this.waypointTarget.cmbt_loc, this.waypointTarget.cmbt_vel); + Fix16 timetowpt = distance / closingSpeed; + + + Fix64[] ttt2 = NMath.quadratic64(acceleration, startSpeed, distance); + + Fix16 TimetoTarget; + if (ttt2[2] == 1) + { + TimetoTarget = Fix16.Max((Fix16)ttt2[0], (Fix16)ttt2[1]); + } + else + TimetoTarget = (Fix16)ttt2[0]; + Fix16 endV = startSpeed + acceleration * TimetoTarget; + //above doesn't actualy do anything yet. +#if DEBUG + Console.WriteLine("seeker ttt: " + TimetoTarget); + Console.WriteLine("timetowpt: " + timetowpt); + Console.WriteLine("seeker distance: " + distance); + Console.WriteLine("seeker startV: " + startSpeed); + Console.WriteLine("seeker endV: " + endV); +#endif + + return new Tuple(angletoturn, thrustTowards); + } + + public void ReplenishShields(int? amount = null) + { + // seekers don't have shields + } + + public int? Repair(int? amount = null) + { + if (amount == null) + { + Hitpoints = MaxHitpoints; + return null; + } + if (amount + Hitpoints > MaxHitpoints) + { + amount -= (MaxHitpoints - Hitpoints); + Hitpoints = MaxHitpoints; + return amount; + } + Hitpoints += amount.Value; + return 0; + } + + public void Dispose() + { + Hitpoints = 0; + IsDisposed = true; + } + + public override int handleShieldDamage(int damage) + { + // seekers don't have shields, just leak the damage + return damage; + } + + /*/// + /// was missilefirecontrol in battlespace. + /// + /// + /// + + public override void firecontrol(int battletick) + { + Fix16 locdistance = Trig.distance(comSek.cmbt_loc, comSek.weaponTarget[0].cmbt_loc); + if (locdistance <= comSek.cmbt_vel.Length)//erm, I think? (if we're as close as we're going to get in one tick) could screw up at high velocities. + { + if (!IsReplay) + { + CombatTakeFireEvent evnt = comSek.seekertargethit; + evnt.IsHit = true; + evnt.Tick = battletick; + } + Component launcher = comSek.launcher.weapon; + CombatObject target = comSek.weaponTarget[0]; + if (target is ControlledCombatObject) + { + ControlledCombatObject ccTarget = (ControlledCombatObject)target; + var target_icomobj = ccTarget.WorkingObject; + var shot = new Combat.Shot(launcher, target_icomobj, 0); + //defender.TakeDamage(weapon.Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, battle); + int damage = shot.Damage; + combatDamage(battletick, target, comSek.launcher, damage, comSek.getDice()); + if (target_icomobj.MaxNormalShields < target_icomobj.NormalShields) + target_icomobj.NormalShields = target_icomobj.MaxNormalShields; + if (target_icomobj.MaxPhasedShields < target_icomobj.PhasedShields) + target_icomobj.PhasedShields = target_icomobj.MaxPhasedShields; + } + + DeadNodes.Add(comSek); + CombatNodes.Remove(comSek); + } + else if (battletick > comSek.deathTick) + { + DeadNodes.Add(comSek); + CombatNodes.Remove(comSek); + } + } + */ + + public override void TakeSpecialDamage(Battle_Space battle, Hit hit, PRNG dice) + { + // find out who hit us + var atkr = battle.FindCombatObject(hit.Shot.Attacker); + + // find out how too + var dmgType = hit.Shot.DamageType; + + // push/pull effects + if (atkr.CanPushOrPull(this)) + { + var deltaV = dmgType.TargetPush.Value * hit.Shot.DamageLeft / 100; + var vector = atkr.cmbt_loc - this.cmbt_loc; + if (vector.Length == 0) + { + // pick a random direction to push/pull + vector = new Compass(dice.Next(360), false).Point(1); + } + vector /= vector.Length; // normalize to unit vector + vector *= Battle_Space.KilometersPerSquare / Battle_Space.TicksPerSecond; // scale to combat map + vector *= deltaV; // scale to push/pull acceleration factor + this.cmbt_vel += deltaV; // apply force + } + + // teleport effects + { + var deltaPos = dmgType.TargetTeleport.Value * hit.Shot.DamageLeft / 100; + var vector = new Compass(dice.Next(360), false).Point(deltaPos); + this.cmbt_loc += deltaPos; // apply teleport + } + } + + public int TakeDamage(Hit hit, PRNG dice = null) + { + // TODO - damage types + var skpct = hit.Shot.DamageType.SeekerDamage.Evaluate(hit); + var damage = skpct.PercentOfRounded(hit.NominalDamage); + if (damage > Hitpoints) + { + damage -= Hitpoints; + Hitpoints = 0; + return (int)Math.Floor(damage / skpct.Percent()); + } + Hitpoints -= damage; + return 0; + } + + #endregion + } +} diff --git a/FrEee/Game/Objects/Combat2/CombatShot.cs b/FrEee/Objects/Combat2/CombatShot.cs similarity index 96% rename from FrEee/Game/Objects/Combat2/CombatShot.cs rename to FrEee/Objects/Combat2/CombatShot.cs index 2a26271fc..0a30d7445 100644 --- a/FrEee/Game/Objects/Combat2/CombatShot.cs +++ b/FrEee/Objects/Combat2/CombatShot.cs @@ -1,62 +1,62 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Technology; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace FrEee.Game.Objects.Combat2 -{ - /// - /// A weapon's fire. - /// - public class CombatShot : IFormulaHost - { - public CombatShot(Component weapon, ITargetable target, int range) - { - Weapon = weapon; - Target = target; - Range = range; - } - - public GalaxyReference weapon { get; set; } - - [DoNotSerialize] - public Component Weapon { get { return weapon; } set { weapon = value; } } - - public GalaxyReference target { get; set; } - - [DoNotSerialize] - public ITargetable Target { get { return target == null ? null : target.Value; } set { target = value == null ? null : value.ReferViaGalaxy(); } } - - public int Range { get; set; } - - public int Damage - { - get - { - if (Range < Weapon.Template.WeaponMinRange || Range > Weapon.Template.WeaponMaxRange) - return 0; - return Weapon.Template.GetWeaponDamage(this); - } - } - - public IDictionary DamageInflicted { get; private set; } - - public IDictionary Variables - { - get - { - return new Dictionary - { - { "weapon", Weapon}, - { "target", Target}, - { "range", Range}, - }; - } - } - } +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Technology; +using FrEee.Modding.Interfaces; +using FrEee.Utility; +using FrEee.Utility.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FrEee.Game.Objects.Combat2 +{ + /// + /// A weapon's fire. + /// + public class CombatShot : IFormulaHost + { + public CombatShot(Component weapon, ITargetable target, int range) + { + Weapon = weapon; + Target = target; + Range = range; + } + + public GalaxyReference weapon { get; set; } + + [DoNotSerialize] + public Component Weapon { get { return weapon; } set { weapon = value; } } + + public GalaxyReference target { get; set; } + + [DoNotSerialize] + public ITargetable Target { get { return target == null ? null : target.Value; } set { target = value == null ? null : value.ReferViaGalaxy(); } } + + public int Range { get; set; } + + public int Damage + { + get + { + if (Range < Weapon.Template.WeaponMinRange || Range > Weapon.Template.WeaponMaxRange) + return 0; + return Weapon.Template.GetWeaponDamage(this); + } + } + + public IDictionary DamageInflicted { get; private set; } + + public IDictionary Variables + { + get + { + return new Dictionary + { + { "weapon", Weapon}, + { "target", Target}, + { "range", Range}, + }; + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Combat2/CombatVehicle.cs b/FrEee/Objects/Combat2/CombatVehicle.cs similarity index 97% rename from FrEee/Game/Objects/Combat2/CombatVehicle.cs rename to FrEee/Objects/Combat2/CombatVehicle.cs index eebab2ec0..164977335 100644 --- a/FrEee/Game/Objects/Combat2/CombatVehicle.cs +++ b/FrEee/Objects/Combat2/CombatVehicle.cs @@ -1,235 +1,235 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; - -using NewtMath.f16; -using FixMath.NET; -using FrEee.Game.Objects.Space; - -namespace FrEee.Game.Objects.Combat2 -{ - public class CombatVehicle : CombatControlledObject - { - /// - /// use this constructor for creating an 'Start' combat Object. - /// - /// - /// - /// - /// this should be the FrEee ID for the origional Vehicle - /// - public CombatVehicle(Vehicle start_v, Vehicle working_v, int battleseed, long OrigionalID, string IDPrefix = "SHP") - : base(start_v, working_v, new PointXd(0, 0, 0), new PointXd(0, 0, 0), battleseed, IDPrefix) - { - this.ID = OrigionalID; - // TODO - don't some mods have vehicles >32MT? - cmbt_mass = (Fix16)working_v.Size; - maxfowardThrust = (Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.5; - maxStrafeThrust = ((Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.5) / ((Fix16)4 - (Fix16)working_v.Evasion * (Fix16)0.01); - maxRotate.Degrees = ((Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.1) / ((Fix16)2.5 - (Fix16)working_v.Evasion * (Fix16)0.01); - if (start_v.Design.Strategy == null) - strategy = new StragegyObject_Default(); - else - strategy = start_v.Design.Strategy.Copy(); - SpaceVehicle sv = (SpaceVehicle)start_v; - //combatfleet = sv.Container.Name; -#if DEBUG - Console.WriteLine("Created new CombatVehicle with ID " + ID); - Console.WriteLine("MaxAccel = " + maxfowardThrust / cmbt_mass); - //Console.WriteLine("Strategy: " + strategy -#endif - } - -// public CombatVehicle(Vehicle start_v, Vehicle working_v, int battleseed, string IDPrefix = "SHP") -// : base(start_v, working_v, new PointXd(0, 0, 0), new PointXd(0, 0, 0), battleseed, IDPrefix) -// { -// // TODO - don't some mods have vehicles >32MT? -// cmbt_mass = (Fix16)working_v.Size; -// maxfowardThrust = (Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.1; -// maxStrafeThrust = ((Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.1) / ((Fix16)4 - (Fix16)working_v.Evasion * (Fix16)0.01); -// maxRotate.Radians = ((Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.1) / ((Fix16)12000 - (Fix16)working_v.Evasion * (Fix16)0.1); -// if (start_v.Design.Strategy == null) -// strategy = new StragegyObject_Default(); -// else -// strategy = start_v.Design.Strategy; -//#if DEBUG -// Console.WriteLine("MaxAccel = " + maxfowardThrust / cmbt_mass); -//#endif -// } - - - - #region fields & properties - - - /// - /// The vehicle's state at the start of combat. - /// - [DoNotAssignID] - [DoNotSerialize] - public Vehicle StartVehicle { get { return (Vehicle)StartCombatant; } private set { StartCombatant = value; } } - - /// - /// The current state of the vehicle. - /// - [DoNotSerialize] - public Vehicle WorkingVehicle { get { return (Vehicle)WorkingObject; } private set { WorkingObject = value; } } - - - #endregion - - #region methods and functions - public override void renewtoStart() - { - -#if DEBUG - Console.WriteLine("renewtoStart for CombatVehcile"); - Console.WriteLine(this.strID); - Console.WriteLine(StartVehicle.Name); -#endif - Vehicle ship = StartVehicle.Copy(); - ship.IsMemory = true; - if (ship.Owner != StartVehicle.Owner && ship.Owner != null) - ship.Owner.Dispose(); // don't need extra empires! - ship.Owner = StartVehicle.Owner; -#if DEBUG - Console.WriteLine(ship.Name); -#endif - // copy over the components individually so they can take damage without affecting the starting state - ship.Components.Clear(); -#if DEBUG - Console.WriteLine("copying components"); -#endif - foreach (var comp in (StartVehicle.Components)) - { - var ccopy = comp.Copy(); - ship.Components.Add(ccopy); - ccopy.Container = ship; -#if DEBUG - Console.WriteLine(ccopy.Name); - Console.WriteLine("Container is " + ccopy.Container); -#endif - } -#if DEBUG - Console.WriteLine("Done"); -#endif - - WorkingVehicle = ship; - RefreshWeapons(); - - foreach (var w in Weapons) - w.nextReload = 1; - - base.renewtoStart(); - - SpaceVehicle start_v = (SpaceVehicle)this.StartCombatant; - if (start_v.Design.Strategy == null) - strategy = new StragegyObject_Default(); - else - strategy = start_v.Design.Strategy.Copy(); -#if DEBUG - - Console.WriteLine("Done"); -#endif - } - - protected override void RefreshWeapons() - { - var weapons = new List(); -#if DEBUG - Console.WriteLine("RefreshingWeapons"); -#endif - foreach (Component weapon in WorkingVehicle.Weapons) - { - CombatWeapon wpn = new CombatWeapon(weapon); - weapons.Add(wpn); -#if DEBUG - Console.Write("Weapn Conatiner " + wpn.weapon.Container); -#endif - } - Weapons = weapons; -#if DEBUG - Console.WriteLine("Done"); -#endif - } - - public override void TakeSpecialDamage(Battle_Space battle, Hit hit, PRNG dice) - { - // find out who hit us - var atkr = battle.FindCombatObject(hit.Shot.Attacker); - - // find out how too - var dmgType = hit.Shot.DamageType; - - // disrupt reload - { - var disrupt = dmgType.DisruptReload.Value * hit.Shot.DamageLeft / 100; - foreach (var w in Weapons) - { - w.nextReload += disrupt; - if (w.nextReload - battle.CurrentTick > w.reloadRate) - w.nextReload = battle.CurrentTick + w.reloadRate; // this damage type can't increase past normal reload time - } - } - - // increase reload (doesn't work againts master computers, even disabled ones) - if (!WorkingVehicle.Components.Any(c => c.HasAbility("Master Computer"))) - { - var inc = dmgType.IncreaseReload.Value * hit.Shot.DamageLeft / 100; - foreach (var w in Weapons) - w.nextReload += inc; // this damage type can increase past normal reload time - } - - // ship capture - { - var cap = dmgType.ShipCapture.Value * hit.Shot.DamageLeft; - if (cap > WorkingVehicle.GetAbilityValue("Boarding Attack").ToInt() + WorkingVehicle.GetAbilityValue("Boarding Defense").ToInt()) - { - // destroy all boarding parties and security stations on the target - foreach (var c in WorkingVehicle.Components.Where(c => c.HasAbility("Boarding Attack") || c.HasAbility("Boarding Defense"))) - c.Hitpoints = 0; - - // see if that killed the target - if (battle.CheckForDeath(battle.CurrentTick, this)) - return; - - // transfer ownership - this.WorkingCombatant.Owner = atkr.WorkingObject.Owner; - } - } - - // push/pull effects - if (atkr.CanPushOrPull(this)) - { - var deltaV = dmgType.TargetPush.Value * hit.Shot.DamageLeft / 100; - var vector = atkr.cmbt_loc - this.cmbt_loc; - if (vector.Length == 0) - { - // pick a random direction to push/pull - vector = new Compass(dice.Next(360), false).Point(1); - } - vector /= vector.Length; // normalize to unit vector - vector *= Battle_Space.KilometersPerSquare / Battle_Space.TicksPerSecond; // scale to combat map - vector *= deltaV; // scale to push/pull acceleration factor - this.cmbt_vel += deltaV; // apply force - } - - // teleport effects - { - var deltaPos = dmgType.TargetTeleport.Value * hit.Shot.DamageLeft / 100; - var vector = new Compass(dice.Next(360), false).Point(deltaPos); - this.cmbt_loc += deltaPos; // apply teleport - } - } - #endregion - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FrEee.Utility; +using FrEee.Utility.Extensions; + +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Vehicles; +using FrEee.Game.Objects.Combat; +using FrEee.Game.Objects.Technology; +using FrEee.Modding; + +using NewtMath.f16; +using FixMath.NET; +using FrEee.Game.Objects.Space; + +namespace FrEee.Game.Objects.Combat2 +{ + public class CombatVehicle : CombatControlledObject + { + /// + /// use this constructor for creating an 'Start' combat Object. + /// + /// + /// + /// + /// this should be the FrEee ID for the origional Vehicle + /// + public CombatVehicle(Vehicle start_v, Vehicle working_v, int battleseed, long OrigionalID, string IDPrefix = "SHP") + : base(start_v, working_v, new PointXd(0, 0, 0), new PointXd(0, 0, 0), battleseed, IDPrefix) + { + this.ID = OrigionalID; + // TODO - don't some mods have vehicles >32MT? + cmbt_mass = (Fix16)working_v.Size; + maxfowardThrust = (Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.5; + maxStrafeThrust = ((Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.5) / ((Fix16)4 - (Fix16)working_v.Evasion * (Fix16)0.01); + maxRotate.Degrees = ((Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.1) / ((Fix16)2.5 - (Fix16)working_v.Evasion * (Fix16)0.01); + if (start_v.Design.Strategy == null) + strategy = new StragegyObject_Default(); + else + strategy = start_v.Design.Strategy.Copy(); + SpaceVehicle sv = (SpaceVehicle)start_v; + //combatfleet = sv.Container.Name; +#if DEBUG + Console.WriteLine("Created new CombatVehicle with ID " + ID); + Console.WriteLine("MaxAccel = " + maxfowardThrust / cmbt_mass); + //Console.WriteLine("Strategy: " + strategy +#endif + } + +// public CombatVehicle(Vehicle start_v, Vehicle working_v, int battleseed, string IDPrefix = "SHP") +// : base(start_v, working_v, new PointXd(0, 0, 0), new PointXd(0, 0, 0), battleseed, IDPrefix) +// { +// // TODO - don't some mods have vehicles >32MT? +// cmbt_mass = (Fix16)working_v.Size; +// maxfowardThrust = (Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.1; +// maxStrafeThrust = ((Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.1) / ((Fix16)4 - (Fix16)working_v.Evasion * (Fix16)0.01); +// maxRotate.Radians = ((Fix16)working_v.Speed * this.cmbt_mass * (Fix16)0.1) / ((Fix16)12000 - (Fix16)working_v.Evasion * (Fix16)0.1); +// if (start_v.Design.Strategy == null) +// strategy = new StragegyObject_Default(); +// else +// strategy = start_v.Design.Strategy; +//#if DEBUG +// Console.WriteLine("MaxAccel = " + maxfowardThrust / cmbt_mass); +//#endif +// } + + + + #region fields & properties + + + /// + /// The vehicle's state at the start of combat. + /// + [DoNotAssignID] + [DoNotSerialize] + public Vehicle StartVehicle { get { return (Vehicle)StartCombatant; } private set { StartCombatant = value; } } + + /// + /// The current state of the vehicle. + /// + [DoNotSerialize] + public Vehicle WorkingVehicle { get { return (Vehicle)WorkingObject; } private set { WorkingObject = value; } } + + + #endregion + + #region methods and functions + public override void renewtoStart() + { + +#if DEBUG + Console.WriteLine("renewtoStart for CombatVehcile"); + Console.WriteLine(this.strID); + Console.WriteLine(StartVehicle.Name); +#endif + Vehicle ship = StartVehicle.Copy(); + ship.IsMemory = true; + if (ship.Owner != StartVehicle.Owner && ship.Owner != null) + ship.Owner.Dispose(); // don't need extra empires! + ship.Owner = StartVehicle.Owner; +#if DEBUG + Console.WriteLine(ship.Name); +#endif + // copy over the components individually so they can take damage without affecting the starting state + ship.Components.Clear(); +#if DEBUG + Console.WriteLine("copying components"); +#endif + foreach (var comp in (StartVehicle.Components)) + { + var ccopy = comp.Copy(); + ship.Components.Add(ccopy); + ccopy.Container = ship; +#if DEBUG + Console.WriteLine(ccopy.Name); + Console.WriteLine("Container is " + ccopy.Container); +#endif + } +#if DEBUG + Console.WriteLine("Done"); +#endif + + WorkingVehicle = ship; + RefreshWeapons(); + + foreach (var w in Weapons) + w.nextReload = 1; + + base.renewtoStart(); + + SpaceVehicle start_v = (SpaceVehicle)this.StartCombatant; + if (start_v.Design.Strategy == null) + strategy = new StragegyObject_Default(); + else + strategy = start_v.Design.Strategy.Copy(); +#if DEBUG + + Console.WriteLine("Done"); +#endif + } + + protected override void RefreshWeapons() + { + var weapons = new List(); +#if DEBUG + Console.WriteLine("RefreshingWeapons"); +#endif + foreach (Component weapon in WorkingVehicle.Weapons) + { + CombatWeapon wpn = new CombatWeapon(weapon); + weapons.Add(wpn); +#if DEBUG + Console.Write("Weapn Conatiner " + wpn.weapon.Container); +#endif + } + Weapons = weapons; +#if DEBUG + Console.WriteLine("Done"); +#endif + } + + public override void TakeSpecialDamage(Battle_Space battle, Hit hit, PRNG dice) + { + // find out who hit us + var atkr = battle.FindCombatObject(hit.Shot.Attacker); + + // find out how too + var dmgType = hit.Shot.DamageType; + + // disrupt reload + { + var disrupt = dmgType.DisruptReload.Value * hit.Shot.DamageLeft / 100; + foreach (var w in Weapons) + { + w.nextReload += disrupt; + if (w.nextReload - battle.CurrentTick > w.reloadRate) + w.nextReload = battle.CurrentTick + w.reloadRate; // this damage type can't increase past normal reload time + } + } + + // increase reload (doesn't work againts master computers, even disabled ones) + if (!WorkingVehicle.Components.Any(c => c.HasAbility("Master Computer"))) + { + var inc = dmgType.IncreaseReload.Value * hit.Shot.DamageLeft / 100; + foreach (var w in Weapons) + w.nextReload += inc; // this damage type can increase past normal reload time + } + + // ship capture + { + var cap = dmgType.ShipCapture.Value * hit.Shot.DamageLeft; + if (cap > WorkingVehicle.GetAbilityValue("Boarding Attack").ToInt() + WorkingVehicle.GetAbilityValue("Boarding Defense").ToInt()) + { + // destroy all boarding parties and security stations on the target + foreach (var c in WorkingVehicle.Components.Where(c => c.HasAbility("Boarding Attack") || c.HasAbility("Boarding Defense"))) + c.Hitpoints = 0; + + // see if that killed the target + if (battle.CheckForDeath(battle.CurrentTick, this)) + return; + + // transfer ownership + this.WorkingCombatant.Owner = atkr.WorkingObject.Owner; + } + } + + // push/pull effects + if (atkr.CanPushOrPull(this)) + { + var deltaV = dmgType.TargetPush.Value * hit.Shot.DamageLeft / 100; + var vector = atkr.cmbt_loc - this.cmbt_loc; + if (vector.Length == 0) + { + // pick a random direction to push/pull + vector = new Compass(dice.Next(360), false).Point(1); + } + vector /= vector.Length; // normalize to unit vector + vector *= Battle_Space.KilometersPerSquare / Battle_Space.TicksPerSecond; // scale to combat map + vector *= deltaV; // scale to push/pull acceleration factor + this.cmbt_vel += deltaV; // apply force + } + + // teleport effects + { + var deltaPos = dmgType.TargetTeleport.Value * hit.Shot.DamageLeft / 100; + var vector = new Compass(dice.Next(360), false).Point(deltaPos); + this.cmbt_loc += deltaPos; // apply teleport + } + } + #endregion + } +} diff --git a/FrEee/Game/Objects/Combat2/CombatWeapon.cs b/FrEee/Objects/Combat2/CombatWeapon.cs similarity index 97% rename from FrEee/Game/Objects/Combat2/CombatWeapon.cs rename to FrEee/Objects/Combat2/CombatWeapon.cs index 0e20e9466..e1f69bb24 100644 --- a/FrEee/Game/Objects/Combat2/CombatWeapon.cs +++ b/FrEee/Objects/Combat2/CombatWeapon.cs @@ -1,244 +1,244 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; - -using NewtMath.f16; -using FixMath.NET; -using FrEee.Game.Objects.Space; - -namespace FrEee.Game.Objects.Combat2 -{ - - public class CombatWeapon - { - - - public CombatWeapon(Component weapon) - { -#if DEBUG - Console.WriteLine("Creating New CombatWeapon"); -#endif - this.weapon = weapon; -#if DEBUG - Console.WriteLine("Getting Weapon Template WeaponInfo"); -#endif - var wpninfo = weapon.Template.ComponentTemplate.WeaponInfo; -#if DEBUG - Console.WriteLine("Done"); - Console.WriteLine("Getting Range info"); -#endif - int wpMaxR = wpninfo.MaxRange; -#if DEBUG - Console.WriteLine("Done MaxRange"); -#endif - int wpMinR = wpninfo.MinRange; -#if DEBUG - Console.WriteLine("Done MinRange"); -#endif -#if DEBUG - Console.WriteLine("done getting random info"); -#endif - if (wpninfo.DisplayEffect.GetType() == typeof(Combat.BeamWeaponDisplayEffect)) - { - weaponType = "Beam"; - - maxRange_distance = (Fix16)wpMaxR * Battle_Space.KilometersPerSquare; - minRange = (Fix16)wpMinR * Battle_Space.KilometersPerSquare; - } - else if (wpninfo.DisplayEffect.GetType() == typeof(Combat.ProjectileWeaponDisplayEffect)) - { - weaponType = "Bolt"; - - boltSpeed = (Fix16)wpMaxR * Battle_Space.KilometersPerSquare; - maxRange_time = (Fix16)1; // (maxTime for bolts) untill mod files can handle this, bolt weapons range is the distance it can go in 1 sec. - minRange = ((Fix16)wpMinR / boltSpeed); //(minTime for bolts) distance / speed = time - } - else if (wpninfo.DisplayEffect.GetType() == typeof(Combat.SeekerWeaponDisplayEffect)) - { -#if DEBUG - Console.WriteLine("CombatWeapon is a Seeker"); -#endif - SeekingWeaponInfo seekerinfo = (SeekingWeaponInfo)weapon.Template.ComponentTemplate.WeaponInfo; - weaponType = "Seeker"; - boltSpeed = 0; //seekers get launched at 0 speed. - int mass = seekerinfo.SeekerDurability; // sure why not? - int wpnskrspd = seekerinfo.SeekerSpeed; - //Fix16 Thrust = (Fix16)wpnskrspd * mass * (Fix16)0.001; - - //boltSpeed = (Fix16)wpMaxR * (Fix16)1000 * (Fix16)(Battle_Space.TickLength); // convert from kilometers per second to meters per tick - maxRange_time = (Fix16)wpMaxR / (Fix16)wpnskrspd; // (maxTime for Missiles) untill mod files can handle this, bolt weapons range is the distance it can go in 1 sec. - } - else //treat it like a beam I guess. - { - weaponType = "Unknown"; - maxRange_distance = (Fix16)wpMaxR * Battle_Space.KilometersPerSquare; - minRange = (Fix16)wpMinR * Battle_Space.KilometersPerSquare; - } - double wpiReloadRate = wpninfo.ReloadRate; - reloadRate = (Fix16)wpiReloadRate; - nextReload = 1; -#if DEBUG - Console.WriteLine("Done creating CombatWeapon"); -#endif - - } - - /// - /// "Beam", "Bolt", "Seeker". - /// - public string weaponType { get; set; } - - /// - /// the actual component. - /// - [DoNotAssignID] - public Component weapon { get; private set; } - - /// - /// nextReload tick (when battletick >= this, fire again, then reset this to current tick + reload rate) - /// - public int nextReload { get; set; } - - /// - /// the rate the weapon can reload in seconds. - /// - public Fix16 reloadRate { get; private set; } - - /// - /// if a bolt, what is it's speed if fired at rest? in m/s - /// - public Fix16 boltSpeed { get; private set; } - - /// - /// if a bolt (or seeker?), this is time, else it's distance - /// - public Fix16 maxRange - { - get - { - Fix16 retnum; - if (weaponType == "Beam") - { - retnum = maxRange_distance; - } - else - { - retnum = maxRange_time; - } - return retnum; - } - } - - /// - /// for seekers and bolts. - /// - public Fix16 maxRange_time { get; private set; } - - /// - /// for beams. - /// - public Fix16 maxRange_distance { get; private set; } - - /// - /// if a bolt (or seeker?), this is time, else it's distance - /// - public Fix16 minRange { get; private set; } - - public bool CanTarget(ITargetable target) - { - return weapon.CanTarget(target); - } - - public bool isinRange(CombatObject attacker, CombatObject target) - { - bool inrange = false; - var wpninfo = weapon.Template.ComponentTemplate.WeaponInfo; - Fix16 distance_toTarget = NMath.distance(attacker.cmbt_loc, target.cmbt_loc); - - string weaponRangeinfo = "RangeInfo:\r\n "; - - - if (weaponType == "Beam") //beam - { - if (distance_toTarget <= maxRange && distance_toTarget >= minRange) - { - inrange = true; - weaponRangeinfo += "Range for Beam is good \r\n"; - } - } - else if (weaponType == "Bolt") //projectile - { - inrange = bolt_isinRange(attacker, target); - } - else if (weaponType == "Seeker") //seeker - { - inrange = seeker_isinRange(attacker, target); - } - - attacker.debuginfo += weaponRangeinfo; - return inrange; - } - - private bool seeker_isinRange(CombatObject attacker, CombatObject target) - { - bool isinRange = false; - Fix16 seekerTimeToTarget = CombatSeeker.seekerTimeToTarget(attacker, target, (SeekingWeaponInfo)weapon.Template.ComponentTemplate.WeaponInfo); - if (seekerTimeToTarget < maxRange_time) - isinRange = true; - return isinRange; - } - - private bool bolt_isinRange(CombatObject attacker, CombatObject target) - { - bool isinRange = false; - Fix16 boltTTT = boltTimeToTarget(attacker, target); - //remember, maxRange is bolt lifetime in seconds - if (boltTTT <= maxRange && boltTTT >= minRange) - { - isinRange = true; - } - return isinRange; - } - - /// - /// - /// - /// - /// - /// speed in meters per second - public Fix16 boltClosingSpeed(CombatObject attacker, CombatObject target) - { - Fix16 shotspeed = boltSpeed; //speed of bullet when ship is at standstill - Fix16 shotspeed_actual = shotspeed + NMath.closingRate(attacker.cmbt_loc, attacker.cmbt_vel, target.cmbt_loc, target.cmbt_vel); - return shotspeed_actual;// / Battle_Space.TicksPerSecond; - } - - /// - /// - /// - /// - /// - /// t in seconds - public Fix16 boltTimeToTarget(CombatObject attacker, CombatObject target) - { - Fix16 distance_toTarget = NMath.distance(attacker.cmbt_loc, target.cmbt_loc); - Fix16 boltTimetoTarget = distance_toTarget / boltClosingSpeed(attacker, target); - return boltTimetoTarget; - } - - public override string ToString() - { - return weapon.ToString(); - } - } - -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FrEee.Utility; +using FrEee.Utility.Extensions; + +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Vehicles; +using FrEee.Game.Objects.Combat; +using FrEee.Game.Objects.Technology; +using FrEee.Modding; + +using NewtMath.f16; +using FixMath.NET; +using FrEee.Game.Objects.Space; + +namespace FrEee.Game.Objects.Combat2 +{ + + public class CombatWeapon + { + + + public CombatWeapon(Component weapon) + { +#if DEBUG + Console.WriteLine("Creating New CombatWeapon"); +#endif + this.weapon = weapon; +#if DEBUG + Console.WriteLine("Getting Weapon Template WeaponInfo"); +#endif + var wpninfo = weapon.Template.ComponentTemplate.WeaponInfo; +#if DEBUG + Console.WriteLine("Done"); + Console.WriteLine("Getting Range info"); +#endif + int wpMaxR = wpninfo.MaxRange; +#if DEBUG + Console.WriteLine("Done MaxRange"); +#endif + int wpMinR = wpninfo.MinRange; +#if DEBUG + Console.WriteLine("Done MinRange"); +#endif +#if DEBUG + Console.WriteLine("done getting random info"); +#endif + if (wpninfo.DisplayEffect.GetType() == typeof(Combat.BeamWeaponDisplayEffect)) + { + weaponType = "Beam"; + + maxRange_distance = (Fix16)wpMaxR * Battle_Space.KilometersPerSquare; + minRange = (Fix16)wpMinR * Battle_Space.KilometersPerSquare; + } + else if (wpninfo.DisplayEffect.GetType() == typeof(Combat.ProjectileWeaponDisplayEffect)) + { + weaponType = "Bolt"; + + boltSpeed = (Fix16)wpMaxR * Battle_Space.KilometersPerSquare; + maxRange_time = (Fix16)1; // (maxTime for bolts) untill mod files can handle this, bolt weapons range is the distance it can go in 1 sec. + minRange = ((Fix16)wpMinR / boltSpeed); //(minTime for bolts) distance / speed = time + } + else if (wpninfo.DisplayEffect.GetType() == typeof(Combat.SeekerWeaponDisplayEffect)) + { +#if DEBUG + Console.WriteLine("CombatWeapon is a Seeker"); +#endif + SeekingWeaponInfo seekerinfo = (SeekingWeaponInfo)weapon.Template.ComponentTemplate.WeaponInfo; + weaponType = "Seeker"; + boltSpeed = 0; //seekers get launched at 0 speed. + int mass = seekerinfo.SeekerDurability; // sure why not? + int wpnskrspd = seekerinfo.SeekerSpeed; + //Fix16 Thrust = (Fix16)wpnskrspd * mass * (Fix16)0.001; + + //boltSpeed = (Fix16)wpMaxR * (Fix16)1000 * (Fix16)(Battle_Space.TickLength); // convert from kilometers per second to meters per tick + maxRange_time = (Fix16)wpMaxR / (Fix16)wpnskrspd; // (maxTime for Missiles) untill mod files can handle this, bolt weapons range is the distance it can go in 1 sec. + } + else //treat it like a beam I guess. + { + weaponType = "Unknown"; + maxRange_distance = (Fix16)wpMaxR * Battle_Space.KilometersPerSquare; + minRange = (Fix16)wpMinR * Battle_Space.KilometersPerSquare; + } + double wpiReloadRate = wpninfo.ReloadRate; + reloadRate = (Fix16)wpiReloadRate; + nextReload = 1; +#if DEBUG + Console.WriteLine("Done creating CombatWeapon"); +#endif + + } + + /// + /// "Beam", "Bolt", "Seeker". + /// + public string weaponType { get; set; } + + /// + /// the actual component. + /// + [DoNotAssignID] + public Component weapon { get; private set; } + + /// + /// nextReload tick (when battletick >= this, fire again, then reset this to current tick + reload rate) + /// + public int nextReload { get; set; } + + /// + /// the rate the weapon can reload in seconds. + /// + public Fix16 reloadRate { get; private set; } + + /// + /// if a bolt, what is it's speed if fired at rest? in m/s + /// + public Fix16 boltSpeed { get; private set; } + + /// + /// if a bolt (or seeker?), this is time, else it's distance + /// + public Fix16 maxRange + { + get + { + Fix16 retnum; + if (weaponType == "Beam") + { + retnum = maxRange_distance; + } + else + { + retnum = maxRange_time; + } + return retnum; + } + } + + /// + /// for seekers and bolts. + /// + public Fix16 maxRange_time { get; private set; } + + /// + /// for beams. + /// + public Fix16 maxRange_distance { get; private set; } + + /// + /// if a bolt (or seeker?), this is time, else it's distance + /// + public Fix16 minRange { get; private set; } + + public bool CanTarget(ITargetable target) + { + return weapon.CanTarget(target); + } + + public bool isinRange(CombatObject attacker, CombatObject target) + { + bool inrange = false; + var wpninfo = weapon.Template.ComponentTemplate.WeaponInfo; + Fix16 distance_toTarget = NMath.distance(attacker.cmbt_loc, target.cmbt_loc); + + string weaponRangeinfo = "RangeInfo:\r\n "; + + + if (weaponType == "Beam") //beam + { + if (distance_toTarget <= maxRange && distance_toTarget >= minRange) + { + inrange = true; + weaponRangeinfo += "Range for Beam is good \r\n"; + } + } + else if (weaponType == "Bolt") //projectile + { + inrange = bolt_isinRange(attacker, target); + } + else if (weaponType == "Seeker") //seeker + { + inrange = seeker_isinRange(attacker, target); + } + + attacker.debuginfo += weaponRangeinfo; + return inrange; + } + + private bool seeker_isinRange(CombatObject attacker, CombatObject target) + { + bool isinRange = false; + Fix16 seekerTimeToTarget = CombatSeeker.seekerTimeToTarget(attacker, target, (SeekingWeaponInfo)weapon.Template.ComponentTemplate.WeaponInfo); + if (seekerTimeToTarget < maxRange_time) + isinRange = true; + return isinRange; + } + + private bool bolt_isinRange(CombatObject attacker, CombatObject target) + { + bool isinRange = false; + Fix16 boltTTT = boltTimeToTarget(attacker, target); + //remember, maxRange is bolt lifetime in seconds + if (boltTTT <= maxRange && boltTTT >= minRange) + { + isinRange = true; + } + return isinRange; + } + + /// + /// + /// + /// + /// + /// speed in meters per second + public Fix16 boltClosingSpeed(CombatObject attacker, CombatObject target) + { + Fix16 shotspeed = boltSpeed; //speed of bullet when ship is at standstill + Fix16 shotspeed_actual = shotspeed + NMath.closingRate(attacker.cmbt_loc, attacker.cmbt_vel, target.cmbt_loc, target.cmbt_vel); + return shotspeed_actual;// / Battle_Space.TicksPerSecond; + } + + /// + /// + /// + /// + /// + /// t in seconds + public Fix16 boltTimeToTarget(CombatObject attacker, CombatObject target) + { + Fix16 distance_toTarget = NMath.distance(attacker.cmbt_loc, target.cmbt_loc); + Fix16 boltTimetoTarget = distance_toTarget / boltClosingSpeed(attacker, target); + return boltTimetoTarget; + } + + public override string ToString() + { + return weapon.ToString(); + } + } + +} diff --git a/FrEee/Game/Objects/Combat2/ControlledCombatObject.cs b/FrEee/Objects/Combat2/ControlledCombatObject.cs similarity index 97% rename from FrEee/Game/Objects/Combat2/ControlledCombatObject.cs rename to FrEee/Objects/Combat2/ControlledCombatObject.cs index 9458d40ec..ba2495150 100644 --- a/FrEee/Game/Objects/Combat2/ControlledCombatObject.cs +++ b/FrEee/Objects/Combat2/ControlledCombatObject.cs @@ -1,296 +1,296 @@ -using FixMath.NET; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using NewtMath.f16; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace FrEee.Game.Objects.Combat2 -{ - /// - /// A combat object which can be controlled by an empire. - /// - public abstract class CombatControlledObject : CombatObject - { - protected CombatControlledObject(ICombatant start, ICombatant working, PointXd position, PointXd vector, int battleseed, string IDprefix) - : base(working, position, vector, start.ID, IDprefix) - { - //StartCombatant = working; wtf? - StartCombatant = start; - WorkingCombatant = working; - newDice(battleseed); - RefreshWeapons(); - } - - /// - /// the fleet to which this object belongs. - /// - public CombatFleet combatfleet { get; set; } - - /// - /// The object's state at the start of combat. - /// - [DoNotAssignID] - public ICombatant StartCombatant { get; protected set; } - - /// - /// Weapons equipped by this combatant. - /// - public IEnumerable Weapons { get; protected set; } - - /// - /// The current state of the object. - /// - public ICombatant WorkingCombatant { get { return (ICombatant)WorkingObject; } private set { WorkingObject = value; } } - - /// - /// endgoal for helm is for the ship to get to and match speed with the comObj.targetWaypiont as fast as possible. - /// the strategic AI script should be responsible for setting where the waypoint is and where thet waypoint is going. - /// - /// - public override void helm() - { - - if (waypointTarget == null) - return; // nothing to do - Compass angletoWaypoint = new Compass(this.cmbt_loc, this.waypointTarget.cmbt_loc); //relitive to me. - - Tuple nav = Nav(angletoWaypoint); - Compass angletoturn = nav.Item1; - bool? thrustToWaypoint = nav.Item2; - - turnship(angletoturn, angletoWaypoint); - - thrustship(angletoturn, thrustToWaypoint); - - //this.lastVectortoWaypoint = vectortowaypoint; - } - - protected override Tuple Nav(Compass angletoWaypoint) - { -#if DEBUG - Console.WriteLine("NAV FUNCTION FOR " + this.WorkingObject); -#endif - - Compass angletoturn = new Compass(); - bool? thrustToWaypoint = true; - - - this.debuginfo += "HelmInfo:" + "\r\n"; - var ship = this.WorkingCombatant; - string name = ship.Name; - //rotate ship - Fix16 timetoturn = (Fix16)0; - //Compass angletoturn = new Compass(Trig.angleto(comObj.cmbt_face, comObj.waypointTarget.cmbt_loc)); - CombatWaypoint wpt = this.waypointTarget; - -#if DEBUG - Console.WriteLine("Waypoint is " + wpt); -#endif - - angletoturn.Degrees = angletoWaypoint.Degrees - this.cmbt_head.Degrees; - var bearingToTurn = angletoturn.Degrees <= 180 ? angletoturn.Degrees : angletoturn.Degrees - 360; - PointXd vectortowaypoint = this.cmbt_loc - this.waypointTarget.cmbt_loc; - -#if DEBUG - Console.WriteLine("Current location is " + cmbt_loc); - Console.WriteLine("Waypoint location is " + waypointTarget.cmbt_loc); - Console.WriteLine("So the vector to waypoint is " + vectortowaypoint); - Console.WriteLine("And the waypoint is " + vectortowaypoint.Length + " away."); - - Console.WriteLine("Current velocity is " + cmbt_vel); - Console.WriteLine("Current speed is " + cmbt_vel.Length); - Console.WriteLine("Waypoint velocity is " + waypointTarget.cmbt_vel); - Console.WriteLine("So we need to change our velocity by " + (waypointTarget.cmbt_vel - cmbt_vel)); -#endif - - //if (comObj.lastVectortoWaypoint != null) - // angletoturn.Radians = Trig.angleA(vectortowaypoint - comObj.lastVectortoWaypoint); - - timetoturn = (angletoturn.Degrees / this.maxRotate.Degrees); // seconds - Fix16 oneEightytime = (180 / this.maxRotate.Degrees); // seconds - -#if DEBUG - Console.WriteLine("Current heading is " + cmbt_head); - Console.WriteLine("Angle to waypoint is " + angletoWaypoint); - Console.WriteLine("So we need to turn by " + bearingToTurn + " degrees"); - Console.WriteLine("We can turn at " + this.maxRotate + " per second."); - Console.WriteLine("So we can rotate to face the target in " + timetoturn + " seconds."); - Console.WriteLine("And we can do a 180 in " + oneEightytime + " seconds."); -#endif - - //PointXd offsetVector = comObj.waypointTarget.cmbt_vel - comObj.cmbt_vel; // O = a - b - //PointXd combinedVelocity = comObj.cmbt_vel - comObj.waypointTarget.cmbt_vel; - //PointXd distancePnt = comObj.waypointTarget.cmbt_loc - comObj.cmbt_loc; - //double closingSpeed = Trig.dotProduct(combinedVelocity, distancePnt); - Fix16 closingSpeed = NMath.closingRate(this.cmbt_loc, this.cmbt_vel, this.waypointTarget.cmbt_loc, this.waypointTarget.cmbt_vel); - -#if DEBUG - Console.WriteLine("We are approaching/departing our target at a relative speed of " + closingSpeed); -#endif - - Fix16 myspeed = this.cmbt_vel.Length; //seconds - - Fix16 maxFowardAcceleration = this.maxfowardThrust / this.cmbt_mass; //seconds - - Fix16 timetokill_ClosingSpeed = closingSpeed / maxFowardAcceleration; //t = v / a in seconds. - - - Fix16 maxStrafeAcceleration = this.maxStrafeThrust / this.cmbt_mass; - - Fix16 timetokill_ClosingSpeed_strafe = closingSpeed / maxStrafeAcceleration; //in seconds. - Fix16 timetokill_MySpeed = myspeed / (this.maxfowardThrust / this.cmbt_mass); //in seconds. - -#if DEBUG - Console.WriteLine("Forward/strafe accel is " + maxFowardAcceleration + "/" + maxStrafeAcceleration); - Console.WriteLine("Can kill closing speed in this many seconds using forward/strafe accel: " + timetokill_ClosingSpeed + "/" + timetokill_ClosingSpeed_strafe); - Console.WriteLine("Can come to a complete stop in " + timetokill_MySpeed + " seconds."); -#endif - - Fix16 distance = vectortowaypoint.Length; - - - // TODO - should we divide by ticks per second here, so we can close in one tick? - Fix16 nominaldistance = maxStrafeAcceleration * timetokill_ClosingSpeed_strafe; //this.maxStrafeThrust; (I think this should be acceleration, not thrust. - - //Fix16 nominaltime = strafetimetokill_ClosingSpeed - Fix16 timetowpt = distance / closingSpeed; -#if DEBUG - Console.WriteLine("Time to waypoint (if we were in a 1D universe): " + timetowpt); -#endif - - string helmdo = ""; - - if (closingSpeed > (Fix16)0) //getting closer? - { -#if DEBUG - Console.WriteLine("***Approaching target!***"); -#endif - /*if (timetowpt <= timetokill_ClosingSpeed_strafe) // close to the waypoint (within strafe thrust range) - { - thrustToWaypoint = null; // should attempt to match speed using strafe thrust - }*/ - if (timetowpt <= timetokill_ClosingSpeed + oneEightytime) // if/when we're going to overshoot the waypoint. - { - if (timetowpt < timetokill_ClosingSpeed_strafe) //if time to waypoint is less than time to kill speed with strafe thrusters - { -#if DEBUG - Console.WriteLine("***Going too fast! Slow down!***"); -#endif - thrustToWaypoint = false; // thrust AWAY from the waypoint! slow down! - } - else - { -#if DEBUG - Console.WriteLine("***Going just the right speed...***"); -#endif - helmdo = "null" + "\r\n"; - thrustToWaypoint = null; // driiift! iiiin! spaaaace! should use only strafe thrust to match speed - } - } - else - { -#if DEBUG - Console.WriteLine("***We can go faster! Speed it up!***"); -#endif - // accelerate toward the target, since we still have time to slow down later - thrustToWaypoint = true; - } - } - else - { -#if DEBUG - Console.WriteLine("***Not approaching target! Need to get closer!***"); -#endif - thrustToWaypoint = true;// getting farther away or maintaining distance, just thrust toward the target - } - - if (thrustToWaypoint == false) - { - helmdo = "Initiating Turnaround" + "\r\n"; //turn around and thrust the other way - angletoturn.Degrees = (angletoWaypoint.Degrees - (Fix16)180) - this.cmbt_head.Degrees; //turn around and thrust the other way - angletoturn.normalize(); - } - else if (thrustToWaypoint == null) - { - // TODO - shouldn't this be using delta V between target and ship instead of target V? - // and shouldn't the angle be relative? - angletoturn.Radians = Trig.angleA(this.waypointTarget.cmbt_vel); - } - - this.debuginfo += "timetowpt:\t" + timetowpt.ToString() + "\r\n"; - this.debuginfo += "strafetime:\t" + timetokill_ClosingSpeed_strafe.ToString() + "\r\n"; - this.debuginfo += "speedkilltime:\t" + timetokill_ClosingSpeed.ToString() + "\r\n"; - this.debuginfo += "180time:\t" + oneEightytime.ToString() + "\r\n"; - this.debuginfo += "ThrustTo:\t" + thrustToWaypoint.ToString() + "\r\n"; - this.debuginfo += helmdo + "\r\n"; - - return new Tuple(angletoturn, thrustToWaypoint); - } - - /// - /// Refreshes the list of available weapons that this combat object can fire. - /// - protected abstract void RefreshWeapons(); - - public override string ToString() - { - return WorkingCombatant.Name; - } - - /*/// - /// attempt to move firecontrol to the combatObject - /// - /// - /// - /// - - public override void firecontrol(int tic_countr, bool IsReplay, CombatReplayLog ReplayLog) - { - //is a ship, base, unit, or planet - //ControlledCombatObject ccobj = (ControlledCombatObject)comObj; - foreach (var wpn in Weapons) - { - ICombatant ship = (ICombatant)WorkingObject; - - if (weaponTarget.Count() > 0 && //if there ARE targets - wpn.CanTarget(weaponTarget[0].WorkingObject) && //if we CAN target - tic_countr >= wpn.nextReload) //if the weapon is ready to fire. - { - if (wpn.isinRange(this, weaponTarget[0])) - { - //this function figures out if there's a hit, deals the damage, and creates an event. - - //first create the event for the target ship - CombatTakeFireEvent targets_event = FireWeapon(tic_countr, this, wpn, weaponTarget[0]); - //then create teh event for this ship firing on the target - CombatFireOnTargetEvent attack_event = new CombatFireOnTargetEvent(tic_countr, this, cmbt_loc, wpn, targets_event); - targets_event.fireOnEvent = attack_event; - - if (!IsReplay) - { - ReplayLog.Events.Add(targets_event); - ReplayLog.Events.Add(attack_event); - } - - } - } - } - //update any events where this ship has taken fire, and set the location. - if (!IsReplay) - { - foreach (CombatEvent comevnt in ReplayLog.EventsForObjectAtTick(this, tic_countr)) - { - if (comevnt.GetType() == typeof(CombatTakeFireEvent)) - { - CombatTakeFireEvent takefire = (CombatTakeFireEvent)comevnt; - takefire.setLocation(cmbt_loc); - } - } - } - } - */ - } -} +using FixMath.NET; +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Space; +using NewtMath.f16; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FrEee.Game.Objects.Combat2 +{ + /// + /// A combat object which can be controlled by an empire. + /// + public abstract class CombatControlledObject : CombatObject + { + protected CombatControlledObject(ICombatant start, ICombatant working, PointXd position, PointXd vector, int battleseed, string IDprefix) + : base(working, position, vector, start.ID, IDprefix) + { + //StartCombatant = working; wtf? + StartCombatant = start; + WorkingCombatant = working; + newDice(battleseed); + RefreshWeapons(); + } + + /// + /// the fleet to which this object belongs. + /// + public CombatFleet combatfleet { get; set; } + + /// + /// The object's state at the start of combat. + /// + [DoNotAssignID] + public ICombatant StartCombatant { get; protected set; } + + /// + /// Weapons equipped by this combatant. + /// + public IEnumerable Weapons { get; protected set; } + + /// + /// The current state of the object. + /// + public ICombatant WorkingCombatant { get { return (ICombatant)WorkingObject; } private set { WorkingObject = value; } } + + /// + /// endgoal for helm is for the ship to get to and match speed with the comObj.targetWaypiont as fast as possible. + /// the strategic AI script should be responsible for setting where the waypoint is and where thet waypoint is going. + /// + /// + public override void helm() + { + + if (waypointTarget == null) + return; // nothing to do + Compass angletoWaypoint = new Compass(this.cmbt_loc, this.waypointTarget.cmbt_loc); //relitive to me. + + Tuple nav = Nav(angletoWaypoint); + Compass angletoturn = nav.Item1; + bool? thrustToWaypoint = nav.Item2; + + turnship(angletoturn, angletoWaypoint); + + thrustship(angletoturn, thrustToWaypoint); + + //this.lastVectortoWaypoint = vectortowaypoint; + } + + protected override Tuple Nav(Compass angletoWaypoint) + { +#if DEBUG + Console.WriteLine("NAV FUNCTION FOR " + this.WorkingObject); +#endif + + Compass angletoturn = new Compass(); + bool? thrustToWaypoint = true; + + + this.debuginfo += "HelmInfo:" + "\r\n"; + var ship = this.WorkingCombatant; + string name = ship.Name; + //rotate ship + Fix16 timetoturn = (Fix16)0; + //Compass angletoturn = new Compass(Trig.angleto(comObj.cmbt_face, comObj.waypointTarget.cmbt_loc)); + CombatWaypoint wpt = this.waypointTarget; + +#if DEBUG + Console.WriteLine("Waypoint is " + wpt); +#endif + + angletoturn.Degrees = angletoWaypoint.Degrees - this.cmbt_head.Degrees; + var bearingToTurn = angletoturn.Degrees <= 180 ? angletoturn.Degrees : angletoturn.Degrees - 360; + PointXd vectortowaypoint = this.cmbt_loc - this.waypointTarget.cmbt_loc; + +#if DEBUG + Console.WriteLine("Current location is " + cmbt_loc); + Console.WriteLine("Waypoint location is " + waypointTarget.cmbt_loc); + Console.WriteLine("So the vector to waypoint is " + vectortowaypoint); + Console.WriteLine("And the waypoint is " + vectortowaypoint.Length + " away."); + + Console.WriteLine("Current velocity is " + cmbt_vel); + Console.WriteLine("Current speed is " + cmbt_vel.Length); + Console.WriteLine("Waypoint velocity is " + waypointTarget.cmbt_vel); + Console.WriteLine("So we need to change our velocity by " + (waypointTarget.cmbt_vel - cmbt_vel)); +#endif + + //if (comObj.lastVectortoWaypoint != null) + // angletoturn.Radians = Trig.angleA(vectortowaypoint - comObj.lastVectortoWaypoint); + + timetoturn = (angletoturn.Degrees / this.maxRotate.Degrees); // seconds + Fix16 oneEightytime = (180 / this.maxRotate.Degrees); // seconds + +#if DEBUG + Console.WriteLine("Current heading is " + cmbt_head); + Console.WriteLine("Angle to waypoint is " + angletoWaypoint); + Console.WriteLine("So we need to turn by " + bearingToTurn + " degrees"); + Console.WriteLine("We can turn at " + this.maxRotate + " per second."); + Console.WriteLine("So we can rotate to face the target in " + timetoturn + " seconds."); + Console.WriteLine("And we can do a 180 in " + oneEightytime + " seconds."); +#endif + + //PointXd offsetVector = comObj.waypointTarget.cmbt_vel - comObj.cmbt_vel; // O = a - b + //PointXd combinedVelocity = comObj.cmbt_vel - comObj.waypointTarget.cmbt_vel; + //PointXd distancePnt = comObj.waypointTarget.cmbt_loc - comObj.cmbt_loc; + //double closingSpeed = Trig.dotProduct(combinedVelocity, distancePnt); + Fix16 closingSpeed = NMath.closingRate(this.cmbt_loc, this.cmbt_vel, this.waypointTarget.cmbt_loc, this.waypointTarget.cmbt_vel); + +#if DEBUG + Console.WriteLine("We are approaching/departing our target at a relative speed of " + closingSpeed); +#endif + + Fix16 myspeed = this.cmbt_vel.Length; //seconds + + Fix16 maxFowardAcceleration = this.maxfowardThrust / this.cmbt_mass; //seconds + + Fix16 timetokill_ClosingSpeed = closingSpeed / maxFowardAcceleration; //t = v / a in seconds. + + + Fix16 maxStrafeAcceleration = this.maxStrafeThrust / this.cmbt_mass; + + Fix16 timetokill_ClosingSpeed_strafe = closingSpeed / maxStrafeAcceleration; //in seconds. + Fix16 timetokill_MySpeed = myspeed / (this.maxfowardThrust / this.cmbt_mass); //in seconds. + +#if DEBUG + Console.WriteLine("Forward/strafe accel is " + maxFowardAcceleration + "/" + maxStrafeAcceleration); + Console.WriteLine("Can kill closing speed in this many seconds using forward/strafe accel: " + timetokill_ClosingSpeed + "/" + timetokill_ClosingSpeed_strafe); + Console.WriteLine("Can come to a complete stop in " + timetokill_MySpeed + " seconds."); +#endif + + Fix16 distance = vectortowaypoint.Length; + + + // TODO - should we divide by ticks per second here, so we can close in one tick? + Fix16 nominaldistance = maxStrafeAcceleration * timetokill_ClosingSpeed_strafe; //this.maxStrafeThrust; (I think this should be acceleration, not thrust. + + //Fix16 nominaltime = strafetimetokill_ClosingSpeed + Fix16 timetowpt = distance / closingSpeed; +#if DEBUG + Console.WriteLine("Time to waypoint (if we were in a 1D universe): " + timetowpt); +#endif + + string helmdo = ""; + + if (closingSpeed > (Fix16)0) //getting closer? + { +#if DEBUG + Console.WriteLine("***Approaching target!***"); +#endif + /*if (timetowpt <= timetokill_ClosingSpeed_strafe) // close to the waypoint (within strafe thrust range) + { + thrustToWaypoint = null; // should attempt to match speed using strafe thrust + }*/ + if (timetowpt <= timetokill_ClosingSpeed + oneEightytime) // if/when we're going to overshoot the waypoint. + { + if (timetowpt < timetokill_ClosingSpeed_strafe) //if time to waypoint is less than time to kill speed with strafe thrusters + { +#if DEBUG + Console.WriteLine("***Going too fast! Slow down!***"); +#endif + thrustToWaypoint = false; // thrust AWAY from the waypoint! slow down! + } + else + { +#if DEBUG + Console.WriteLine("***Going just the right speed...***"); +#endif + helmdo = "null" + "\r\n"; + thrustToWaypoint = null; // driiift! iiiin! spaaaace! should use only strafe thrust to match speed + } + } + else + { +#if DEBUG + Console.WriteLine("***We can go faster! Speed it up!***"); +#endif + // accelerate toward the target, since we still have time to slow down later + thrustToWaypoint = true; + } + } + else + { +#if DEBUG + Console.WriteLine("***Not approaching target! Need to get closer!***"); +#endif + thrustToWaypoint = true;// getting farther away or maintaining distance, just thrust toward the target + } + + if (thrustToWaypoint == false) + { + helmdo = "Initiating Turnaround" + "\r\n"; //turn around and thrust the other way + angletoturn.Degrees = (angletoWaypoint.Degrees - (Fix16)180) - this.cmbt_head.Degrees; //turn around and thrust the other way + angletoturn.normalize(); + } + else if (thrustToWaypoint == null) + { + // TODO - shouldn't this be using delta V between target and ship instead of target V? + // and shouldn't the angle be relative? + angletoturn.Radians = Trig.angleA(this.waypointTarget.cmbt_vel); + } + + this.debuginfo += "timetowpt:\t" + timetowpt.ToString() + "\r\n"; + this.debuginfo += "strafetime:\t" + timetokill_ClosingSpeed_strafe.ToString() + "\r\n"; + this.debuginfo += "speedkilltime:\t" + timetokill_ClosingSpeed.ToString() + "\r\n"; + this.debuginfo += "180time:\t" + oneEightytime.ToString() + "\r\n"; + this.debuginfo += "ThrustTo:\t" + thrustToWaypoint.ToString() + "\r\n"; + this.debuginfo += helmdo + "\r\n"; + + return new Tuple(angletoturn, thrustToWaypoint); + } + + /// + /// Refreshes the list of available weapons that this combat object can fire. + /// + protected abstract void RefreshWeapons(); + + public override string ToString() + { + return WorkingCombatant.Name; + } + + /*/// + /// attempt to move firecontrol to the combatObject + /// + /// + /// + /// + + public override void firecontrol(int tic_countr, bool IsReplay, CombatReplayLog ReplayLog) + { + //is a ship, base, unit, or planet + //ControlledCombatObject ccobj = (ControlledCombatObject)comObj; + foreach (var wpn in Weapons) + { + ICombatant ship = (ICombatant)WorkingObject; + + if (weaponTarget.Count() > 0 && //if there ARE targets + wpn.CanTarget(weaponTarget[0].WorkingObject) && //if we CAN target + tic_countr >= wpn.nextReload) //if the weapon is ready to fire. + { + if (wpn.isinRange(this, weaponTarget[0])) + { + //this function figures out if there's a hit, deals the damage, and creates an event. + + //first create the event for the target ship + CombatTakeFireEvent targets_event = FireWeapon(tic_countr, this, wpn, weaponTarget[0]); + //then create teh event for this ship firing on the target + CombatFireOnTargetEvent attack_event = new CombatFireOnTargetEvent(tic_countr, this, cmbt_loc, wpn, targets_event); + targets_event.fireOnEvent = attack_event; + + if (!IsReplay) + { + ReplayLog.Events.Add(targets_event); + ReplayLog.Events.Add(attack_event); + } + + } + } + } + //update any events where this ship has taken fire, and set the location. + if (!IsReplay) + { + foreach (CombatEvent comevnt in ReplayLog.EventsForObjectAtTick(this, tic_countr)) + { + if (comevnt.GetType() == typeof(CombatTakeFireEvent)) + { + CombatTakeFireEvent takefire = (CombatTakeFireEvent)comevnt; + takefire.setLocation(cmbt_loc); + } + } + } + } + */ + } +} diff --git a/FrEee/Game/Objects/Combat2/StrategyBlocks.cs b/FrEee/Objects/Combat2/StrategyBlocks.cs similarity index 96% rename from FrEee/Game/Objects/Combat2/StrategyBlocks.cs rename to FrEee/Objects/Combat2/StrategyBlocks.cs index df2b3c05b..30fdefd0a 100644 --- a/FrEee/Game/Objects/Combat2/StrategyBlocks.cs +++ b/FrEee/Objects/Combat2/StrategyBlocks.cs @@ -1,599 +1,599 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NewtMath.f16; -using FixMath.NET; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Enumerations; -using FrEee.Utility; - -namespace FrEee.Game.Objects.Combat2 -{ - public class StrategyBaseBlock - { - protected Object[] inputs; - public SafeType[] inputtypes { get; protected set; } - public object[] DefaultValues { get; protected set; } - - /// - /// the string name of this strategy object. - /// - public string name { get; protected set; } - - /// - /// the linked input strategy objecs. - /// - public StrategyBaseBlock[] inputLnks { get; set; } - - protected Object output = null; - public SafeType outputType { get; protected set; } - public List outputLnks { get; set; } - - public System.Drawing.Point GUIloc { get; set; } - - - /// - /// - /// - /// the types of inputs this block will receve as an array. - /// the return type of this block - public StrategyBaseBlock(IEnumerable inputtypes, IEnumerable defaultValues, Type outputtype) - { - - if (inputtypes != null) - { - this.inputs = new object[inputtypes.Count()]; //inputlist.ToArray(); - this.inputLnks = new StrategyBaseBlock[inputtypes.Count()]; - } - this.inputtypes = inputtypes.Select(t => (SafeType)t).ToArray(); - DefaultValues = defaultValues.ToArray(); - this.outputType = outputtype; - outputLnks = new List(); - } - - /// - /// the actual data. - /// - public Object[] Inputs - { - get { return this.inputs; } - } - - /// - /// links thisblock to another blocks output. - /// - /// the input link - /// the other block - public void makelink(int myinputIndx, StrategyBaseBlock otherblock) - { - if (inputtypes == null) - throw new InvalidOperationException("Input types for strategy block not initialized."); - if (inputtypes.Length <= myinputIndx) - throw new ArgumentOutOfRangeException("This strategy block does not have that many inputs."); - if (!inputtypes[myinputIndx].Type.IsAssignableFrom(otherblock.outputType.Type)) - throw new ArgumentException("Cannot link an output of type " + otherblock.outputType + " to an input of type " + inputtypes[myinputIndx] + "."); - - this.inputLnks[myinputIndx] = otherblock; - if (!otherblock.outputLnks.Contains(this)) - otherblock.outputLnks.Add(this); - } - - public void breaklink(int myinputIndx) - { - StrategyBaseBlock otherblock = this.inputLnks[myinputIndx]; - int dex = otherblock.outputLnks.FindIndex(item => item == this); - - otherblock.outputLnks[dex] = null; - this.inputLnks[myinputIndx] = null; - } - - /// - /// - /// - /// - public List getlistoflinks() - { - List links = new List(); - List links1 = new List(); - List links2 = new List(); - if (this.inputLnks != null) - { - foreach (StrategyBaseBlock lnk in this.inputLnks) - { - if (lnk != null) - { - links1.Add(lnk); - links2 = lnk.getlistoflinks(); - links = links1.Union(links2).ToList(); - } - - } - } - return links; - } - - public Object getNewOutput(CombatObject comObj) - { - - reCalc(comObj); - return this.output; - } - - public Object getOutput(CombatObject comObj) - { - if (output == null) - calc(comObj); - return this.output; - } - - /// - /// Resets all in - /// - public void zeroize() - { - if (inputLnks != null) - { - for (int i = 0; i < inputLnks.Length; i++) - { - StrategyBaseBlock lnk = inputLnks[i]; - if (lnk != null) - { - lnk.zeroize(); - lnk = null; - output = null; - inputs[i] = null; - } - } - } - } - - public void reCalc(CombatObject comObj) - { - zeroize(); - calc(comObj); - } - - public virtual void calc(CombatObject comObj) - { - for (int i = 0; i < inputLnks.Length; i++) - { - StrategyBaseBlock lnk = inputLnks[i]; - if (lnk == null) - inputs[i] = DefaultValues[i]; - else - { - if (lnk.output == null) - { - lnk.calc(comObj); - } - inputs[i] = lnk.output; - } - } - } - } - - public class StrategyWayPoint : StrategyBaseBlock - { - public StrategyWayPoint() - : base(new Type[2] { typeof(PointXd), typeof(PointXd) }, new object[] { new PointXd(), new PointXd() }, typeof(CombatWaypoint)) - { - name = "Waypoint"; - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - output = new CombatWaypoint((PointXd)inputs[0], (PointXd)inputs[1]); - } - } - - public class StrategyLocdata : StrategyBaseBlock - { - public StrategyLocdata() - : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(PointXd)) - { - name = "Location"; - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - CombatObject obj = (CombatObject)inputs[0]; - output = obj.cmbt_loc; - } - } - - public class StrategyVeldata : StrategyBaseBlock - { - public StrategyVeldata() - : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(PointXd)) - { - name = "Velocity"; - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - CombatObject obj = (CombatObject)inputs[0]; - output = obj.cmbt_vel; - } - } - - public class StrategyMassdata : StrategyBaseBlock - { - public StrategyMassdata() - : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(Fix16)) - { - name = "Mass"; - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - CombatObject obj = (CombatObject)inputs[0]; - output = obj.cmbt_mass; - } - } - - public class StrategyComObj : StrategyBaseBlock - { - public StrategyComObj() - : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(CombatObject)) - { - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - var cobj = (CombatObject)inputs[0]; - output = cobj; - } - } - - public class StrategyThisObj : StrategyBaseBlock - { - public StrategyThisObj() - : base(new Type[0], new object[0], typeof(CombatObject)) - { - name = "This"; - } - - public override void calc(CombatObject comObj) - { - //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. - output = comObj; - } - } - - public class StrategyThisEnemys : StrategyBaseBlock - { - public StrategyThisEnemys() - : base(new Type[0], new object[0], typeof(List)) - { - name = "Enemeys of This"; - } - - public override void calc(CombatObject comObj) - { - //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. - output = comObj.empire.hostile; - } - } - - public class StrategyThisEmpireObj : StrategyBaseBlock - { - public StrategyThisEmpireObj() - : base(new Type[0], new object[0], typeof(List)) - { - name = "Our Objects"; - } - - public override void calc(CombatObject comObj) - { - //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. - output = comObj.empire.ownships; - } - } - - public class Strategyfleet : StrategyBaseBlock - { - public Strategyfleet() - : base(new Type[1]{typeof(CombatObject)}, new object[0], typeof(List)) - { - name = "Fleet Objects"; - } - - public override void calc(CombatObject comObj) - { - base.calc(comObj); - CombatControlledObject targetObj = inputs[0] as CombatControlledObject; - output = targetObj.combatfleet.combatObjects; - } - } - - public class StrategyRange : StrategyBaseBlock - { - public StrategyRange() - : base(new Type[2] { typeof(CombatObject), typeof(CombatObject) }, new object[] { null, null }, typeof(Fix16)) - { - name = "Range"; - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - CombatObject obj0 = (CombatObject)inputs[0]; - CombatObject obj1 = (CombatObject)inputs[1]; - - output = NMath.distance(obj0.cmbt_loc, obj1.cmbt_loc); - } - } - - public class StrategyClosest : StrategyBaseBlock - { - Type filter = typeof(CombatObject); - //public StrategyClosest(CombatObject fromObj, List comObjList, Type filter = null): - public StrategyClosest() : - base(new Type[3] { typeof(CombatObject), typeof(List), typeof(SafeType) }, new object[] { null, new List(), new SafeType(typeof(CombatObject)) }, typeof(CombatObject)) - { - name = "Closest Object to:"; - //if (filter != null) - // this.filter = filter; //because I cant do Type filter = typeof() in the constuctor perameters. - //else - // this.filter = typeof(CombatObject); - } - - public override void calc(CombatObject comObj) - { - base.calc(comObj); - List comObjects = (List)inputs[1]; - CombatObject thisObj = (CombatObject)inputs[0]; - filter = inputs[2].GetType(); - Fix16 distance = Fix16.MaxValue; - - - if (comObjects != null && comObjects.Count > 0) - { - CombatObject closest = comObjects[0]; - foreach (CombatObject othercomObj in comObjects) - { - Fix16 thisdist = NewtMath.f16.NMath.distance(thisObj.cmbt_loc, othercomObj.cmbt_loc); - if (filter.IsAssignableFrom(closest.GetType()) && thisdist < distance) - { - distance = thisdist; - closest = othercomObj; - } - } - output = closest; - } - } - } - - public class StrategyWeapons : StrategyBaseBlock - { - Type filter = typeof(CombatWeapon); - - //public StrategyWeapons(CombatObject fromObj, Type filter = null) : - public StrategyWeapons() : - base(new Type[2] { typeof(CombatObject), typeof(CombatWeapon) }, new object[] { null, null }, typeof(List)) - { - name = "List of Weapons"; - //if (filter != null) - //{ - // this.filter = filter; //because I cant do Type filter = typeof() in the constuctor perameters. - //} - } - - public override void calc(CombatObject comObj) - { - base.calc(comObj); - - CombatControlledObject ccobj = (CombatControlledObject)comObj; - List comWpn = ccobj.Weapons.ToList(); - - } - } - - public class Strategyinput_fix16 : StrategyBaseBlock - { - public Fix16 inputnum { get; set; } - public Strategyinput_fix16() - : base(new Type[1] { typeof(Fix16) }, new object[] {null}, typeof(Fix16)) - { - name = "Input"; - inputnum = 0; - } - - public override void calc(CombatObject comObj) - { - //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. - output = inputnum; - } - } - - public class Strategyinput_Types : StrategyBaseBlock - { - public SafeType inputtype { get; set; } - public Strategyinput_Types() - : base(new Type[1] { typeof(SafeType) }, new object[] { (SafeType)typeof(CombatControlledObject) }, typeof(SafeType)) - { - name = "Type"; - inputtype = typeof(CombatControlledObject); - } - - public override void calc(CombatObject comObj) - { - //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. - output = inputtype; - } - } - - public class StrategyFilter_shieldhitpoints : StrategyBaseBlock - { - /// - /// input[0] = list of objects to filter - /// input[1] = Fix16 min - /// input[2] = Fix16 max - /// - public StrategyFilter_shieldhitpoints() - : base(new Type[3] { typeof(List), typeof(Fix16), typeof(Fix16) }, new object[3] { null, 0, Fix16.MaxValue }, typeof(List)) - { - name = "Filter"; - - } - - public override void calc(CombatObject comObj) - { - base.calc(comObj); //get inputs - List comObjects = (List)inputs[0]; - - Fix16 min = (Fix16)inputs[1]; - Fix16 max = (Fix16)inputs[2]; - List filteredObjects = new List(); - foreach (CombatObject loopcomobj in comObjects) - { - Fix16 checkitem = loopcomobj.WorkingObject.ShieldHitpoints; - if (checkitem > min && checkitem < max) - filteredObjects.Add(loopcomobj); - } - output = filteredObjects; - } - } - - public class StrategyFilter_HullSize : StrategyBaseBlock - { - /// - ///input[0] = list of objects to filter - ///input[1] = Fix16 min - ///input[2] = Fix16 max - /// - public StrategyFilter_HullSize() - : base(new Type[3] { typeof(List), typeof(Fix16), typeof(Fix16) }, new object[3] { null, 0, Fix16.MaxValue }, typeof(List)) - { - name = "Filter Hull Size"; - - } - - public override void calc(CombatObject comObj) - { - base.calc(comObj); //get inputs - List comObjects = (List)inputs[0]; - Fix16 min = (Fix16)inputs[1]; - Fix16 max = (Fix16)inputs[2]; - List filteredObjects = new List(); - foreach (CombatObject comobj in comObjects) - { - if (comobj.cmbt_mass > min && comobj.cmbt_mass < max) - filteredObjects.Add(comobj); - } - output = filteredObjects; - } - } - - public class StrategyWeaponMaxRange : StrategyBaseBlock - { - public StrategyWeaponMaxRange() - : base(new Type[1] { typeof(List) }, new object[] { null }, typeof(Fix16)) - { - - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - Fix16 rangecurrent = 0; - List weapons = inputs[0] as List; - foreach (CombatWeapon wpn in weapons) - { - - } - } - } - - public class StrategyFormate : StrategyBaseBlock - { - public StrategyFormate() - : base(new Type[3] { typeof(CombatObject), typeof(Fix16), typeof(Compass) }, new object[] { null }, typeof(PointXd)) - { - name = "Formate"; - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - CombatObject formateObj = (CombatObject)inputs[0]; - Fix16 range = (Fix16)inputs[1]; - Compass angle = (Compass)inputs[2]; - //angle.Degrees += formateObj.cmbt_head.Degrees; - PointXd formatePoint = Trig.sides_ab(range, angle.Radians); - formatePoint += formateObj.cmbt_loc; - output = formatePoint; - } - } - - public class StrategyVelAngle : StrategyBaseBlock - { - /// - /// outputs an angle of the target objects velocity vector. - /// - public StrategyVelAngle() - : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(Compass)) - { - name = "VelocityAngle"; - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - CombatObject targetObj = (CombatObject)inputs[0]; - Compass angle = new Compass(Trig.angleA(targetObj.cmbt_vel)); - output = angle; - } - } - - public class StrategyHeading : StrategyBaseBlock - { - /// - /// outputs an angle of the target objects heading. - /// - public StrategyHeading() - : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(Compass)) - { - name = "Heading"; - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - CombatObject targetObj = (CombatObject)inputs[0]; - Compass angle = new Compass(targetObj.cmbt_head.Degrees, false); - output = angle; - } - } - - public class StrategyAdd_Compass : StrategyBaseBlock - { - public StrategyAdd_Compass() - : base(new Type[2] { typeof(Compass), typeof(Compass) }, new object[] { null, null }, typeof(Compass)) - { - name = "Add Compass"; - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - Compass c1 = (Compass)inputs[0]; - Compass c2 = (Compass)inputs[1]; - output = c1 + c2; - } - } - - public class StrategyAdd_angletocompass : StrategyBaseBlock - { - public StrategyAdd_angletocompass() - : base(new Type[2] { typeof(Compass), typeof(Fix16) }, new object[] { null, null }, typeof(Compass)) - { - name = "Add Angle"; - } - public override void calc(CombatObject comObj) - { - base.calc(comObj); - Compass c1 = (Compass)inputs[0]; - Fix16 c2 = (Fix16)inputs[1]; - output = c1.Degrees + c2; - } - } - -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NewtMath.f16; +using FixMath.NET; +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Space; +using FrEee.Game.Objects.Civilization; +using FrEee.Game.Enumerations; +using FrEee.Utility; + +namespace FrEee.Game.Objects.Combat2 +{ + public class StrategyBaseBlock + { + protected Object[] inputs; + public SafeType[] inputtypes { get; protected set; } + public object[] DefaultValues { get; protected set; } + + /// + /// the string name of this strategy object. + /// + public string name { get; protected set; } + + /// + /// the linked input strategy objecs. + /// + public StrategyBaseBlock[] inputLnks { get; set; } + + protected Object output = null; + public SafeType outputType { get; protected set; } + public List outputLnks { get; set; } + + public System.Drawing.Point GUIloc { get; set; } + + + /// + /// + /// + /// the types of inputs this block will receve as an array. + /// the return type of this block + public StrategyBaseBlock(IEnumerable inputtypes, IEnumerable defaultValues, Type outputtype) + { + + if (inputtypes != null) + { + this.inputs = new object[inputtypes.Count()]; //inputlist.ToArray(); + this.inputLnks = new StrategyBaseBlock[inputtypes.Count()]; + } + this.inputtypes = inputtypes.Select(t => (SafeType)t).ToArray(); + DefaultValues = defaultValues.ToArray(); + this.outputType = outputtype; + outputLnks = new List(); + } + + /// + /// the actual data. + /// + public Object[] Inputs + { + get { return this.inputs; } + } + + /// + /// links thisblock to another blocks output. + /// + /// the input link + /// the other block + public void makelink(int myinputIndx, StrategyBaseBlock otherblock) + { + if (inputtypes == null) + throw new InvalidOperationException("Input types for strategy block not initialized."); + if (inputtypes.Length <= myinputIndx) + throw new ArgumentOutOfRangeException("This strategy block does not have that many inputs."); + if (!inputtypes[myinputIndx].Type.IsAssignableFrom(otherblock.outputType.Type)) + throw new ArgumentException("Cannot link an output of type " + otherblock.outputType + " to an input of type " + inputtypes[myinputIndx] + "."); + + this.inputLnks[myinputIndx] = otherblock; + if (!otherblock.outputLnks.Contains(this)) + otherblock.outputLnks.Add(this); + } + + public void breaklink(int myinputIndx) + { + StrategyBaseBlock otherblock = this.inputLnks[myinputIndx]; + int dex = otherblock.outputLnks.FindIndex(item => item == this); + + otherblock.outputLnks[dex] = null; + this.inputLnks[myinputIndx] = null; + } + + /// + /// + /// + /// + public List getlistoflinks() + { + List links = new List(); + List links1 = new List(); + List links2 = new List(); + if (this.inputLnks != null) + { + foreach (StrategyBaseBlock lnk in this.inputLnks) + { + if (lnk != null) + { + links1.Add(lnk); + links2 = lnk.getlistoflinks(); + links = links1.Union(links2).ToList(); + } + + } + } + return links; + } + + public Object getNewOutput(CombatObject comObj) + { + + reCalc(comObj); + return this.output; + } + + public Object getOutput(CombatObject comObj) + { + if (output == null) + calc(comObj); + return this.output; + } + + /// + /// Resets all in + /// + public void zeroize() + { + if (inputLnks != null) + { + for (int i = 0; i < inputLnks.Length; i++) + { + StrategyBaseBlock lnk = inputLnks[i]; + if (lnk != null) + { + lnk.zeroize(); + lnk = null; + output = null; + inputs[i] = null; + } + } + } + } + + public void reCalc(CombatObject comObj) + { + zeroize(); + calc(comObj); + } + + public virtual void calc(CombatObject comObj) + { + for (int i = 0; i < inputLnks.Length; i++) + { + StrategyBaseBlock lnk = inputLnks[i]; + if (lnk == null) + inputs[i] = DefaultValues[i]; + else + { + if (lnk.output == null) + { + lnk.calc(comObj); + } + inputs[i] = lnk.output; + } + } + } + } + + public class StrategyWayPoint : StrategyBaseBlock + { + public StrategyWayPoint() + : base(new Type[2] { typeof(PointXd), typeof(PointXd) }, new object[] { new PointXd(), new PointXd() }, typeof(CombatWaypoint)) + { + name = "Waypoint"; + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + output = new CombatWaypoint((PointXd)inputs[0], (PointXd)inputs[1]); + } + } + + public class StrategyLocdata : StrategyBaseBlock + { + public StrategyLocdata() + : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(PointXd)) + { + name = "Location"; + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + CombatObject obj = (CombatObject)inputs[0]; + output = obj.cmbt_loc; + } + } + + public class StrategyVeldata : StrategyBaseBlock + { + public StrategyVeldata() + : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(PointXd)) + { + name = "Velocity"; + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + CombatObject obj = (CombatObject)inputs[0]; + output = obj.cmbt_vel; + } + } + + public class StrategyMassdata : StrategyBaseBlock + { + public StrategyMassdata() + : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(Fix16)) + { + name = "Mass"; + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + CombatObject obj = (CombatObject)inputs[0]; + output = obj.cmbt_mass; + } + } + + public class StrategyComObj : StrategyBaseBlock + { + public StrategyComObj() + : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(CombatObject)) + { + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + var cobj = (CombatObject)inputs[0]; + output = cobj; + } + } + + public class StrategyThisObj : StrategyBaseBlock + { + public StrategyThisObj() + : base(new Type[0], new object[0], typeof(CombatObject)) + { + name = "This"; + } + + public override void calc(CombatObject comObj) + { + //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. + output = comObj; + } + } + + public class StrategyThisEnemys : StrategyBaseBlock + { + public StrategyThisEnemys() + : base(new Type[0], new object[0], typeof(List)) + { + name = "Enemeys of This"; + } + + public override void calc(CombatObject comObj) + { + //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. + output = comObj.empire.hostile; + } + } + + public class StrategyThisEmpireObj : StrategyBaseBlock + { + public StrategyThisEmpireObj() + : base(new Type[0], new object[0], typeof(List)) + { + name = "Our Objects"; + } + + public override void calc(CombatObject comObj) + { + //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. + output = comObj.empire.ownships; + } + } + + public class Strategyfleet : StrategyBaseBlock + { + public Strategyfleet() + : base(new Type[1]{typeof(CombatObject)}, new object[0], typeof(List)) + { + name = "Fleet Objects"; + } + + public override void calc(CombatObject comObj) + { + base.calc(comObj); + CombatControlledObject targetObj = inputs[0] as CombatControlledObject; + output = targetObj.combatfleet.combatObjects; + } + } + + public class StrategyRange : StrategyBaseBlock + { + public StrategyRange() + : base(new Type[2] { typeof(CombatObject), typeof(CombatObject) }, new object[] { null, null }, typeof(Fix16)) + { + name = "Range"; + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + CombatObject obj0 = (CombatObject)inputs[0]; + CombatObject obj1 = (CombatObject)inputs[1]; + + output = NMath.distance(obj0.cmbt_loc, obj1.cmbt_loc); + } + } + + public class StrategyClosest : StrategyBaseBlock + { + Type filter = typeof(CombatObject); + //public StrategyClosest(CombatObject fromObj, List comObjList, Type filter = null): + public StrategyClosest() : + base(new Type[3] { typeof(CombatObject), typeof(List), typeof(SafeType) }, new object[] { null, new List(), new SafeType(typeof(CombatObject)) }, typeof(CombatObject)) + { + name = "Closest Object to:"; + //if (filter != null) + // this.filter = filter; //because I cant do Type filter = typeof() in the constuctor perameters. + //else + // this.filter = typeof(CombatObject); + } + + public override void calc(CombatObject comObj) + { + base.calc(comObj); + List comObjects = (List)inputs[1]; + CombatObject thisObj = (CombatObject)inputs[0]; + filter = inputs[2].GetType(); + Fix16 distance = Fix16.MaxValue; + + + if (comObjects != null && comObjects.Count > 0) + { + CombatObject closest = comObjects[0]; + foreach (CombatObject othercomObj in comObjects) + { + Fix16 thisdist = NewtMath.f16.NMath.distance(thisObj.cmbt_loc, othercomObj.cmbt_loc); + if (filter.IsAssignableFrom(closest.GetType()) && thisdist < distance) + { + distance = thisdist; + closest = othercomObj; + } + } + output = closest; + } + } + } + + public class StrategyWeapons : StrategyBaseBlock + { + Type filter = typeof(CombatWeapon); + + //public StrategyWeapons(CombatObject fromObj, Type filter = null) : + public StrategyWeapons() : + base(new Type[2] { typeof(CombatObject), typeof(CombatWeapon) }, new object[] { null, null }, typeof(List)) + { + name = "List of Weapons"; + //if (filter != null) + //{ + // this.filter = filter; //because I cant do Type filter = typeof() in the constuctor perameters. + //} + } + + public override void calc(CombatObject comObj) + { + base.calc(comObj); + + CombatControlledObject ccobj = (CombatControlledObject)comObj; + List comWpn = ccobj.Weapons.ToList(); + + } + } + + public class Strategyinput_fix16 : StrategyBaseBlock + { + public Fix16 inputnum { get; set; } + public Strategyinput_fix16() + : base(new Type[1] { typeof(Fix16) }, new object[] {null}, typeof(Fix16)) + { + name = "Input"; + inputnum = 0; + } + + public override void calc(CombatObject comObj) + { + //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. + output = inputnum; + } + } + + public class Strategyinput_Types : StrategyBaseBlock + { + public SafeType inputtype { get; set; } + public Strategyinput_Types() + : base(new Type[1] { typeof(SafeType) }, new object[] { (SafeType)typeof(CombatControlledObject) }, typeof(SafeType)) + { + name = "Type"; + inputtype = typeof(CombatControlledObject); + } + + public override void calc(CombatObject comObj) + { + //base.calc(comObj); dont need this, should be at the top of the chain - no inputs. + output = inputtype; + } + } + + public class StrategyFilter_shieldhitpoints : StrategyBaseBlock + { + /// + /// input[0] = list of objects to filter + /// input[1] = Fix16 min + /// input[2] = Fix16 max + /// + public StrategyFilter_shieldhitpoints() + : base(new Type[3] { typeof(List), typeof(Fix16), typeof(Fix16) }, new object[3] { null, 0, Fix16.MaxValue }, typeof(List)) + { + name = "Filter"; + + } + + public override void calc(CombatObject comObj) + { + base.calc(comObj); //get inputs + List comObjects = (List)inputs[0]; + + Fix16 min = (Fix16)inputs[1]; + Fix16 max = (Fix16)inputs[2]; + List filteredObjects = new List(); + foreach (CombatObject loopcomobj in comObjects) + { + Fix16 checkitem = loopcomobj.WorkingObject.ShieldHitpoints; + if (checkitem > min && checkitem < max) + filteredObjects.Add(loopcomobj); + } + output = filteredObjects; + } + } + + public class StrategyFilter_HullSize : StrategyBaseBlock + { + /// + ///input[0] = list of objects to filter + ///input[1] = Fix16 min + ///input[2] = Fix16 max + /// + public StrategyFilter_HullSize() + : base(new Type[3] { typeof(List), typeof(Fix16), typeof(Fix16) }, new object[3] { null, 0, Fix16.MaxValue }, typeof(List)) + { + name = "Filter Hull Size"; + + } + + public override void calc(CombatObject comObj) + { + base.calc(comObj); //get inputs + List comObjects = (List)inputs[0]; + Fix16 min = (Fix16)inputs[1]; + Fix16 max = (Fix16)inputs[2]; + List filteredObjects = new List(); + foreach (CombatObject comobj in comObjects) + { + if (comobj.cmbt_mass > min && comobj.cmbt_mass < max) + filteredObjects.Add(comobj); + } + output = filteredObjects; + } + } + + public class StrategyWeaponMaxRange : StrategyBaseBlock + { + public StrategyWeaponMaxRange() + : base(new Type[1] { typeof(List) }, new object[] { null }, typeof(Fix16)) + { + + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + Fix16 rangecurrent = 0; + List weapons = inputs[0] as List; + foreach (CombatWeapon wpn in weapons) + { + + } + } + } + + public class StrategyFormate : StrategyBaseBlock + { + public StrategyFormate() + : base(new Type[3] { typeof(CombatObject), typeof(Fix16), typeof(Compass) }, new object[] { null }, typeof(PointXd)) + { + name = "Formate"; + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + CombatObject formateObj = (CombatObject)inputs[0]; + Fix16 range = (Fix16)inputs[1]; + Compass angle = (Compass)inputs[2]; + //angle.Degrees += formateObj.cmbt_head.Degrees; + PointXd formatePoint = Trig.sides_ab(range, angle.Radians); + formatePoint += formateObj.cmbt_loc; + output = formatePoint; + } + } + + public class StrategyVelAngle : StrategyBaseBlock + { + /// + /// outputs an angle of the target objects velocity vector. + /// + public StrategyVelAngle() + : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(Compass)) + { + name = "VelocityAngle"; + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + CombatObject targetObj = (CombatObject)inputs[0]; + Compass angle = new Compass(Trig.angleA(targetObj.cmbt_vel)); + output = angle; + } + } + + public class StrategyHeading : StrategyBaseBlock + { + /// + /// outputs an angle of the target objects heading. + /// + public StrategyHeading() + : base(new Type[1] { typeof(CombatObject) }, new object[] { null }, typeof(Compass)) + { + name = "Heading"; + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + CombatObject targetObj = (CombatObject)inputs[0]; + Compass angle = new Compass(targetObj.cmbt_head.Degrees, false); + output = angle; + } + } + + public class StrategyAdd_Compass : StrategyBaseBlock + { + public StrategyAdd_Compass() + : base(new Type[2] { typeof(Compass), typeof(Compass) }, new object[] { null, null }, typeof(Compass)) + { + name = "Add Compass"; + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + Compass c1 = (Compass)inputs[0]; + Compass c2 = (Compass)inputs[1]; + output = c1 + c2; + } + } + + public class StrategyAdd_angletocompass : StrategyBaseBlock + { + public StrategyAdd_angletocompass() + : base(new Type[2] { typeof(Compass), typeof(Fix16) }, new object[] { null, null }, typeof(Compass)) + { + name = "Add Angle"; + } + public override void calc(CombatObject comObj) + { + base.calc(comObj); + Compass c1 = (Compass)inputs[0]; + Fix16 c2 = (Fix16)inputs[1]; + output = c1.Degrees + c2; + } + } + +} diff --git a/FrEee/Game/Objects/Combat2/StrategyObject.cs b/FrEee/Objects/Combat2/StrategyObject.cs similarity index 97% rename from FrEee/Game/Objects/Combat2/StrategyObject.cs rename to FrEee/Objects/Combat2/StrategyObject.cs index 45ca20e22..b04864176 100644 --- a/FrEee/Game/Objects/Combat2/StrategyObject.cs +++ b/FrEee/Objects/Combat2/StrategyObject.cs @@ -1,196 +1,196 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using NewtMath.f16; -using FixMath.NET; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Technology; - -namespace FrEee.Game.Objects.Combat2 -{ - // TODO - rename to CombatStrategy? - public class StrategyObject : IPromotable, IFoggable - { - public StrategyBaseBlock waypointObj { get; protected set; } - public StrategyBaseBlock[] targetObjs { get; protected set; } - public StrategyBaseBlock[] blocks { get; set; } - - // TODO - weapons lists can't be combat weapons for a strategy, because strategies are shared between ships, and combat weapons belong to a single ship - // maybe we need some sort of indexing, like "large mount depleted uranium cannon #1", a la Vectac? - // or we could simplify a bit and assign weapons based on their template, so you have to assign ALL of your "large mount depleted uranium cannon"'s to the same firing group? - public List> weaponslists { get; set; } - - public StrategyObject() - { } - public StrategyObject(string name, StrategyBaseBlock waypointstratObj, StrategyBaseBlock[] targetstratObjs) - { - this.waypointObj = waypointstratObj; - this.targetObjs = targetstratObjs; - this.Name = name; - } - - public string Name { get; set; } - - public void renewtostart() - { - waypointObj.zeroize(); - foreach (StrategyBaseBlock tgtblok in targetObjs) - tgtblok.zeroize(); - } - - public CombatWaypoint calcWaypiont(CombatObject comObj) - { - CombatWaypoint wp = (CombatWaypoint)waypointObj.getNewOutput(comObj); - return wp; - } - - public CombatObject calcTarget(CombatObject comObj) - { - CombatObject tgt = (CombatObject)targetObjs[0].getNewOutput(comObj); - return tgt; - } - public int numberOfTargetStrategies() - { - return this.targetObjs.Count(); - } - - /// - /// - /// - /// this comObj - /// the weapongroup index - /// - public CombatObject targetforgroup(CombatObject comObj, int index) - { - return (CombatObject)targetObjs[index].getOutput(comObj); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // Strategies don't reference other client-side promotable objects, so nothing to do here. - // Well there are the strategy blocks, but those aren't actually referrables to begin with... - } - - public long ID - { - get; - set; - } - - public bool IsDisposed - { - get; - set; - } - - public void Dispose() - { - if (IsDisposed) - return; - Galaxy.Current.UnassignID(this); - IsDisposed = true; - } - - public Empire Owner - { - get; - set; - } - - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Owned; - else - { - var designsUsingThis = Galaxy.Current.Referrables.OfType().Where(d => d.Strategy == this && d.CheckVisibility(emp) >= Visibility.Scanned); - if (!designsUsingThis.Any()) - return Visibility.Unknown; - var vehiclesUsingThis = Galaxy.Current.Referrables.OfType().Join(designsUsingThis, v => v.Design, d => d, (v, d) => v).Where(v => v.CheckVisibility(emp) >= Visibility.Scanned); - if (!vehiclesUsingThis.Any()) - return Visibility.Unknown; // other player might have changed strategy of design - return Visibility.Scanned; - } - } - - public void Redact(Empire emp) - { - var vis = CheckVisibility(emp); - if (vis < Visibility.Fogged) - Dispose(); - } - - public bool IsMemory - { - get; - set; - } - - public double Timestamp - { - get; - set; - } - - public bool IsObsoleteMemory(Empire emp) - { - // TODO - should strategies ever be obsolete memories? - return false; - } - - /// - /// Zeroizes all blocks in this strategy. - /// - public void Zeroize() - { - // TODO - only zeroize root blocks? or leaf blocks? how does this work? I know it's recursive somehow... - foreach (var block in blocks) - block.zeroize(); - } - } - - public class StragegyObject_Default : StrategyObject - { - public StragegyObject_Default() - : base() - { - StrategyWayPoint wpnt = new StrategyWayPoint(); - StrategyClosest closest1 = new StrategyClosest();//(null, null); - StrategyThisObj thisobj = new StrategyThisObj(); - StrategyThisEnemys thisobjEnemys = new StrategyThisEnemys(); - StrategyLocdata enloc = new StrategyLocdata(); - StrategyVeldata envel = new StrategyVeldata(); - Strategyinput_Types type = new Strategyinput_Types(); - wpnt.inputLnks[0] = enloc; - wpnt.inputLnks[1] = envel; - - closest1.inputLnks[0] = thisobj; - closest1.inputLnks[1] = thisobjEnemys; - closest1.inputLnks[2] = type; - closest1.outputLnks.Add(enloc); - closest1.outputLnks.Add(envel); - - enloc.inputLnks[0] = closest1; - enloc.outputLnks.Add(wpnt); - - envel.inputLnks[0] = closest1; - envel.outputLnks.Add(wpnt); - - waypointObj = wpnt; - blocks = new StrategyBaseBlock[3] { closest1, enloc, envel }; - - targetObjs = new StrategyBaseBlock[1] { closest1 }; - - weaponslists = new List>(); - Dictionary wpnsinFC0 = new Dictionary(); - for(int i = 0; i < 10; i++) - wpnsinFC0.Add(i, null); - - weaponslists.Add(wpnsinFC0); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NewtMath.f16; +using FixMath.NET; +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Space; +using FrEee.Game.Objects.Civilization; +using FrEee.Game.Enumerations; +using FrEee.Game.Objects.Technology; + +namespace FrEee.Game.Objects.Combat2 +{ + // TODO - rename to CombatStrategy? + public class StrategyObject : IPromotable, IFoggable + { + public StrategyBaseBlock waypointObj { get; protected set; } + public StrategyBaseBlock[] targetObjs { get; protected set; } + public StrategyBaseBlock[] blocks { get; set; } + + // TODO - weapons lists can't be combat weapons for a strategy, because strategies are shared between ships, and combat weapons belong to a single ship + // maybe we need some sort of indexing, like "large mount depleted uranium cannon #1", a la Vectac? + // or we could simplify a bit and assign weapons based on their template, so you have to assign ALL of your "large mount depleted uranium cannon"'s to the same firing group? + public List> weaponslists { get; set; } + + public StrategyObject() + { } + public StrategyObject(string name, StrategyBaseBlock waypointstratObj, StrategyBaseBlock[] targetstratObjs) + { + this.waypointObj = waypointstratObj; + this.targetObjs = targetstratObjs; + this.Name = name; + } + + public string Name { get; set; } + + public void renewtostart() + { + waypointObj.zeroize(); + foreach (StrategyBaseBlock tgtblok in targetObjs) + tgtblok.zeroize(); + } + + public CombatWaypoint calcWaypiont(CombatObject comObj) + { + CombatWaypoint wp = (CombatWaypoint)waypointObj.getNewOutput(comObj); + return wp; + } + + public CombatObject calcTarget(CombatObject comObj) + { + CombatObject tgt = (CombatObject)targetObjs[0].getNewOutput(comObj); + return tgt; + } + public int numberOfTargetStrategies() + { + return this.targetObjs.Count(); + } + + /// + /// + /// + /// this comObj + /// the weapongroup index + /// + public CombatObject targetforgroup(CombatObject comObj, int index) + { + return (CombatObject)targetObjs[index].getOutput(comObj); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // Strategies don't reference other client-side promotable objects, so nothing to do here. + // Well there are the strategy blocks, but those aren't actually referrables to begin with... + } + + public long ID + { + get; + set; + } + + public bool IsDisposed + { + get; + set; + } + + public void Dispose() + { + if (IsDisposed) + return; + Galaxy.Current.UnassignID(this); + IsDisposed = true; + } + + public Empire Owner + { + get; + set; + } + + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Owned; + else + { + var designsUsingThis = Galaxy.Current.Referrables.OfType().Where(d => d.Strategy == this && d.CheckVisibility(emp) >= Visibility.Scanned); + if (!designsUsingThis.Any()) + return Visibility.Unknown; + var vehiclesUsingThis = Galaxy.Current.Referrables.OfType().Join(designsUsingThis, v => v.Design, d => d, (v, d) => v).Where(v => v.CheckVisibility(emp) >= Visibility.Scanned); + if (!vehiclesUsingThis.Any()) + return Visibility.Unknown; // other player might have changed strategy of design + return Visibility.Scanned; + } + } + + public void Redact(Empire emp) + { + var vis = CheckVisibility(emp); + if (vis < Visibility.Fogged) + Dispose(); + } + + public bool IsMemory + { + get; + set; + } + + public double Timestamp + { + get; + set; + } + + public bool IsObsoleteMemory(Empire emp) + { + // TODO - should strategies ever be obsolete memories? + return false; + } + + /// + /// Zeroizes all blocks in this strategy. + /// + public void Zeroize() + { + // TODO - only zeroize root blocks? or leaf blocks? how does this work? I know it's recursive somehow... + foreach (var block in blocks) + block.zeroize(); + } + } + + public class StragegyObject_Default : StrategyObject + { + public StragegyObject_Default() + : base() + { + StrategyWayPoint wpnt = new StrategyWayPoint(); + StrategyClosest closest1 = new StrategyClosest();//(null, null); + StrategyThisObj thisobj = new StrategyThisObj(); + StrategyThisEnemys thisobjEnemys = new StrategyThisEnemys(); + StrategyLocdata enloc = new StrategyLocdata(); + StrategyVeldata envel = new StrategyVeldata(); + Strategyinput_Types type = new Strategyinput_Types(); + wpnt.inputLnks[0] = enloc; + wpnt.inputLnks[1] = envel; + + closest1.inputLnks[0] = thisobj; + closest1.inputLnks[1] = thisobjEnemys; + closest1.inputLnks[2] = type; + closest1.outputLnks.Add(enloc); + closest1.outputLnks.Add(envel); + + enloc.inputLnks[0] = closest1; + enloc.outputLnks.Add(wpnt); + + envel.inputLnks[0] = closest1; + envel.outputLnks.Add(wpnt); + + waypointObj = wpnt; + blocks = new StrategyBaseBlock[3] { closest1, enloc, envel }; + + targetObjs = new StrategyBaseBlock[1] { closest1 }; + + weaponslists = new List>(); + Dictionary wpnsinFC0 = new Dictionary(); + for(int i = 0; i < 10; i++) + wpnsinFC0.Add(i, null); + + weaponslists.Add(wpnsinFC0); + } + } +} diff --git a/FrEee/Game/Objects/Combat2/Tactics/Tactic.cs b/FrEee/Objects/Combat2/Tactics/Tactic.cs similarity index 96% rename from FrEee/Game/Objects/Combat2/Tactics/Tactic.cs rename to FrEee/Objects/Combat2/Tactics/Tactic.cs index 9adbaa6a9..370bb9dec 100644 --- a/FrEee/Game/Objects/Combat2/Tactics/Tactic.cs +++ b/FrEee/Objects/Combat2/Tactics/Tactic.cs @@ -1,105 +1,105 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Utility; - -namespace FrEee.Game.Objects.Combat2.Tactics -{ - /// - /// A combat tactic used by a space object. - /// - /// - /// A tactic is actually a special kind of tactic block with specific inputs and outputs. - /// - public class Tactic : TacticBlock, IPromotable, IOwnable, IReferrable, IFoggable - { - public Tactic(Empire owner) - : base(null, "Tactic") - { - Owner = owner; - Inputs["combatant"] = new TacticObjectInput(this, typeof(ICombatant)); // combatant executing the tactic - Inputs["combatants"] = new TacticObjectInput(this, typeof(IEnumerable)); // all combatants in battle - Outputs["waypoint"] = new TacticConnectionOutput(this, true, typeof(CombatWaypoint)); // location and speed to match - Outputs["targets"] = new TacticConnectionOutput(this, false, typeof(IEnumerable)); // targets for each weapon group in order - WeaponGroups = new SafeDictionary(); - } - - public Visibility CheckVisibility(Empire emp) - { - if (Owner == emp) - return Visibility.Owned; - - // unowned tactics are as visible as their most visible design using them - var designs = Galaxy.Current.Referrables.OfType().Where(d => d.Tactic == this); - return designs.Max(d => d.CheckVisibility(emp)); - } - - /// - /// Weapon groups assigned to this tactic. - /// Default weapon group is group zero. - /// A design will only use as many weapon groups as it has Multiplex Tracking ability (but a minimum of one group, and point defense and warhead weapons don't count against the total). - /// - public SafeDictionary WeaponGroups { get; private set; } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // nothing to do - } - - public Empire Owner - { - get; - private set; - } - - public long ID - { - get; - set; - } - - public bool IsDisposed - { - get; - set; - } - - public void Dispose() - { - if (!IsDisposed) - { - IsDisposed = true; - Galaxy.Current.UnassignID(this); - } - } - - public void Redact(Empire emp) - { - if (CheckVisibility(emp) < Visibility.Fogged) - Dispose(); - } - - public bool IsMemory - { - get; - set; - } - - public double Timestamp - { - get; - set; - } - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FrEee.Game.Enumerations; +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Civilization; +using FrEee.Game.Objects.Space; +using FrEee.Game.Objects.Technology; +using FrEee.Utility; + +namespace FrEee.Game.Objects.Combat2.Tactics +{ + /// + /// A combat tactic used by a space object. + /// + /// + /// A tactic is actually a special kind of tactic block with specific inputs and outputs. + /// + public class Tactic : TacticBlock, IPromotable, IOwnable, IReferrable, IFoggable + { + public Tactic(Empire owner) + : base(null, "Tactic") + { + Owner = owner; + Inputs["combatant"] = new TacticObjectInput(this, typeof(ICombatant)); // combatant executing the tactic + Inputs["combatants"] = new TacticObjectInput(this, typeof(IEnumerable)); // all combatants in battle + Outputs["waypoint"] = new TacticConnectionOutput(this, true, typeof(CombatWaypoint)); // location and speed to match + Outputs["targets"] = new TacticConnectionOutput(this, false, typeof(IEnumerable)); // targets for each weapon group in order + WeaponGroups = new SafeDictionary(); + } + + public Visibility CheckVisibility(Empire emp) + { + if (Owner == emp) + return Visibility.Owned; + + // unowned tactics are as visible as their most visible design using them + var designs = Galaxy.Current.Referrables.OfType().Where(d => d.Tactic == this); + return designs.Max(d => d.CheckVisibility(emp)); + } + + /// + /// Weapon groups assigned to this tactic. + /// Default weapon group is group zero. + /// A design will only use as many weapon groups as it has Multiplex Tracking ability (but a minimum of one group, and point defense and warhead weapons don't count against the total). + /// + public SafeDictionary WeaponGroups { get; private set; } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // nothing to do + } + + public Empire Owner + { + get; + private set; + } + + public long ID + { + get; + set; + } + + public bool IsDisposed + { + get; + set; + } + + public void Dispose() + { + if (!IsDisposed) + { + IsDisposed = true; + Galaxy.Current.UnassignID(this); + } + } + + public void Redact(Empire emp) + { + if (CheckVisibility(emp) < Visibility.Fogged) + Dispose(); + } + + public bool IsMemory + { + get; + set; + } + + public double Timestamp + { + get; + set; + } + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + } +} diff --git a/FrEee/Game/Objects/Combat2/Tactics/TacticBlock.cs b/FrEee/Objects/Combat2/Tactics/TacticBlock.cs similarity index 96% rename from FrEee/Game/Objects/Combat2/Tactics/TacticBlock.cs rename to FrEee/Objects/Combat2/Tactics/TacticBlock.cs index d526ff0ae..c21fc1077 100644 --- a/FrEee/Game/Objects/Combat2/Tactics/TacticBlock.cs +++ b/FrEee/Objects/Combat2/Tactics/TacticBlock.cs @@ -1,113 +1,113 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Text; -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; - -namespace FrEee.Game.Objects.Combat2.Tactics -{ - /// - /// A logic block used in combat tactics. - /// - /// - /// - public abstract class TacticBlock : IErrorProne - { - protected TacticBlock(TacticBlock parent, string defaultName, string customName = null) - { - DefaultName = defaultName; - CustomName = customName; - Parent = parent; - Children = new ObservableCollection(); - Children.CollectionChanged += Children_CollectionChanged; - Inputs = new SafeDictionary(); - Outputs = new SafeDictionary(); - } - - /// - /// The default name of this block, based on what kind of block it is. - /// - public string DefaultName { get; private set; } - - /// - /// The custom override name of this block. - /// - public string CustomName { get; set; } - - /// - /// The name of this block. - /// - [DoNotSerialize(false)] - public string Name { get { return CustomName ?? DefaultName; } set { CustomName = value; } } - - private TacticBlock parent; - - /// - /// The block to which this block belongs. - /// - public TacticBlock Parent - { - get - { - return parent; - } - private set - { - if (parent != value) - { - parent.Children.Remove(this); - parent = value; - parent.Children.Add(this); - } - } - } - - /// - /// Any blocks belonging to this block. - /// - public ObservableCollection Children { get; private set; } - - void Children_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) - { - foreach (TacticBlock del in e.OldItems) - del.Parent = null; - foreach (TacticBlock add in e.NewItems) - add.Parent = this; - } - - /// - /// Inputs to this tactic block. - /// - public SafeDictionary Inputs { get; private set; } - - /// - /// Outputs to this tactic block. - /// - public SafeDictionary Outputs { get; private set; } - - public virtual IEnumerable Errors - { - get - { - foreach (var i in Inputs) - { - foreach (var e in i.Value.Errors) - { - yield return Name + "'s " + i.Key + " input: " + e; - } - } - foreach (var o in Outputs) - { - foreach (var e in o.Value.Errors) - { - yield return Name + "'s " + o.Key + " output: " + e; - } - } - } - } - } -} +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Text; +using FrEee.Game.Enumerations; +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Civilization; +using FrEee.Utility; + +namespace FrEee.Game.Objects.Combat2.Tactics +{ + /// + /// A logic block used in combat tactics. + /// + /// + /// + public abstract class TacticBlock : IErrorProne + { + protected TacticBlock(TacticBlock parent, string defaultName, string customName = null) + { + DefaultName = defaultName; + CustomName = customName; + Parent = parent; + Children = new ObservableCollection(); + Children.CollectionChanged += Children_CollectionChanged; + Inputs = new SafeDictionary(); + Outputs = new SafeDictionary(); + } + + /// + /// The default name of this block, based on what kind of block it is. + /// + public string DefaultName { get; private set; } + + /// + /// The custom override name of this block. + /// + public string CustomName { get; set; } + + /// + /// The name of this block. + /// + [DoNotSerialize(false)] + public string Name { get { return CustomName ?? DefaultName; } set { CustomName = value; } } + + private TacticBlock parent; + + /// + /// The block to which this block belongs. + /// + public TacticBlock Parent + { + get + { + return parent; + } + private set + { + if (parent != value) + { + parent.Children.Remove(this); + parent = value; + parent.Children.Add(this); + } + } + } + + /// + /// Any blocks belonging to this block. + /// + public ObservableCollection Children { get; private set; } + + void Children_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) + { + foreach (TacticBlock del in e.OldItems) + del.Parent = null; + foreach (TacticBlock add in e.NewItems) + add.Parent = this; + } + + /// + /// Inputs to this tactic block. + /// + public SafeDictionary Inputs { get; private set; } + + /// + /// Outputs to this tactic block. + /// + public SafeDictionary Outputs { get; private set; } + + public virtual IEnumerable Errors + { + get + { + foreach (var i in Inputs) + { + foreach (var e in i.Value.Errors) + { + yield return Name + "'s " + i.Key + " input: " + e; + } + } + foreach (var o in Outputs) + { + foreach (var e in o.Value.Errors) + { + yield return Name + "'s " + o.Key + " output: " + e; + } + } + } + } + } +} diff --git a/FrEee/Game/Objects/Combat2/Tactics/TacticNode.cs b/FrEee/Objects/Combat2/Tactics/TacticNode.cs similarity index 95% rename from FrEee/Game/Objects/Combat2/Tactics/TacticNode.cs rename to FrEee/Objects/Combat2/Tactics/TacticNode.cs index 901bf48eb..45544ce96 100644 --- a/FrEee/Game/Objects/Combat2/Tactics/TacticNode.cs +++ b/FrEee/Objects/Combat2/Tactics/TacticNode.cs @@ -1,292 +1,292 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Combat2.Tactics -{ - /// - /// An input or output node of a tactic block. - /// - public interface ITacticNode : IErrorProne - { - /// - /// The value of the node. - /// - object Value { get; } - - /// - /// The desired data type of the node. - /// - Type Type { get; } - } - - /// - /// An input node providing data to a tactic block. - /// - public abstract class TacticInput : ITacticNode - { - public TacticInput(TacticBlock block, Type type = null, TacticOutput connection = null) - { - Block = block; - Type = type ?? typeof(object); - ConnectedOutput = connection; - } - - public TacticBlock Block { get; private set; } - - public Type Type { get; private set; } - - private TacticOutput connectedOutput; - - public TacticOutput ConnectedOutput - { - get - { - return connectedOutput; - } - set - { - CheckType(value.Type); - connectedOutput = value; - } - } - - public abstract object Value { get; } - - private void CheckType(object val) - { - if (Type.IsValueType && val == null) - throw new Exception("Cannot set value of null to " + Type + "."); - if (val != null) - CheckType(val.GetType()); - } - - private void CheckType(Type type) - { - if (!Type.IsAssignableFrom(type)) - throw new Exception("Cannot set object of type " + type + " to " + Type + "."); - } - - public virtual IEnumerable Errors - { - get - { - if (!Type.IsAssignableFrom(ConnectedOutput.Type)) - yield return "Cannot connect output of type {0} to input of type {1}.".F(ConnectedOutput.Type, Type); - } - } - } - - /// - /// A tactic input which uses a formula for its default value. - /// - public class TacticFormulaInput : TacticInput - { - public TacticFormulaInput(TacticBlock block, Type type = null, IFormula defaultValue = null, TacticOutput connection = null) - : base(block, type, connection) - { - DefaultValue = defaultValue; - } - - public IFormula DefaultValue { get; private set; } - - public override object Value - { - get - { - if (ConnectedOutput == null) - return DefaultValue.Value; - else - return ConnectedOutput.Value; - } - } - - // TODO - check if formula compiles? - } - - /// - /// A tactic input which just uses an object for its default value. - /// - public class TacticObjectInput : TacticInput - { - public TacticObjectInput(TacticBlock block, Type type = null, object defaultValue = null, TacticOutput connection = null) - : base(block, type, connection) - { - DefaultValue = defaultValue; - } - - public object DefaultValue { get; private set; } - - public override object Value - { - get - { - if (ConnectedOutput == null) - return DefaultValue; - return ConnectedOutput.Value; - } - } - } - - /// - /// An output node of a tactic block, providing data to other blocks or to the game itself. - /// - public abstract class TacticOutput : ITacticNode - { - public TacticOutput(TacticBlock block, Type type = null) - { - Block = block; - Type = type ?? typeof(object); - } - - public TacticBlock Block { get; private set; } - - public Type Type { get; private set; } - - public IEnumerable ConnectedInputs - { - get - { - return Block.Parent.Children.SelectMany(b => b.Inputs).Select(kvp => kvp.Value).Where(ti => ti.ConnectedOutput == this); - } - } - - public abstract object Value { get; } - - public virtual IEnumerable Errors - { - get { yield break; } - } - } - - /// - /// A tactic output which commputes a value based on a formula using the block's inputs as variables. - /// - public class TacticFormulaOutput : TacticOutput - { - public TacticFormulaOutput(TacticBlock block, Type type = null, IFormula formula = null) - : base(block, type) - { - Formula = formula; - } - - /// - /// The formula to use to compute the output value based on the inputs. - /// - public IFormula Formula { get; set; } - - public override object Value - { - get - { - var variables = new SafeDictionary(); - foreach (var input in Block.Inputs) - variables.Add(input.Key, input.Value.Value); - return Formula.Evaluate(variables); - } - } - - // TODO - check if formula compiles? - } - - /// - /// A tactic output which selects a property value from an input. - /// - public class TacticPropertyOutput : TacticOutput - { - public TacticPropertyOutput(TacticBlock block, string inputName, string propertyName, Type type = null) - : base(block, type) - { - InputName = inputName; - PropertyName = propertyName; - } - - /// - /// The name of the input to select the property value from. - /// - public string InputName { get; set; } - - /// - /// The name of the property to select. - /// - public string PropertyName { get; set; } - - public override object Value - { - get - { - var inputObj = Block.Inputs[InputName].Value; - return inputObj.GetPropertyValue(PropertyName); - } - } - - public override IEnumerable Errors - { - get - { - foreach (var e in base.Errors) - yield return e; - - if (Block.Inputs[InputName] == null) - { - yield return "Block {0} has no input named {1}.".F(Block.Name, InputName); - yield break; - } - if (!Block.Inputs[InputName].Type.GetProperties().Any(p => p.Name == PropertyName)) - { - yield return "Type {0} has no property named {1}.".F(Block.Inputs[InputName].Type, PropertyName); - yield break; - } - if (!Block.Inputs[InputName].Type.GetProperties().Any(p => p.Name == PropertyName && Type.IsAssignableFrom(p.PropertyType))) - { - yield return "Type {0}'s {1} property is not compatible with output type {3}.".F(Block.Inputs[InputName].Type, PropertyName, Type); - yield break; - } - } - } - } - - /// - /// A tactic output which accepts a connection from another tactic node within the same block. - /// Either an input node, or an output node of a sub-block. - /// - public class TacticConnectionOutput : TacticOutput - { - public TacticConnectionOutput(TacticBlock block, bool mandatory, Type type = null, ITacticNode connectedNode = null) - : base(block, type) - { - } - - public ITacticNode ConnectedNode { get; set; } - - /// - /// Needs to be connected? - /// - public bool IsMandatory { get; set; } - - public override object Value - { - get { return ConnectedNode.Value; } - } - - public override IEnumerable Errors - { - get - { - foreach (var e in base.Errors) - yield return e; - - if (IsMandatory && ConnectedNode == null) - yield return "Output is not connected."; - } - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FrEee.Game.Enumerations; +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Civilization; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; +using FrEee.Utility.Extensions; + +namespace FrEee.Game.Objects.Combat2.Tactics +{ + /// + /// An input or output node of a tactic block. + /// + public interface ITacticNode : IErrorProne + { + /// + /// The value of the node. + /// + object Value { get; } + + /// + /// The desired data type of the node. + /// + Type Type { get; } + } + + /// + /// An input node providing data to a tactic block. + /// + public abstract class TacticInput : ITacticNode + { + public TacticInput(TacticBlock block, Type type = null, TacticOutput connection = null) + { + Block = block; + Type = type ?? typeof(object); + ConnectedOutput = connection; + } + + public TacticBlock Block { get; private set; } + + public Type Type { get; private set; } + + private TacticOutput connectedOutput; + + public TacticOutput ConnectedOutput + { + get + { + return connectedOutput; + } + set + { + CheckType(value.Type); + connectedOutput = value; + } + } + + public abstract object Value { get; } + + private void CheckType(object val) + { + if (Type.IsValueType && val == null) + throw new Exception("Cannot set value of null to " + Type + "."); + if (val != null) + CheckType(val.GetType()); + } + + private void CheckType(Type type) + { + if (!Type.IsAssignableFrom(type)) + throw new Exception("Cannot set object of type " + type + " to " + Type + "."); + } + + public virtual IEnumerable Errors + { + get + { + if (!Type.IsAssignableFrom(ConnectedOutput.Type)) + yield return "Cannot connect output of type {0} to input of type {1}.".F(ConnectedOutput.Type, Type); + } + } + } + + /// + /// A tactic input which uses a formula for its default value. + /// + public class TacticFormulaInput : TacticInput + { + public TacticFormulaInput(TacticBlock block, Type type = null, IFormula defaultValue = null, TacticOutput connection = null) + : base(block, type, connection) + { + DefaultValue = defaultValue; + } + + public IFormula DefaultValue { get; private set; } + + public override object Value + { + get + { + if (ConnectedOutput == null) + return DefaultValue.Value; + else + return ConnectedOutput.Value; + } + } + + // TODO - check if formula compiles? + } + + /// + /// A tactic input which just uses an object for its default value. + /// + public class TacticObjectInput : TacticInput + { + public TacticObjectInput(TacticBlock block, Type type = null, object defaultValue = null, TacticOutput connection = null) + : base(block, type, connection) + { + DefaultValue = defaultValue; + } + + public object DefaultValue { get; private set; } + + public override object Value + { + get + { + if (ConnectedOutput == null) + return DefaultValue; + return ConnectedOutput.Value; + } + } + } + + /// + /// An output node of a tactic block, providing data to other blocks or to the game itself. + /// + public abstract class TacticOutput : ITacticNode + { + public TacticOutput(TacticBlock block, Type type = null) + { + Block = block; + Type = type ?? typeof(object); + } + + public TacticBlock Block { get; private set; } + + public Type Type { get; private set; } + + public IEnumerable ConnectedInputs + { + get + { + return Block.Parent.Children.SelectMany(b => b.Inputs).Select(kvp => kvp.Value).Where(ti => ti.ConnectedOutput == this); + } + } + + public abstract object Value { get; } + + public virtual IEnumerable Errors + { + get { yield break; } + } + } + + /// + /// A tactic output which commputes a value based on a formula using the block's inputs as variables. + /// + public class TacticFormulaOutput : TacticOutput + { + public TacticFormulaOutput(TacticBlock block, Type type = null, IFormula formula = null) + : base(block, type) + { + Formula = formula; + } + + /// + /// The formula to use to compute the output value based on the inputs. + /// + public IFormula Formula { get; set; } + + public override object Value + { + get + { + var variables = new SafeDictionary(); + foreach (var input in Block.Inputs) + variables.Add(input.Key, input.Value.Value); + return Formula.Evaluate(variables); + } + } + + // TODO - check if formula compiles? + } + + /// + /// A tactic output which selects a property value from an input. + /// + public class TacticPropertyOutput : TacticOutput + { + public TacticPropertyOutput(TacticBlock block, string inputName, string propertyName, Type type = null) + : base(block, type) + { + InputName = inputName; + PropertyName = propertyName; + } + + /// + /// The name of the input to select the property value from. + /// + public string InputName { get; set; } + + /// + /// The name of the property to select. + /// + public string PropertyName { get; set; } + + public override object Value + { + get + { + var inputObj = Block.Inputs[InputName].Value; + return inputObj.GetPropertyValue(PropertyName); + } + } + + public override IEnumerable Errors + { + get + { + foreach (var e in base.Errors) + yield return e; + + if (Block.Inputs[InputName] == null) + { + yield return "Block {0} has no input named {1}.".F(Block.Name, InputName); + yield break; + } + if (!Block.Inputs[InputName].Type.GetProperties().Any(p => p.Name == PropertyName)) + { + yield return "Type {0} has no property named {1}.".F(Block.Inputs[InputName].Type, PropertyName); + yield break; + } + if (!Block.Inputs[InputName].Type.GetProperties().Any(p => p.Name == PropertyName && Type.IsAssignableFrom(p.PropertyType))) + { + yield return "Type {0}'s {1} property is not compatible with output type {3}.".F(Block.Inputs[InputName].Type, PropertyName, Type); + yield break; + } + } + } + } + + /// + /// A tactic output which accepts a connection from another tactic node within the same block. + /// Either an input node, or an output node of a sub-block. + /// + public class TacticConnectionOutput : TacticOutput + { + public TacticConnectionOutput(TacticBlock block, bool mandatory, Type type = null, ITacticNode connectedNode = null) + : base(block, type) + { + } + + public ITacticNode ConnectedNode { get; set; } + + /// + /// Needs to be connected? + /// + public bool IsMandatory { get; set; } + + public override object Value + { + get { return ConnectedNode.Value; } + } + + public override IEnumerable Errors + { + get + { + foreach (var e in base.Errors) + yield return e; + + if (IsMandatory && ConnectedNode == null) + yield return "Output is not connected."; + } + } + } +} diff --git a/FrEee/Game/Objects/Combat2/combatObjects.cs b/FrEee/Objects/Combat2/combatObjects.cs similarity index 97% rename from FrEee/Game/Objects/Combat2/combatObjects.cs rename to FrEee/Objects/Combat2/combatObjects.cs index f55ba08e9..d3438c218 100644 --- a/FrEee/Game/Objects/Combat2/combatObjects.cs +++ b/FrEee/Objects/Combat2/combatObjects.cs @@ -1,654 +1,654 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; - -using NewtMath.f16; -using FixMath.NET; -using FrEee.WinForms; - -namespace FrEee.Game.Objects.Combat2 -{ - public class CombatEmpire - { - public List ownships = new List(); - public List friendly = new List(); - public List neutral = new List(); //not currently used. - public List hostile = new List(); - public CombatEmpire() - { - } - public void renewtostart() - { - ownships = new List(); - friendly = new List(); - neutral = new List(); //not currently used. - hostile = new List(); - } - public void removeComObj(CombatObject comObj) - { - ownships.Remove(comObj); - friendly.Remove(comObj); - neutral.Remove(comObj); - hostile.Remove(comObj); - } - //todo add ComObj and check hostility etc. - - // TODO - add ToString() once we have the empire's name - } - - public class CombatFleet - { - - public CombatFleet(Space.Fleet fleet) - { - Fleet = fleet; - Name = fleet.Name; - combatObjects = new List(); - } - public string Name { get; private set; } - public Space.Fleet Fleet { get; set; } - public List combatObjects { get; set; } - - public override string ToString() - { - return Name; - } - } - - public class CombatNode - { - /// - /// for creating bullets and other non AI or acelerating things. used by the renderer to move and display. - /// - /// ship position this is fiired from - /// direction this is going - public CombatNode(PointXd position, PointXd vector, long ID, string IDPrefix) - { - this.cmbt_loc = position; - this.cmbt_vel = vector; - this.cmbt_head = new Compass((Fix16)0); - this.ID = ID; - this.IDPrefix = IDPrefix; - } - /// - /// location within the sector - /// - public PointXd cmbt_loc { get; set; } - - /// - /// m/s combat velocity - /// - public PointXd cmbt_vel { get; set; } - - - /// - /// ship heading - /// - public Compass cmbt_head { get; set; } - - /// - /// the ID of the origional icomatant if a ship. - /// - public long ID { get; set; } - - public string IDPrefix { get; private set; } - - public string strID - { - get - { - return IDPrefix + ID.ToString(); - } - } - - public int deathTick { get; set; } - - public override string ToString() - { - return strID; - } - } - - - public class CombatObject : CombatNode - { - - public CombatObject(ITargetable workingObject, PointXd position, PointXd vector, long ID, string IDprefix) - : base(position, vector, ID, IDprefix) - { - WorkingObject = workingObject; - this.waypointTarget = new CombatWaypoint(); - weaponTarget = new List(1); //eventualy this should be something with the multiplex tracking component. - this.cmbt_thrust = new PointXd(0, 0, 0); - this.cmbt_accel = new PointXd(0, 0, 0); - this.maxRotate = new Compass(0); - } - - #region fields & properties - - /// - /// The object's current state. - /// - public ITargetable WorkingObject - { - get; - protected set; - } - - private PRNG shipDice; - - - /// - /// ship attitude, ie angle from level plain (0/360) pointing straight up (90) - /// - public Compass cmbt_att { get; set; } - - public PointXd cmbt_thrust { get; set; } - - /// - /// in meters per second. - /// - public PointXd cmbt_accel { get; set; } - - - public Fix16 cmbt_mass { get; set; } - - //public PointXd cmbt_maxThrust { get; set; } - //public PointXd cmbt_minThrust { get; set; } - - public CombatEmpire empire { get; set; } - - public StrategyObject strategy { get; set; } - - public CombatWaypoint waypointTarget; - - // TODO - remove this property after the end of the PBW game (it still needs to be in here for deserialization) - private PointXd lastVectortoWaypoint { get; set; } - //public double lastDistancetoWaypoint { get; set; } - - public List weaponTarget { get; set; } - - - /// - /// neutons of thrust - /// - public Fix16 maxfowardThrust { get; set; } - /// - /// neutons of side thrust - /// - public Fix16 maxStrafeThrust { get; set; } - - /// - /// how far this object can rotate each second. - /// - public Compass maxRotate { get; set; } - - - - #endregion - - - #region methods & functions - public PRNG getDice() - { - - return shipDice; - } - public void newDice(int battleseed) - { - int seed = (int)(this.ID % 100000) + battleseed; - shipDice = new PRNG(seed); - } - - public virtual void renewtoStart() - { - this.cmbt_loc = new PointXd(0, 0, 0); - this.cmbt_vel = new PointXd(0, 0, 0); - this.cmbt_head = new Compass(0); - this.cmbt_att = new Compass(0); - this.cmbt_thrust = new PointXd(0, 0, 0); - this.cmbt_accel = new PointXd(0, 0, 0); - strategy.renewtostart(); - waypointTarget = null; - weaponTarget = new List(); - } - - public string debuginfo = ""; - - public void calcWaypoint() - { - this.waypointTarget = this.strategy.calcWaypiont(this); - } - public void calcWpnTarget() - { - this.weaponTarget = new List(){this.strategy.calcTarget(this)}; - } - - public virtual void helm() - { - CombatWaypoint wpt = this.waypointTarget; - Compass angletoWaypoint = new Compass(this.cmbt_loc, this.waypointTarget.cmbt_loc); //relitive to me. - - Tuple nav = Nav(angletoWaypoint); - Compass angletoturn = nav.Item1; - bool? thrustToWaypoint = nav.Item2; - - //PointXd vectortowaypoint = this.cmbt_loc - this.waypointTarget.cmbt_loc; - - Fix16 acceleration = maxfowardThrust * cmbt_mass; - Fix16 startV = NMath.distance(cmbt_vel, wpt.cmbt_vel); - Fix16 distance = NMath.distance(cmbt_loc, wpt.cmbt_loc); // XXX - why is distance between (0,0,0) and (0,1000,0) equal to 181 in Combat_Helm0 test?! - Fix16[] ttt = NMath.quadratic(acceleration, startV, distance); - - turnship(angletoturn, angletoWaypoint); - - thrustship(angletoturn, true); - } - - public Tuple testNav(Compass angletoWaypoint) - { - return Nav(angletoWaypoint); - } - protected virtual Tuple Nav(Compass angletoWaypoint) - { - Compass angletoturn = new Compass(); - bool thrustTowards = true; - - angletoturn.Degrees = angletoWaypoint.Degrees - this.cmbt_head.Degrees; - - return new Tuple(angletoturn, thrustTowards); - } - - - /// - /// for testing. - /// - /// - /// - public void testTurnShip(Compass angletoturn, Compass angleToTarget) - { - turnship(angletoturn, angleToTarget); - } - protected void turnship(Compass angletoturn, Compass angleToTarget) - { - //Compass angletoturn = new Compass(angletoturn.Degrees / Battle_Space.TicksPerSecond, false); - if (angletoturn.Degrees <= (Fix16)180) //turn clockwise - { - if (angletoturn.Degrees > this.maxRotate.Degrees / Battle_Space.TicksPerSecond) - { - //comObj.cmbt_face += comObj.Rotate; - this.cmbt_head.Degrees += this.maxRotate.Degrees / Battle_Space.TicksPerSecond; - } - else - { - //comObj.cmbt_face = comObj.waypointTarget.cmbt_loc; - this.cmbt_head += angletoturn; - } - } - else //turn counterclockwise - { - if (((Fix16)360 - angletoturn.Degrees) > this.maxRotate.Degrees / Battle_Space.TicksPerSecond) - { - //comObj.cmbt_face -= comObj.maxRotate; - this.cmbt_head.Degrees -= this.maxRotate.Degrees / Battle_Space.TicksPerSecond; - } - else - { - //comObj.cmbt_face = comObj.waypointTarget.cmbt_loc; - // subtract 360 minus the angle - this.cmbt_head += angletoturn; - } - } - } - - /// - /// Computes the efficiency of a thruster thrusting in a direction. - /// - /// - /// - private Fix16 GetThrustEfficiency(Compass angleOffCenter) - { - Fix16 OAC = Fix16.Abs(angleOffCenter.Degrees);//Compass OAC = new Compass(Math.Abs(angleOffCenter.Radians)); - - // normalize to range of -180 to +180 - OAC = Compass.NormalizeDegrees(OAC); - if (OAC > 180) - OAC -= 360; - - if (Math.Abs(OAC) >= 90) - return Fix16.Zero; // can't thrust sideways or backwards! - return Fix16.Cos(OAC * (Fix16.Pi / (Fix16)180)); - } - - /// - /// for testing. - /// - /// - /// - public void testThrustShip(Compass angletoturn, bool? thrustToWaypoint) - { - thrustship(angletoturn, thrustToWaypoint); - } - - protected void thrustship(Compass angletoturn, bool? thrustToWaypoint) - { - this.cmbt_thrust.ZEROIZE(); - strafeship(thrustToWaypoint); - //main foward thrust - still needs some work, ie it doesnt know when to turn it off when close to a waypoint. - Fix16 thrustby = (Fix16)0; - if (thrustToWaypoint != null) - { - if (angletoturn.Degrees >= (Fix16)0 && angletoturn.Degrees < (Fix16)90) - { - - thrustby = (Fix16)this.maxfowardThrust * GetThrustEfficiency(angletoturn); - } - else if (angletoturn.Degrees > (Fix16)270 && angletoturn.Degrees < (Fix16)360) - { - Compass angle = new Compass((Fix16)360 - angletoturn.Degrees); - angle.normalize(); - thrustby = (Fix16)this.maxfowardThrust * GetThrustEfficiency(angletoturn); - } - - //PointXd fowardthrust = new PointXd(comObj.cmbt_face + thrustby); - PointXd fowardthrust = new PointXd(Trig.sides_ab(thrustby, this.cmbt_head.Radians)); - this.cmbt_thrust += fowardthrust; - - } - else - { - //match velocity with waypoint - PointXd wayptvel = this.waypointTarget.cmbt_vel; - PointXd ourvel = this.cmbt_vel; - - thrustby = (Fix16)this.maxfowardThrust * GetThrustEfficiency(angletoturn); - - PointXd fowardthrust = new PointXd(Trig.intermediatePoint(ourvel, wayptvel, thrustby)); - this.cmbt_thrust += fowardthrust; - } -#if DEBUG - Console.WriteLine("Thrust By " + thrustby); -#endif - } - - protected void strafeship(bool? thrustToWaypoint) - { - //thrust ship using strafe - if (thrustToWaypoint == true) //(if we want to accelerate towards the target, not away from it) - { - this.cmbt_thrust = Trig.intermediatePoint(this.cmbt_loc, this.waypointTarget.cmbt_loc, this.maxStrafeThrust); - } - else if (thrustToWaypoint == false) - { - this.cmbt_thrust = Trig.intermediatePoint(this.cmbt_loc, this.waypointTarget.cmbt_loc, -this.maxStrafeThrust); - } - else - { - // if null, we need to match both location and velocity - var vectorToTarget = waypointTarget.cmbt_loc - cmbt_loc; - var thrustToMatchLocation = Math.Min(this.maxStrafeThrust, vectorToTarget.Length); - var deltaV = NMath.closingRate(cmbt_loc, cmbt_vel, waypointTarget.cmbt_loc, waypointTarget.cmbt_vel); - var thrustToMatchVelocity = -deltaV; - var amountToThrust = thrustToMatchLocation + thrustToMatchVelocity; - this.cmbt_thrust = Trig.intermediatePoint(this.cmbt_loc, this.waypointTarget.cmbt_loc, amountToThrust); - } - } - - public virtual int handleShieldDamage(int damage) { return damage; } - public virtual int handleComponentDamage(Hit hit, PRNG attackersdice) { return hit.NominalDamage; } // leak all damage by default - - public virtual void firecontrol(int tic_countr) - { - } - - /*/// - /// attempt at adding this to the combatObject. it's not working too well though. - /// - /// - /// - /// - /// - /// - /// - - public CombatTakeFireEvent FireWeapon(int battletick, CombatObject attacker, CombatWeapon weapon, Space.Sector Sector, bool IsReplay) - { - var wpninfo = weapon.weapon.Template.ComponentTemplate.WeaponInfo; - Fix16 rangeForDamageCalcs = (Fix16)0; - Fix16 rangetotarget = Trig.distance(attacker.cmbt_loc, this.cmbt_loc); - int targettic = battletick; - - //reset the weapon nextReload. - weapon.nextReload = battletick + (int)(weapon.reloadRate * Battle_Space.TicksPerSecond); // TODO - round up, so weapons that fire more than 10 times per second don't fire at infinite rate - - var target_icomobj = this.WorkingObject; - //Vehicle defenderV = (Vehicle)target_icomobj; - - if (!weapon.CanTarget(target_icomobj)) - return null; - - // TODO - check range too - var tohit = - Mod.Current.Settings.WeaponAccuracyPointBlank // default weapon accuracy at point blank range - + weapon.weapon.Template.WeaponAccuracy // weapon's intrinsic accuracy modifier - + weapon.weapon.Container.Accuracy // firing ship's accuracy modifier - - target_icomobj.Evasion // target's evasion modifier - - Sector.GetAbilityValue(this.WorkingObject.Owner, "Sector - Sensor Interference").ToInt() // sector evasion modifier - + Sector.GetAbilityValue(attacker.WorkingObject.Owner, "Combat Modifier - Sector").ToInt() // generic combat bonuses - - Sector.GetAbilityValue(this.WorkingObject.Owner, "Combat Modifier - Sector").ToInt() - + Sector.StarSystem.GetAbilityValue(attacker.WorkingObject.Owner, "Combat Modifier - System").ToInt() - - Sector.StarSystem.GetAbilityValue(this.WorkingObject.Owner, "Combat Modifier - System").ToInt() - + attacker.WorkingObject.Owner.GetAbilityValue("Combat Modifier - Empire").ToInt() - - this.WorkingObject.Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); - // TODO - moddable min/max hit chances with per-weapon overrides - if (tohit > 99) - tohit = 99; - if (tohit < 1) - tohit = 1; - if (weapon.weapon.Container.HasAbility("Weapons Always Hit")) - tohit = 100; - - //bool hit = RandomHelper.Range(0, 99) < tohit; - PRNG dice = attacker.getDice(); - bool hit = dice.Range(0, 99) < tohit; - - CombatTakeFireEvent target_event = null; - - if (weapon.weaponType == "Seeker") - { - - //create seeker and node. - CombatSeeker seeker = new CombatSeeker(attacker, weapon, -tempObjCounter); - seeker.waypointTarget = new combatWaypoint(this); - seeker.weaponTarget = new List() { this }; - seeker.deathTick = battletick + weapon.maxRange_time; - seeker.cmbt_head = attacker.cmbt_head; - seeker.cmbt_att = attacker.cmbt_att; - FreshNodes.Add(seeker); - - foreach (var emp in Empires.Values) - { - if (emp.ownships.Contains(attacker)) - emp.ownships.Add(seeker); - if (emp.friendly.Contains(attacker)) - emp.friendly.Add(seeker); - if (emp.neutral.Contains(attacker)) - emp.neutral.Add(seeker); - if (emp.hostile.Contains(attacker)) - emp.hostile.Add(seeker); - } - - if (IsReplay) - { - //read the event - target_event = ReplayLog.EventsForObjectAtTick(this, targettic).OfType().ToList()[0]; - target_event.BulletNode = seeker; - } - else - { - //*write* the event - target_event = new CombatTakeFireEvent(battletick, this, this.cmbt_loc, false); - target_event.BulletNode = seeker; - seeker.seekertargethit = target_event; - } - } - //for bolt calc, need again for adding to list. - else if (weapon.weaponType == "Bolt") - { - - rangeForDamageCalcs = rangeForDamageCalcs_bolt(attacker, weapon, this); - Fix16 boltTTT = weapon.boltTimeToTarget(attacker, target); - //set target tick for the future. - targettic += (int)boltTTT; - - - - if (IsReplay) - { - //read the event - target_event = ReplayLog.EventsForObjectAtTick(this, targettic).OfType().ToList()[0]; - - //because bullets don't need to be created during processing - Fix16 rThis_distance = (target_event.Location - target_event.fireOnEvent.Location).Length; - PointXd bulletVector = Trig.intermediatePoint(attacker.cmbt_loc, target_event.Location, rThis_distance); - if (!target_event.IsHit) //jitter it! - { - // TODO - take into account firing ship's accuracy and target's evasion - int accuracy = target_event.fireOnEvent.Weapon.weapon.Template.WeaponAccuracy; - int jitterAmount = 0; - if (accuracy < 50) - jitterAmount = (int)System.Math.Pow(50 - accuracy, 2) / 50; - if (jitterAmount < 5) - jitterAmount = 5; - if (jitterAmount > 30) - jitterAmount = 30; - //do *NOT* use ship prng here!!!! (since this is not done during normal processing, it'll cause differences, use any rand) - Compass jitter = new Compass(RandomHelper.Range(-jitterAmount, jitterAmount), false); - Compass bulletCompass = bulletVector.Compass; - Compass offsetCompass = bulletCompass + jitter; - bulletVector = offsetCompass.Point(bulletVector.Length); - } - CombatNode bullet = new CombatNode(attacker.cmbt_loc, bulletVector, -tempObjCounter, "BLT"); - target_event.BulletNode = bullet; - FreshNodes.Add(bullet); - if (target_event.IsHit) - { - bullet.deathTick = target_event.Tick; - } - else - { - bullet.deathTick = battletick + target_event.fireOnEvent.Weapon.maxRange; - } - } - else - { - //*write* the event - target_event = new CombatTakeFireEvent(targettic, this, this.cmbt_loc, hit); - int nothing = tempObjCounter; //increase it just so processing has the same number of tempObjects created as replay will. - } - - } - else //not bolt - { - if (IsReplay) - { //read the replay... nothing to do if a beam. - } - else - { //write the event. - rangeForDamageCalcs = rangetotarget / (Fix16)1000; - target_event = new CombatTakeFireEvent(targettic, this, this.cmbt_loc, hit); - } - } - - rangeForDamageCalcs = Fix16.Max((Fix16)1, rangeForDamageCalcs); //don't be less than 1. - - if (hit && !target_icomobj.IsDestroyed) - { - var shot = new Combat.Shot(weapon.weapon, target_icomobj, (int)rangeForDamageCalcs); - //defender.TakeDamage(weapon.Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, battle); - int damage = shot.Damage; - combatDamage(battletick, this, weapon, damage, attacker.getDice()); - if (target_icomobj.MaxNormalShields < target_icomobj.NormalShields) - target_icomobj.NormalShields = target_icomobj.MaxNormalShields; - if (target_icomobj.MaxPhasedShields < target_icomobj.PhasedShields) - target_icomobj.PhasedShields = target_icomobj.MaxPhasedShields; - //if (defender.IsDestroyed) - //battle.LogTargetDeath(defender); - } - return target_event; - } - */ - - public void TakeDamage(Battle_Space battle, Hit hit, PRNG dice) - { - // special combat damage effects - TakeSpecialDamage(battle, hit, dice); - - // basic damage effects - WorkingObject.TakeDamage(hit, dice); - } - - public virtual void TakeSpecialDamage(Battle_Space battle, Hit hit, PRNG dice) { } - - /// - /// Combat objects can only push or pull smaller combat objects. - /// - /// - /// - public bool CanPushOrPull(CombatObject other) - { - return cmbt_mass > other.cmbt_mass; - } - #endregion - } - - public class CombatWaypoint - { - public CombatWaypoint() - { - this.cmbt_loc = new PointXd(0, 0, 0); - this.cmbt_vel = new PointXd(0, 0, 0); - } - public CombatWaypoint(PointXd cmbt_loc) - { - this.cmbt_loc = cmbt_loc; - this.cmbt_vel = new PointXd(0, 0, 0); - } - public CombatWaypoint(PointXd cmbt_loc, PointXd cmbt_vel) - { - this.cmbt_loc = cmbt_loc; - this.cmbt_vel = cmbt_vel; - } - public CombatWaypoint(CombatObject tgtcomObj) - { - this.comObj = tgtcomObj; - this.cmbt_loc = tgtcomObj.cmbt_loc; - this.cmbt_vel = tgtcomObj.cmbt_vel; - } - - /// - /// location within the sector - /// - public PointXd cmbt_loc { get; set; } - - /// - /// combat velocity - /// - public PointXd cmbt_vel { get; set; } - - /// - /// - /// - public CombatObject comObj { get; set; } - - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FrEee.Utility; +using FrEee.Utility.Extensions; + +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Vehicles; +using FrEee.Game.Objects.Combat; +using FrEee.Game.Objects.Technology; +using FrEee.Modding; + +using NewtMath.f16; +using FixMath.NET; +using FrEee.WinForms; + +namespace FrEee.Game.Objects.Combat2 +{ + public class CombatEmpire + { + public List ownships = new List(); + public List friendly = new List(); + public List neutral = new List(); //not currently used. + public List hostile = new List(); + public CombatEmpire() + { + } + public void renewtostart() + { + ownships = new List(); + friendly = new List(); + neutral = new List(); //not currently used. + hostile = new List(); + } + public void removeComObj(CombatObject comObj) + { + ownships.Remove(comObj); + friendly.Remove(comObj); + neutral.Remove(comObj); + hostile.Remove(comObj); + } + //todo add ComObj and check hostility etc. + + // TODO - add ToString() once we have the empire's name + } + + public class CombatFleet + { + + public CombatFleet(Space.Fleet fleet) + { + Fleet = fleet; + Name = fleet.Name; + combatObjects = new List(); + } + public string Name { get; private set; } + public Space.Fleet Fleet { get; set; } + public List combatObjects { get; set; } + + public override string ToString() + { + return Name; + } + } + + public class CombatNode + { + /// + /// for creating bullets and other non AI or acelerating things. used by the renderer to move and display. + /// + /// ship position this is fiired from + /// direction this is going + public CombatNode(PointXd position, PointXd vector, long ID, string IDPrefix) + { + this.cmbt_loc = position; + this.cmbt_vel = vector; + this.cmbt_head = new Compass((Fix16)0); + this.ID = ID; + this.IDPrefix = IDPrefix; + } + /// + /// location within the sector + /// + public PointXd cmbt_loc { get; set; } + + /// + /// m/s combat velocity + /// + public PointXd cmbt_vel { get; set; } + + + /// + /// ship heading + /// + public Compass cmbt_head { get; set; } + + /// + /// the ID of the origional icomatant if a ship. + /// + public long ID { get; set; } + + public string IDPrefix { get; private set; } + + public string strID + { + get + { + return IDPrefix + ID.ToString(); + } + } + + public int deathTick { get; set; } + + public override string ToString() + { + return strID; + } + } + + + public class CombatObject : CombatNode + { + + public CombatObject(ITargetable workingObject, PointXd position, PointXd vector, long ID, string IDprefix) + : base(position, vector, ID, IDprefix) + { + WorkingObject = workingObject; + this.waypointTarget = new CombatWaypoint(); + weaponTarget = new List(1); //eventualy this should be something with the multiplex tracking component. + this.cmbt_thrust = new PointXd(0, 0, 0); + this.cmbt_accel = new PointXd(0, 0, 0); + this.maxRotate = new Compass(0); + } + + #region fields & properties + + /// + /// The object's current state. + /// + public ITargetable WorkingObject + { + get; + protected set; + } + + private PRNG shipDice; + + + /// + /// ship attitude, ie angle from level plain (0/360) pointing straight up (90) + /// + public Compass cmbt_att { get; set; } + + public PointXd cmbt_thrust { get; set; } + + /// + /// in meters per second. + /// + public PointXd cmbt_accel { get; set; } + + + public Fix16 cmbt_mass { get; set; } + + //public PointXd cmbt_maxThrust { get; set; } + //public PointXd cmbt_minThrust { get; set; } + + public CombatEmpire empire { get; set; } + + public StrategyObject strategy { get; set; } + + public CombatWaypoint waypointTarget; + + // TODO - remove this property after the end of the PBW game (it still needs to be in here for deserialization) + private PointXd lastVectortoWaypoint { get; set; } + //public double lastDistancetoWaypoint { get; set; } + + public List weaponTarget { get; set; } + + + /// + /// neutons of thrust + /// + public Fix16 maxfowardThrust { get; set; } + /// + /// neutons of side thrust + /// + public Fix16 maxStrafeThrust { get; set; } + + /// + /// how far this object can rotate each second. + /// + public Compass maxRotate { get; set; } + + + + #endregion + + + #region methods & functions + public PRNG getDice() + { + + return shipDice; + } + public void newDice(int battleseed) + { + int seed = (int)(this.ID % 100000) + battleseed; + shipDice = new PRNG(seed); + } + + public virtual void renewtoStart() + { + this.cmbt_loc = new PointXd(0, 0, 0); + this.cmbt_vel = new PointXd(0, 0, 0); + this.cmbt_head = new Compass(0); + this.cmbt_att = new Compass(0); + this.cmbt_thrust = new PointXd(0, 0, 0); + this.cmbt_accel = new PointXd(0, 0, 0); + strategy.renewtostart(); + waypointTarget = null; + weaponTarget = new List(); + } + + public string debuginfo = ""; + + public void calcWaypoint() + { + this.waypointTarget = this.strategy.calcWaypiont(this); + } + public void calcWpnTarget() + { + this.weaponTarget = new List(){this.strategy.calcTarget(this)}; + } + + public virtual void helm() + { + CombatWaypoint wpt = this.waypointTarget; + Compass angletoWaypoint = new Compass(this.cmbt_loc, this.waypointTarget.cmbt_loc); //relitive to me. + + Tuple nav = Nav(angletoWaypoint); + Compass angletoturn = nav.Item1; + bool? thrustToWaypoint = nav.Item2; + + //PointXd vectortowaypoint = this.cmbt_loc - this.waypointTarget.cmbt_loc; + + Fix16 acceleration = maxfowardThrust * cmbt_mass; + Fix16 startV = NMath.distance(cmbt_vel, wpt.cmbt_vel); + Fix16 distance = NMath.distance(cmbt_loc, wpt.cmbt_loc); // XXX - why is distance between (0,0,0) and (0,1000,0) equal to 181 in Combat_Helm0 test?! + Fix16[] ttt = NMath.quadratic(acceleration, startV, distance); + + turnship(angletoturn, angletoWaypoint); + + thrustship(angletoturn, true); + } + + public Tuple testNav(Compass angletoWaypoint) + { + return Nav(angletoWaypoint); + } + protected virtual Tuple Nav(Compass angletoWaypoint) + { + Compass angletoturn = new Compass(); + bool thrustTowards = true; + + angletoturn.Degrees = angletoWaypoint.Degrees - this.cmbt_head.Degrees; + + return new Tuple(angletoturn, thrustTowards); + } + + + /// + /// for testing. + /// + /// + /// + public void testTurnShip(Compass angletoturn, Compass angleToTarget) + { + turnship(angletoturn, angleToTarget); + } + protected void turnship(Compass angletoturn, Compass angleToTarget) + { + //Compass angletoturn = new Compass(angletoturn.Degrees / Battle_Space.TicksPerSecond, false); + if (angletoturn.Degrees <= (Fix16)180) //turn clockwise + { + if (angletoturn.Degrees > this.maxRotate.Degrees / Battle_Space.TicksPerSecond) + { + //comObj.cmbt_face += comObj.Rotate; + this.cmbt_head.Degrees += this.maxRotate.Degrees / Battle_Space.TicksPerSecond; + } + else + { + //comObj.cmbt_face = comObj.waypointTarget.cmbt_loc; + this.cmbt_head += angletoturn; + } + } + else //turn counterclockwise + { + if (((Fix16)360 - angletoturn.Degrees) > this.maxRotate.Degrees / Battle_Space.TicksPerSecond) + { + //comObj.cmbt_face -= comObj.maxRotate; + this.cmbt_head.Degrees -= this.maxRotate.Degrees / Battle_Space.TicksPerSecond; + } + else + { + //comObj.cmbt_face = comObj.waypointTarget.cmbt_loc; + // subtract 360 minus the angle + this.cmbt_head += angletoturn; + } + } + } + + /// + /// Computes the efficiency of a thruster thrusting in a direction. + /// + /// + /// + private Fix16 GetThrustEfficiency(Compass angleOffCenter) + { + Fix16 OAC = Fix16.Abs(angleOffCenter.Degrees);//Compass OAC = new Compass(Math.Abs(angleOffCenter.Radians)); + + // normalize to range of -180 to +180 + OAC = Compass.NormalizeDegrees(OAC); + if (OAC > 180) + OAC -= 360; + + if (Math.Abs(OAC) >= 90) + return Fix16.Zero; // can't thrust sideways or backwards! + return Fix16.Cos(OAC * (Fix16.Pi / (Fix16)180)); + } + + /// + /// for testing. + /// + /// + /// + public void testThrustShip(Compass angletoturn, bool? thrustToWaypoint) + { + thrustship(angletoturn, thrustToWaypoint); + } + + protected void thrustship(Compass angletoturn, bool? thrustToWaypoint) + { + this.cmbt_thrust.ZEROIZE(); + strafeship(thrustToWaypoint); + //main foward thrust - still needs some work, ie it doesnt know when to turn it off when close to a waypoint. + Fix16 thrustby = (Fix16)0; + if (thrustToWaypoint != null) + { + if (angletoturn.Degrees >= (Fix16)0 && angletoturn.Degrees < (Fix16)90) + { + + thrustby = (Fix16)this.maxfowardThrust * GetThrustEfficiency(angletoturn); + } + else if (angletoturn.Degrees > (Fix16)270 && angletoturn.Degrees < (Fix16)360) + { + Compass angle = new Compass((Fix16)360 - angletoturn.Degrees); + angle.normalize(); + thrustby = (Fix16)this.maxfowardThrust * GetThrustEfficiency(angletoturn); + } + + //PointXd fowardthrust = new PointXd(comObj.cmbt_face + thrustby); + PointXd fowardthrust = new PointXd(Trig.sides_ab(thrustby, this.cmbt_head.Radians)); + this.cmbt_thrust += fowardthrust; + + } + else + { + //match velocity with waypoint + PointXd wayptvel = this.waypointTarget.cmbt_vel; + PointXd ourvel = this.cmbt_vel; + + thrustby = (Fix16)this.maxfowardThrust * GetThrustEfficiency(angletoturn); + + PointXd fowardthrust = new PointXd(Trig.intermediatePoint(ourvel, wayptvel, thrustby)); + this.cmbt_thrust += fowardthrust; + } +#if DEBUG + Console.WriteLine("Thrust By " + thrustby); +#endif + } + + protected void strafeship(bool? thrustToWaypoint) + { + //thrust ship using strafe + if (thrustToWaypoint == true) //(if we want to accelerate towards the target, not away from it) + { + this.cmbt_thrust = Trig.intermediatePoint(this.cmbt_loc, this.waypointTarget.cmbt_loc, this.maxStrafeThrust); + } + else if (thrustToWaypoint == false) + { + this.cmbt_thrust = Trig.intermediatePoint(this.cmbt_loc, this.waypointTarget.cmbt_loc, -this.maxStrafeThrust); + } + else + { + // if null, we need to match both location and velocity + var vectorToTarget = waypointTarget.cmbt_loc - cmbt_loc; + var thrustToMatchLocation = Math.Min(this.maxStrafeThrust, vectorToTarget.Length); + var deltaV = NMath.closingRate(cmbt_loc, cmbt_vel, waypointTarget.cmbt_loc, waypointTarget.cmbt_vel); + var thrustToMatchVelocity = -deltaV; + var amountToThrust = thrustToMatchLocation + thrustToMatchVelocity; + this.cmbt_thrust = Trig.intermediatePoint(this.cmbt_loc, this.waypointTarget.cmbt_loc, amountToThrust); + } + } + + public virtual int handleShieldDamage(int damage) { return damage; } + public virtual int handleComponentDamage(Hit hit, PRNG attackersdice) { return hit.NominalDamage; } // leak all damage by default + + public virtual void firecontrol(int tic_countr) + { + } + + /*/// + /// attempt at adding this to the combatObject. it's not working too well though. + /// + /// + /// + /// + /// + /// + /// + + public CombatTakeFireEvent FireWeapon(int battletick, CombatObject attacker, CombatWeapon weapon, Space.Sector Sector, bool IsReplay) + { + var wpninfo = weapon.weapon.Template.ComponentTemplate.WeaponInfo; + Fix16 rangeForDamageCalcs = (Fix16)0; + Fix16 rangetotarget = Trig.distance(attacker.cmbt_loc, this.cmbt_loc); + int targettic = battletick; + + //reset the weapon nextReload. + weapon.nextReload = battletick + (int)(weapon.reloadRate * Battle_Space.TicksPerSecond); // TODO - round up, so weapons that fire more than 10 times per second don't fire at infinite rate + + var target_icomobj = this.WorkingObject; + //Vehicle defenderV = (Vehicle)target_icomobj; + + if (!weapon.CanTarget(target_icomobj)) + return null; + + // TODO - check range too + var tohit = + Mod.Current.Settings.WeaponAccuracyPointBlank // default weapon accuracy at point blank range + + weapon.weapon.Template.WeaponAccuracy // weapon's intrinsic accuracy modifier + + weapon.weapon.Container.Accuracy // firing ship's accuracy modifier + - target_icomobj.Evasion // target's evasion modifier + - Sector.GetAbilityValue(this.WorkingObject.Owner, "Sector - Sensor Interference").ToInt() // sector evasion modifier + + Sector.GetAbilityValue(attacker.WorkingObject.Owner, "Combat Modifier - Sector").ToInt() // generic combat bonuses + - Sector.GetAbilityValue(this.WorkingObject.Owner, "Combat Modifier - Sector").ToInt() + + Sector.StarSystem.GetAbilityValue(attacker.WorkingObject.Owner, "Combat Modifier - System").ToInt() + - Sector.StarSystem.GetAbilityValue(this.WorkingObject.Owner, "Combat Modifier - System").ToInt() + + attacker.WorkingObject.Owner.GetAbilityValue("Combat Modifier - Empire").ToInt() + - this.WorkingObject.Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); + // TODO - moddable min/max hit chances with per-weapon overrides + if (tohit > 99) + tohit = 99; + if (tohit < 1) + tohit = 1; + if (weapon.weapon.Container.HasAbility("Weapons Always Hit")) + tohit = 100; + + //bool hit = RandomHelper.Range(0, 99) < tohit; + PRNG dice = attacker.getDice(); + bool hit = dice.Range(0, 99) < tohit; + + CombatTakeFireEvent target_event = null; + + if (weapon.weaponType == "Seeker") + { + + //create seeker and node. + CombatSeeker seeker = new CombatSeeker(attacker, weapon, -tempObjCounter); + seeker.waypointTarget = new combatWaypoint(this); + seeker.weaponTarget = new List() { this }; + seeker.deathTick = battletick + weapon.maxRange_time; + seeker.cmbt_head = attacker.cmbt_head; + seeker.cmbt_att = attacker.cmbt_att; + FreshNodes.Add(seeker); + + foreach (var emp in Empires.Values) + { + if (emp.ownships.Contains(attacker)) + emp.ownships.Add(seeker); + if (emp.friendly.Contains(attacker)) + emp.friendly.Add(seeker); + if (emp.neutral.Contains(attacker)) + emp.neutral.Add(seeker); + if (emp.hostile.Contains(attacker)) + emp.hostile.Add(seeker); + } + + if (IsReplay) + { + //read the event + target_event = ReplayLog.EventsForObjectAtTick(this, targettic).OfType().ToList()[0]; + target_event.BulletNode = seeker; + } + else + { + //*write* the event + target_event = new CombatTakeFireEvent(battletick, this, this.cmbt_loc, false); + target_event.BulletNode = seeker; + seeker.seekertargethit = target_event; + } + } + //for bolt calc, need again for adding to list. + else if (weapon.weaponType == "Bolt") + { + + rangeForDamageCalcs = rangeForDamageCalcs_bolt(attacker, weapon, this); + Fix16 boltTTT = weapon.boltTimeToTarget(attacker, target); + //set target tick for the future. + targettic += (int)boltTTT; + + + + if (IsReplay) + { + //read the event + target_event = ReplayLog.EventsForObjectAtTick(this, targettic).OfType().ToList()[0]; + + //because bullets don't need to be created during processing + Fix16 rThis_distance = (target_event.Location - target_event.fireOnEvent.Location).Length; + PointXd bulletVector = Trig.intermediatePoint(attacker.cmbt_loc, target_event.Location, rThis_distance); + if (!target_event.IsHit) //jitter it! + { + // TODO - take into account firing ship's accuracy and target's evasion + int accuracy = target_event.fireOnEvent.Weapon.weapon.Template.WeaponAccuracy; + int jitterAmount = 0; + if (accuracy < 50) + jitterAmount = (int)System.Math.Pow(50 - accuracy, 2) / 50; + if (jitterAmount < 5) + jitterAmount = 5; + if (jitterAmount > 30) + jitterAmount = 30; + //do *NOT* use ship prng here!!!! (since this is not done during normal processing, it'll cause differences, use any rand) + Compass jitter = new Compass(RandomHelper.Range(-jitterAmount, jitterAmount), false); + Compass bulletCompass = bulletVector.Compass; + Compass offsetCompass = bulletCompass + jitter; + bulletVector = offsetCompass.Point(bulletVector.Length); + } + CombatNode bullet = new CombatNode(attacker.cmbt_loc, bulletVector, -tempObjCounter, "BLT"); + target_event.BulletNode = bullet; + FreshNodes.Add(bullet); + if (target_event.IsHit) + { + bullet.deathTick = target_event.Tick; + } + else + { + bullet.deathTick = battletick + target_event.fireOnEvent.Weapon.maxRange; + } + } + else + { + //*write* the event + target_event = new CombatTakeFireEvent(targettic, this, this.cmbt_loc, hit); + int nothing = tempObjCounter; //increase it just so processing has the same number of tempObjects created as replay will. + } + + } + else //not bolt + { + if (IsReplay) + { //read the replay... nothing to do if a beam. + } + else + { //write the event. + rangeForDamageCalcs = rangetotarget / (Fix16)1000; + target_event = new CombatTakeFireEvent(targettic, this, this.cmbt_loc, hit); + } + } + + rangeForDamageCalcs = Fix16.Max((Fix16)1, rangeForDamageCalcs); //don't be less than 1. + + if (hit && !target_icomobj.IsDestroyed) + { + var shot = new Combat.Shot(weapon.weapon, target_icomobj, (int)rangeForDamageCalcs); + //defender.TakeDamage(weapon.Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, battle); + int damage = shot.Damage; + combatDamage(battletick, this, weapon, damage, attacker.getDice()); + if (target_icomobj.MaxNormalShields < target_icomobj.NormalShields) + target_icomobj.NormalShields = target_icomobj.MaxNormalShields; + if (target_icomobj.MaxPhasedShields < target_icomobj.PhasedShields) + target_icomobj.PhasedShields = target_icomobj.MaxPhasedShields; + //if (defender.IsDestroyed) + //battle.LogTargetDeath(defender); + } + return target_event; + } + */ + + public void TakeDamage(Battle_Space battle, Hit hit, PRNG dice) + { + // special combat damage effects + TakeSpecialDamage(battle, hit, dice); + + // basic damage effects + WorkingObject.TakeDamage(hit, dice); + } + + public virtual void TakeSpecialDamage(Battle_Space battle, Hit hit, PRNG dice) { } + + /// + /// Combat objects can only push or pull smaller combat objects. + /// + /// + /// + public bool CanPushOrPull(CombatObject other) + { + return cmbt_mass > other.cmbt_mass; + } + #endregion + } + + public class CombatWaypoint + { + public CombatWaypoint() + { + this.cmbt_loc = new PointXd(0, 0, 0); + this.cmbt_vel = new PointXd(0, 0, 0); + } + public CombatWaypoint(PointXd cmbt_loc) + { + this.cmbt_loc = cmbt_loc; + this.cmbt_vel = new PointXd(0, 0, 0); + } + public CombatWaypoint(PointXd cmbt_loc, PointXd cmbt_vel) + { + this.cmbt_loc = cmbt_loc; + this.cmbt_vel = cmbt_vel; + } + public CombatWaypoint(CombatObject tgtcomObj) + { + this.comObj = tgtcomObj; + this.cmbt_loc = tgtcomObj.cmbt_loc; + this.cmbt_vel = tgtcomObj.cmbt_vel; + } + + /// + /// location within the sector + /// + public PointXd cmbt_loc { get; set; } + + /// + /// combat velocity + /// + public PointXd cmbt_vel { get; set; } + + /// + /// + /// + public CombatObject comObj { get; set; } + + } +} diff --git a/FrEee/Game/Objects/Combat2/lib/FixMath.dll b/FrEee/Objects/Combat2/lib/FixMath.dll similarity index 100% rename from FrEee/Game/Objects/Combat2/lib/FixMath.dll rename to FrEee/Objects/Combat2/lib/FixMath.dll diff --git a/FrEee/Game/Objects/Combat2/lib/FixMath.pdb b/FrEee/Objects/Combat2/lib/FixMath.pdb similarity index 100% rename from FrEee/Game/Objects/Combat2/lib/FixMath.pdb rename to FrEee/Objects/Combat2/lib/FixMath.pdb diff --git a/FrEee/Game/Objects/Combat2/lib/NewtMath.dll b/FrEee/Objects/Combat2/lib/NewtMath.dll similarity index 100% rename from FrEee/Game/Objects/Combat2/lib/NewtMath.dll rename to FrEee/Objects/Combat2/lib/NewtMath.dll diff --git a/FrEee/Game/Objects/Combat2/lib/NewtMath.pdb b/FrEee/Objects/Combat2/lib/NewtMath.pdb similarity index 100% rename from FrEee/Game/Objects/Combat2/lib/NewtMath.pdb rename to FrEee/Objects/Combat2/lib/NewtMath.pdb diff --git a/FrEee/Game/Objects/Combat2/lib/nunit.framework.dll b/FrEee/Objects/Combat2/lib/nunit.framework.dll similarity index 100% rename from FrEee/Game/Objects/Combat2/lib/nunit.framework.dll rename to FrEee/Objects/Combat2/lib/nunit.framework.dll diff --git a/FrEee/Game/Objects/Combat2/lib/nunit.framework.xml b/FrEee/Objects/Combat2/lib/nunit.framework.xml similarity index 100% rename from FrEee/Game/Objects/Combat2/lib/nunit.framework.xml rename to FrEee/Objects/Combat2/lib/nunit.framework.xml diff --git a/FrEee/Game/Objects/Commands/AddOrderCommand.cs b/FrEee/Objects/Commands/AddOrderCommand.cs similarity index 89% rename from FrEee/Game/Objects/Commands/AddOrderCommand.cs rename to FrEee/Objects/Commands/AddOrderCommand.cs index 4ff8fc940..2329ae5de 100644 --- a/FrEee/Game/Objects/Commands/AddOrderCommand.cs +++ b/FrEee/Objects/Commands/AddOrderCommand.cs @@ -1,77 +1,77 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Adds an order to the end of the queue. - /// - /// - [Serializable] - public class AddOrderCommand : OrderCommand - { - public AddOrderCommand(IOrderable target, IOrder order) - : base(target, order) - { - } - - public override IEnumerable NewReferrables - { - get - { - yield return Order; - } - } - - public override IOrder Order - { - get - { - return NewOrder; - } - set - { - base.Order = value; - NewOrder = value; - } - } - - private IOrder NewOrder - { - get; - set; - } - - public override void Execute() - { - if (Executor == null) - Issuer.Log.Add(new GenericLogMessage("Attempted to add an order to nonexistent object with ID=" + executor.ID + ". This is probably a game bug.")); - else if (Issuer == Executor.Owner) - { - if (Order is IConstructionOrder && ((IConstructionOrder)Order).Item != null) - Issuer.Log.Add(new GenericLogMessage("You cannot add a construction order with a prefabricated construction item!")); - else if (Order == null) - Issuer.Log.Add(new GenericLogMessage("Attempted to add a null order to " + Executor + ". This is probably a game bug.")); - else - Executor.AddOrder(Order); - } - else - Issuer.Log.Add(new GenericLogMessage(Issuer + " cannot issue commands to " + Executor + " belonging to " + Executor.Owner + "!", Galaxy.Current.TurnNumber)); - } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - base.ReplaceClientIDs(idmap, done); - NewOrder.ReplaceClientIDs(idmap, done); - } - } - } +using FrEee.Interfaces; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.Commands +{ + /// + /// Adds an order to the end of the queue. + /// + /// + [Serializable] + public class AddOrderCommand : OrderCommand + { + public AddOrderCommand(IOrderable target, IOrder order) + : base(target, order) + { + } + + public override IEnumerable NewReferrables + { + get + { + yield return Order; + } + } + + public override IOrder Order + { + get + { + return NewOrder; + } + set + { + base.Order = value; + NewOrder = value; + } + } + + private IOrder NewOrder + { + get; + set; + } + + public override void Execute() + { + if (Executor == null) + Issuer.Log.Add(new GenericLogMessage("Attempted to add an order to nonexistent object with ID=" + executor.ID + ". This is probably a game bug.")); + else if (Issuer == Executor.Owner) + { + if (Order is IConstructionOrder && ((IConstructionOrder)Order).Item != null) + Issuer.Log.Add(new GenericLogMessage("You cannot add a construction order with a prefabricated construction item!")); + else if (Order == null) + Issuer.Log.Add(new GenericLogMessage("Attempted to add a null order to " + Executor + ". This is probably a game bug.")); + else + Executor.AddOrder(Order); + } + else + Issuer.Log.Add(new GenericLogMessage(Issuer + " cannot issue commands to " + Executor + " belonging to " + Executor.Owner + "!", Galaxy.Current.TurnNumber)); + } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + base.ReplaceClientIDs(idmap, done); + NewOrder.ReplaceClientIDs(idmap, done); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/ClearPlayerNoteCommand.cs b/FrEee/Objects/Commands/ClearPlayerNoteCommand.cs similarity index 75% rename from FrEee/Game/Objects/Commands/ClearPlayerNoteCommand.cs rename to FrEee/Objects/Commands/ClearPlayerNoteCommand.cs index 9106d0ad9..2125cf30d 100644 --- a/FrEee/Game/Objects/Commands/ClearPlayerNoteCommand.cs +++ b/FrEee/Objects/Commands/ClearPlayerNoteCommand.cs @@ -1,29 +1,29 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Toggles AI ministers. - /// - public class MinisterToggleCommand : Command - { - public MinisterToggleCommand() - : base(Empire.Current) - { - } - - public SafeDictionary> EnabledMinisters { get; set; } - - public override void Execute() - { - if (Executor.AI == null) - Executor.RecordLog(Executor, $"Could not toggle AI ministers for {Executor} because there is no AI for this empire.", LogMessages.LogMessageType.Error); - else - Executor.EnabledMinisters = EnabledMinisters; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; + +namespace FrEee.Objects.Commands +{ + /// + /// Toggles AI ministers. + /// + public class MinisterToggleCommand : Command + { + public MinisterToggleCommand() + : base(Empire.Current) + { + } + + public SafeDictionary> EnabledMinisters { get; set; } + + public override void Execute() + { + if (Executor.AI == null) + Executor.RecordLog(Executor, $"Could not toggle AI ministers for {Executor} because there is no AI for this empire.", LogMessages.LogMessageType.Error); + else + Executor.EnabledMinisters = EnabledMinisters; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/ClearPrivateNameCommand.cs b/FrEee/Objects/Commands/ClearPrivateNameCommand.cs similarity index 75% rename from FrEee/Game/Objects/Commands/ClearPrivateNameCommand.cs rename to FrEee/Objects/Commands/ClearPrivateNameCommand.cs index e4cd0f3f3..765022f07 100644 --- a/FrEee/Game/Objects/Commands/ClearPrivateNameCommand.cs +++ b/FrEee/Objects/Commands/ClearPrivateNameCommand.cs @@ -1,32 +1,32 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Clears the private name for an object. - /// - public class ClearPrivateNameCommand : Command - { - public ClearPrivateNameCommand(Empire empire, INameable target) - : base(empire) - { - Target = target; - } - - /// - /// What are we clearing the name on? - /// - [DoNotSerialize] - public INameable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } - - private GalaxyReference target { get; set; } - - public override void Execute() - { - Executor.PrivateNames.Remove(target); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Commands +{ + /// + /// Clears the private name for an object. + /// + public class ClearPrivateNameCommand : Command + { + public ClearPrivateNameCommand(Empire empire, INameable target) + : base(empire) + { + Target = target; + } + + /// + /// What are we clearing the name on? + /// + [DoNotSerialize] + public INameable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } + + private GalaxyReference target { get; set; } + + public override void Execute() + { + Executor.PrivateNames.Remove(target); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/Command.cs b/FrEee/Objects/Commands/Command.cs similarity index 87% rename from FrEee/Game/Objects/Commands/Command.cs rename to FrEee/Objects/Commands/Command.cs index 927e244e5..b120e0e75 100644 --- a/FrEee/Game/Objects/Commands/Command.cs +++ b/FrEee/Objects/Commands/Command.cs @@ -1,67 +1,67 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A generic command. - /// - /// - [Serializable] - public abstract class Command : ICommand - where T : IReferrable - { - protected Command(T target) - { - Issuer = Empire.Current; - Executor = target; - } - - [DoNotSerialize] - public T Executor { get { return executor; } set { executor = value; } } - - IReferrable ICommand.Executor - { - get { return Executor; } - } - - public long ExecutorID { get { return executor.ID; } } - - public bool IsDisposed { get; set; } - - [DoNotSerialize] - public Empire Issuer { get { return issuer; } set { issuer = value; } } - - public virtual IEnumerable NewReferrables - { - get - { - yield break; - } - } - - protected GalaxyReference executor { get; set; } - - private GalaxyReference issuer { get; set; } - - public abstract void Execute(); - - public virtual void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - issuer.ReplaceClientIDs(idmap, done); - executor.ReplaceClientIDs(idmap, done); - foreach (var r in NewReferrables.OfType()) - r.ReplaceClientIDs(idmap, done); - } - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Commands +{ + /// + /// A generic command. + /// + /// + [Serializable] + public abstract class Command : ICommand + where T : IReferrable + { + protected Command(T target) + { + Issuer = Empire.Current; + Executor = target; + } + + [DoNotSerialize] + public T Executor { get { return executor; } set { executor = value; } } + + IReferrable ICommand.Executor + { + get { return Executor; } + } + + public long ExecutorID { get { return executor.ID; } } + + public bool IsDisposed { get; set; } + + [DoNotSerialize] + public Empire Issuer { get { return issuer; } set { issuer = value; } } + + public virtual IEnumerable NewReferrables + { + get + { + yield break; + } + } + + protected GalaxyReference executor { get; set; } + + private GalaxyReference issuer { get; set; } + + public abstract void Execute(); + + public virtual void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + issuer.ReplaceClientIDs(idmap, done); + executor.ReplaceClientIDs(idmap, done); + foreach (var r in NewReferrables.OfType()) + r.ReplaceClientIDs(idmap, done); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/CreateDesignCommand.cs b/FrEee/Objects/Commands/CreateDesignCommand.cs similarity index 83% rename from FrEee/Game/Objects/Commands/CreateDesignCommand.cs rename to FrEee/Objects/Commands/CreateDesignCommand.cs index b7ca2a981..ef1fc6ecf 100644 --- a/FrEee/Game/Objects/Commands/CreateDesignCommand.cs +++ b/FrEee/Objects/Commands/CreateDesignCommand.cs @@ -1,42 +1,42 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command to create a new vehicle design. - /// - [Serializable] - public class CreateDesignCommand : Command, ICreateDesignCommand where T : IVehicle - { - public CreateDesignCommand(IDesign design) - : base(Empire.Current) - { - Design = design; - } - - IDesign ICreateDesignCommand.Design { get { return Design; } } - - public IDesign Design { get; set; } - - public override IEnumerable NewReferrables - { - get - { - yield return Design; - } - } - - public override void Execute() - { - Design.VehiclesBuilt = 0; // in case it was tested in the simulator - if (Design.Warnings.Any()) - Issuer.Log.Add(Design.CreateLogMessage("The " + Design.Name + " " + Design.VehicleTypeName + " design cannot be saved because it has warnings.", LogMessages.LogMessageType.Warning)); - Issuer.KnownDesigns.Add(Design); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Commands +{ + /// + /// A command to create a new vehicle design. + /// + [Serializable] + public class CreateDesignCommand : Command, ICreateDesignCommand where T : IVehicle + { + public CreateDesignCommand(IDesign design) + : base(Empire.Current) + { + Design = design; + } + + IDesign ICreateDesignCommand.Design { get { return Design; } } + + public IDesign Design { get; set; } + + public override IEnumerable NewReferrables + { + get + { + yield return Design; + } + } + + public override void Execute() + { + Design.VehiclesBuilt = 0; // in case it was tested in the simulator + if (Design.Warnings.Any()) + Issuer.Log.Add(Design.CreateLogMessage("The " + Design.Name + " " + Design.VehicleTypeName + " design cannot be saved because it has warnings.", LogMessages.LogMessageType.Warning)); + Issuer.KnownDesigns.Add(Design); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/CreateFleetCommand.cs b/FrEee/Objects/Commands/CreateFleetCommand.cs similarity index 86% rename from FrEee/Game/Objects/Commands/CreateFleetCommand.cs rename to FrEee/Objects/Commands/CreateFleetCommand.cs index 3a21f36d4..2b7f3dbf6 100644 --- a/FrEee/Game/Objects/Commands/CreateFleetCommand.cs +++ b/FrEee/Objects/Commands/CreateFleetCommand.cs @@ -1,63 +1,63 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command to create a new fleet. - /// - public class CreateFleetCommand : Command - { - public CreateFleetCommand(Fleet fleet, Sector sector) - : base(Empire.Current) - { - Fleet = fleet; - Sector = sector; - } - - /// - /// The fleet to create. - /// - public Fleet Fleet { get; set; } - - public override IEnumerable NewReferrables - { - get - { - yield return Fleet; - } - } - - /// - /// The sector to place the fleet in. - /// - public Sector Sector { get; private set; } - - public override void Execute() - { - foreach (var v in Fleet.Vehicles) - v.Container = null; - Fleet.Vehicles.Clear(); // no cheating by spawning new vehicles! - Fleet.Sector = Sector; - - // HACK - why is the fleet beign disposed?! - Fleet.IsDisposed = false; - Fleet.ID = 0; - Galaxy.Current.AssignID(Fleet); - } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - base.ReplaceClientIDs(idmap, done); - Fleet.ReplaceClientIDs(idmap, done); - } - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using System.Collections.Generic; + +namespace FrEee.Objects.Commands +{ + /// + /// A command to create a new fleet. + /// + public class CreateFleetCommand : Command + { + public CreateFleetCommand(Fleet fleet, Sector sector) + : base(Empire.Current) + { + Fleet = fleet; + Sector = sector; + } + + /// + /// The fleet to create. + /// + public Fleet Fleet { get; set; } + + public override IEnumerable NewReferrables + { + get + { + yield return Fleet; + } + } + + /// + /// The sector to place the fleet in. + /// + public Sector Sector { get; private set; } + + public override void Execute() + { + foreach (var v in Fleet.Vehicles) + v.Container = null; + Fleet.Vehicles.Clear(); // no cheating by spawning new vehicles! + Fleet.Sector = Sector; + + // HACK - why is the fleet beign disposed?! + Fleet.IsDisposed = false; + Fleet.ID = 0; + Galaxy.Current.AssignID(Fleet); + } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + base.ReplaceClientIDs(idmap, done); + Fleet.ReplaceClientIDs(idmap, done); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/CreateWaypointCommand.cs b/FrEee/Objects/Commands/CreateWaypointCommand.cs similarity index 85% rename from FrEee/Game/Objects/Commands/CreateWaypointCommand.cs rename to FrEee/Objects/Commands/CreateWaypointCommand.cs index 6e550aa13..35e0a3d01 100644 --- a/FrEee/Game/Objects/Commands/CreateWaypointCommand.cs +++ b/FrEee/Objects/Commands/CreateWaypointCommand.cs @@ -1,44 +1,44 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command to create a new waypoint. - /// - public class CreateWaypointCommand : Command - { - public CreateWaypointCommand(Waypoint waypoint) - : base(Empire.Current) - { - Waypoint = waypoint; - } - - /// - /// A hotkey from zero to nine used to access this waypoint, or null to create a waypoint with no hotkey. - /// - public int? Hotkey { get; private set; } - - public override IEnumerable NewReferrables - { - get - { - foreach (var r in base.NewReferrables) - yield return r; - yield return Waypoint; - } - } - - /// - /// The waypoint being created. - /// - public Waypoint Waypoint { get; set; } - - public override void Execute() - { - if (!Executor.Waypoints.Contains(Waypoint)) - Executor.Waypoints.Add(Waypoint); // add new waypoint - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using System.Collections.Generic; + +namespace FrEee.Objects.Commands +{ + /// + /// A command to create a new waypoint. + /// + public class CreateWaypointCommand : Command + { + public CreateWaypointCommand(Waypoint waypoint) + : base(Empire.Current) + { + Waypoint = waypoint; + } + + /// + /// A hotkey from zero to nine used to access this waypoint, or null to create a waypoint with no hotkey. + /// + public int? Hotkey { get; private set; } + + public override IEnumerable NewReferrables + { + get + { + foreach (var r in base.NewReferrables) + yield return r; + yield return Waypoint; + } + } + + /// + /// The waypoint being created. + /// + public Waypoint Waypoint { get; set; } + + public override void Execute() + { + if (!Executor.Waypoints.Contains(Waypoint)) + Executor.Waypoints.Add(Waypoint); // add new waypoint + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/DeleteMessageCommand.cs b/FrEee/Objects/Commands/DeleteMessageCommand.cs similarity index 77% rename from FrEee/Game/Objects/Commands/DeleteMessageCommand.cs rename to FrEee/Objects/Commands/DeleteMessageCommand.cs index 00cc40e3e..e1b0834d9 100644 --- a/FrEee/Game/Objects/Commands/DeleteMessageCommand.cs +++ b/FrEee/Objects/Commands/DeleteMessageCommand.cs @@ -1,30 +1,30 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command to delete a message from an empire's inbox or sentbox. - /// To delete from the outbox, simply delete the SendMessageCommand from the empire's command queue. - /// - public class DeleteMessageCommand : Command - { - public DeleteMessageCommand(IMessage msg) - : base(Empire.Current) - { - Message = msg; - } - - public IMessage Message { get { return message.Value; } set { message = value.ReferViaGalaxy(); } } - - private GalaxyReference message { get; set; } - - public override void Execute() - { - Executor.IncomingMessages.Remove(Message); - Executor.SentMessages.Remove(Message); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Commands +{ + /// + /// A command to delete a message from an empire's inbox or sentbox. + /// To delete from the outbox, simply delete the SendMessageCommand from the empire's command queue. + /// + public class DeleteMessageCommand : Command + { + public DeleteMessageCommand(IMessage msg) + : base(Empire.Current) + { + Message = msg; + } + + public IMessage Message { get { return message.Value; } set { message = value.ReferViaGalaxy(); } } + + private GalaxyReference message { get; set; } + + public override void Execute() + { + Executor.IncomingMessages.Remove(Message); + Executor.SentMessages.Remove(Message); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/DeleteWaypointCommand.cs b/FrEee/Objects/Commands/DeleteWaypointCommand.cs similarity index 83% rename from FrEee/Game/Objects/Commands/DeleteWaypointCommand.cs rename to FrEee/Objects/Commands/DeleteWaypointCommand.cs index 633888d03..064d85524 100644 --- a/FrEee/Game/Objects/Commands/DeleteWaypointCommand.cs +++ b/FrEee/Objects/Commands/DeleteWaypointCommand.cs @@ -1,31 +1,31 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command to delete a waypoint. - /// - public class DeleteWaypointCommand : Command - { - public DeleteWaypointCommand(Waypoint waypoint) - : base(waypoint) - { - } - - public override void Execute() - { - // sanity check - var emp = Executor.Owner; - if (emp != Issuer) - { - Issuer.Log.Add(Issuer.CreateLogMessage("We cannot issue a command to delete another empire's waypoints!", LogMessages.LogMessageType.Error)); - return; - } - - Executor.Dispose(); - - Issuer.Log.Add(Issuer.CreateLogMessage(Executor.AlteredQueuesOnDelete + " vehicles' orders were truncated when " + Executor + " was deleted.", LogMessages.LogMessageType.Warning)); - } - } +using FrEee.Objects.Civilization; +using FrEee.Extensions; + +namespace FrEee.Objects.Commands +{ + /// + /// A command to delete a waypoint. + /// + public class DeleteWaypointCommand : Command + { + public DeleteWaypointCommand(Waypoint waypoint) + : base(waypoint) + { + } + + public override void Execute() + { + // sanity check + var emp = Executor.Owner; + if (emp != Issuer) + { + Issuer.Log.Add(Issuer.CreateLogMessage("We cannot issue a command to delete another empire's waypoints!", LogMessages.LogMessageType.Error)); + return; + } + + Executor.Dispose(); + + Issuer.Log.Add(Issuer.CreateLogMessage(Executor.AlteredQueuesOnDelete + " vehicles' orders were truncated when " + Executor + " was deleted.", LogMessages.LogMessageType.Warning)); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/DisbandFleetCommand.cs b/FrEee/Objects/Commands/DisbandFleetCommand.cs similarity index 81% rename from FrEee/Game/Objects/Commands/DisbandFleetCommand.cs rename to FrEee/Objects/Commands/DisbandFleetCommand.cs index 5a417d34f..f8e81c45c 100644 --- a/FrEee/Game/Objects/Commands/DisbandFleetCommand.cs +++ b/FrEee/Objects/Commands/DisbandFleetCommand.cs @@ -1,27 +1,27 @@ -using FrEee.Game.Objects.Space; -using System.Linq; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command to disband a fleet. - /// - public class DisbandFleetCommand : Command - { - public DisbandFleetCommand(Fleet fleet) - : base(fleet) - { - } - - public override void Execute() - { - foreach (var v in Executor.Vehicles.ToArray()) - { - Executor.Vehicles.Remove(v); - v.Container = null; - Executor.Sector.Place(v); - } - Executor.Dispose(); - } - } +using FrEee.Objects.Space; +using System.Linq; + +namespace FrEee.Objects.Commands +{ + /// + /// A command to disband a fleet. + /// + public class DisbandFleetCommand : Command + { + public DisbandFleetCommand(Fleet fleet) + : base(fleet) + { + } + + public override void Execute() + { + foreach (var v in Executor.Vehicles.ToArray()) + { + Executor.Vehicles.Remove(v); + v.Container = null; + Executor.Sector.Place(v); + } + Executor.Dispose(); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/EditStrategyCommand.cs b/FrEee/Objects/Commands/EditStrategyCommand.cs similarity index 95% rename from FrEee/Game/Objects/Commands/EditStrategyCommand.cs rename to FrEee/Objects/Commands/EditStrategyCommand.cs index e4e3ea1d8..1319de467 100644 --- a/FrEee/Game/Objects/Commands/EditStrategyCommand.cs +++ b/FrEee/Objects/Commands/EditStrategyCommand.cs @@ -1,47 +1,47 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Combat2; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Edits the strategy of a vehicle design. - /// - public class EditStrategyCommand : Command - { - public EditStrategyCommand(IDesign design, StrategyObject strategy) - : base(design) - { - Strategy = strategy; - } - - /// - /// The new strategy object to set on the design. - /// - public StrategyObject Strategy { get; set; } - - /// - /// Sets the strategy on the design. - /// - public override void Execute() - { - Executor.Strategy = Strategy; - } - - /// - /// Contains the strategy, since it might be a new object from the client. - /// - public override IEnumerable NewReferrables - { - get - { - yield return Strategy; - } - } - } -} +using FrEee.Game.Interfaces; +using FrEee.Game.Objects.Combat2; +using FrEee.Utility; +using FrEee.Utility.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace FrEee.Game.Objects.Commands +{ + /// + /// Edits the strategy of a vehicle design. + /// + public class EditStrategyCommand : Command + { + public EditStrategyCommand(IDesign design, StrategyObject strategy) + : base(design) + { + Strategy = strategy; + } + + /// + /// The new strategy object to set on the design. + /// + public StrategyObject Strategy { get; set; } + + /// + /// Sets the strategy on the design. + /// + public override void Execute() + { + Executor.Strategy = Strategy; + } + + /// + /// Contains the strategy, since it might be a new object from the client. + /// + public override IEnumerable NewReferrables + { + get + { + yield return Strategy; + } + } + } +} diff --git a/FrEee/Game/Objects/Commands/HotkeyWaypointCommand.cs b/FrEee/Objects/Commands/HotkeyWaypointCommand.cs similarity index 87% rename from FrEee/Game/Objects/Commands/HotkeyWaypointCommand.cs rename to FrEee/Objects/Commands/HotkeyWaypointCommand.cs index 7b7b6be07..2ecbbda26 100644 --- a/FrEee/Game/Objects/Commands/HotkeyWaypointCommand.cs +++ b/FrEee/Objects/Commands/HotkeyWaypointCommand.cs @@ -1,77 +1,77 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command to set a waypoint to a hotkey. - /// - public class HotkeyWaypointCommand : Command - { - public HotkeyWaypointCommand(Waypoint waypoint, int hotkey, bool redirect) - : base(waypoint) - { - if (hotkey < 0 || hotkey > 9) - throw new ArgumentOutOfRangeException("Hotkey for waypoint must be between zero and nine if not null.", "hotkey"); - Hotkey = hotkey; - Redirect = redirect; - } - - /// - /// A hotkey from zero to nine used to access this waypoint. - /// - public int Hotkey { get; private set; } - - /// - /// If there is a previous waypoint on this hotkey, should ships ordered to go to it be redirected to the new waypoint? - /// - public bool Redirect { get; private set; } - - public override void Execute() - { - // sanity check - var emp = Executor.Owner; - if (emp != Issuer) - { - Issuer.Log.Add(Issuer.CreateLogMessage("We cannot issue a command to hotkey another empire's waypoints!", LogMessages.LogMessageType.Error)); - return; - } - - // replace old waypoint - var oldWaypoint = emp.NumberedWaypoints[Hotkey]; - emp.NumberedWaypoints[Hotkey] = Executor; - - if (Redirect) - { - int count = 0; - foreach (var sobj in Galaxy.Current.FindSpaceObjects()) - { - bool found = false; - // check if space object has orders to move to this waypoint - // if so, change that order's waypoint to this one - foreach (var order in sobj.Orders) - { - if (order is WaypointOrder) - { - var wo = order as WaypointOrder; - if (wo.Target == oldWaypoint) - { - wo.Target = Executor; - found = true; - } - } - } - if (found) - count++; - } - - if (count > 0) - emp.Log.Add(Issuer.CreateLogMessage(count + " vehicles were redirected from " + oldWaypoint + " to " + Executor + ".", LogMessages.LogMessageType.Generic)); - } - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Extensions; +using System; + +namespace FrEee.Objects.Commands +{ + /// + /// A command to set a waypoint to a hotkey. + /// + public class HotkeyWaypointCommand : Command + { + public HotkeyWaypointCommand(Waypoint waypoint, int hotkey, bool redirect) + : base(waypoint) + { + if (hotkey < 0 || hotkey > 9) + throw new ArgumentOutOfRangeException("Hotkey for waypoint must be between zero and nine if not null.", "hotkey"); + Hotkey = hotkey; + Redirect = redirect; + } + + /// + /// A hotkey from zero to nine used to access this waypoint. + /// + public int Hotkey { get; private set; } + + /// + /// If there is a previous waypoint on this hotkey, should ships ordered to go to it be redirected to the new waypoint? + /// + public bool Redirect { get; private set; } + + public override void Execute() + { + // sanity check + var emp = Executor.Owner; + if (emp != Issuer) + { + Issuer.Log.Add(Issuer.CreateLogMessage("We cannot issue a command to hotkey another empire's waypoints!", LogMessages.LogMessageType.Error)); + return; + } + + // replace old waypoint + var oldWaypoint = emp.NumberedWaypoints[Hotkey]; + emp.NumberedWaypoints[Hotkey] = Executor; + + if (Redirect) + { + int count = 0; + foreach (var sobj in Galaxy.Current.FindSpaceObjects()) + { + bool found = false; + // check if space object has orders to move to this waypoint + // if so, change that order's waypoint to this one + foreach (var order in sobj.Orders) + { + if (order is WaypointOrder) + { + var wo = order as WaypointOrder; + if (wo.Target == oldWaypoint) + { + wo.Target = Executor; + found = true; + } + } + } + if (found) + count++; + } + + if (count > 0) + emp.Log.Add(Issuer.CreateLogMessage(count + " vehicles were redirected from " + oldWaypoint + " to " + Executor + ".", LogMessages.LogMessageType.Generic)); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/JoinFleetCommand.cs b/FrEee/Objects/Commands/JoinFleetCommand.cs similarity index 89% rename from FrEee/Game/Objects/Commands/JoinFleetCommand.cs rename to FrEee/Objects/Commands/JoinFleetCommand.cs index 77528ecfc..06b724954 100644 --- a/FrEee/Game/Objects/Commands/JoinFleetCommand.cs +++ b/FrEee/Objects/Commands/JoinFleetCommand.cs @@ -1,88 +1,88 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command for a space vehicle to join a fleet. - /// - public class JoinFleetCommand : Command - { - public JoinFleetCommand(IMobileSpaceObject vehicle, Fleet fleet) - : base(vehicle) - { - Fleet = fleet; - } - - public JoinFleetCommand(IMobileSpaceObject vehicle, CreateFleetCommand cmd) - : base(vehicle) - { - CreateFleetCommand = cmd; - } - - public CreateFleetCommand CreateFleetCommand { get; set; } - - [DoNotSerialize] - public Fleet Fleet - { - get - { - return fleet == null || fleet.ID <= 0 ? (Fleet)CreateFleetCommand.Fleet : (Fleet)fleet; - } - set - { - if (!value.HasValidID()) - { - // HACK - why is the fleet beign disposed?! - value.IsDisposed = false; - value.ID = 0; - Galaxy.Current.AssignID(value); - } - fleet = value; - } - } - - private GalaxyReference fleet { get; set; } - - public override void Execute() - { - // if it's a new fleet, find it - if (CreateFleetCommand != null) - Fleet = CreateFleetCommand.Fleet; - - // validation - if (Fleet.Sector != null && Executor.Sector != Fleet.Sector) - Issuer.Log.Add(Executor.CreateLogMessage(Executor + " cannot join " + Fleet + " because they are not in the same sector.", LogMessages.LogMessageType.Warning)); - else if (Fleet.Owner != null && Fleet.Owner != Issuer && CreateFleetCommand == null) - Issuer.Log.Add(Executor.CreateLogMessage(Executor + " cannot join " + Fleet + " because this fleet does not belong to us.", LogMessages.LogMessageType.Warning)); - else - { - // remove from old fleet - if (Executor.Container != null) - Executor.Container.Vehicles.Remove(Executor); - - if (Fleet.Sector == null) - Fleet.Sector = Executor.Sector; - - // add to new fleet - Fleet.Vehicles.Add(Executor); - Executor.Container = Fleet; - } - } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - base.ReplaceClientIDs(idmap, done); - fleet.ReplaceClientIDs(idmap, done); - } - } - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; + +namespace FrEee.Objects.Commands +{ + /// + /// A command for a space vehicle to join a fleet. + /// + public class JoinFleetCommand : Command + { + public JoinFleetCommand(IMobileSpaceObject vehicle, Fleet fleet) + : base(vehicle) + { + Fleet = fleet; + } + + public JoinFleetCommand(IMobileSpaceObject vehicle, CreateFleetCommand cmd) + : base(vehicle) + { + CreateFleetCommand = cmd; + } + + public CreateFleetCommand CreateFleetCommand { get; set; } + + [DoNotSerialize] + public Fleet Fleet + { + get + { + return fleet == null || fleet.ID <= 0 ? (Fleet)CreateFleetCommand.Fleet : (Fleet)fleet; + } + set + { + if (!value.HasValidID()) + { + // HACK - why is the fleet beign disposed?! + value.IsDisposed = false; + value.ID = 0; + Galaxy.Current.AssignID(value); + } + fleet = value; + } + } + + private GalaxyReference fleet { get; set; } + + public override void Execute() + { + // if it's a new fleet, find it + if (CreateFleetCommand != null) + Fleet = CreateFleetCommand.Fleet; + + // validation + if (Fleet.Sector != null && Executor.Sector != Fleet.Sector) + Issuer.Log.Add(Executor.CreateLogMessage(Executor + " cannot join " + Fleet + " because they are not in the same sector.", LogMessages.LogMessageType.Warning)); + else if (Fleet.Owner != null && Fleet.Owner != Issuer && CreateFleetCommand == null) + Issuer.Log.Add(Executor.CreateLogMessage(Executor + " cannot join " + Fleet + " because this fleet does not belong to us.", LogMessages.LogMessageType.Warning)); + else + { + // remove from old fleet + if (Executor.Container != null) + Executor.Container.Vehicles.Remove(Executor); + + if (Fleet.Sector == null) + Fleet.Sector = Executor.Sector; + + // add to new fleet + Fleet.Vehicles.Add(Executor); + Executor.Container = Fleet; + } + } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + base.ReplaceClientIDs(idmap, done); + fleet.ReplaceClientIDs(idmap, done); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/LeaveFleetCommand.cs b/FrEee/Objects/Commands/LeaveFleetCommand.cs similarity index 83% rename from FrEee/Game/Objects/Commands/LeaveFleetCommand.cs rename to FrEee/Objects/Commands/LeaveFleetCommand.cs index 2e64c50fc..0c6d7fbf4 100644 --- a/FrEee/Game/Objects/Commands/LeaveFleetCommand.cs +++ b/FrEee/Objects/Commands/LeaveFleetCommand.cs @@ -1,31 +1,31 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command for a space vehicle to leave a fleet. - /// - public class LeaveFleetCommand : Command - { - public LeaveFleetCommand(IMobileSpaceObject vehicle) - : base(vehicle) - { - } - - public override void Execute() - { - // validation - if (Executor.Container == null) - Issuer.Log.Add(Executor.CreateLogMessage(Executor + " cannot leave its fleet because it is not currently in a fleet.", LogMessages.LogMessageType.Error)); - else - { - // remove from fleet - var f = Executor.Container; - f.Vehicles.Remove(Executor); - Executor.Container = null; - f.Sector.Place(Executor); - } - } - } +using FrEee.Interfaces; +using FrEee.Extensions; + +namespace FrEee.Objects.Commands +{ + /// + /// A command for a space vehicle to leave a fleet. + /// + public class LeaveFleetCommand : Command + { + public LeaveFleetCommand(IMobileSpaceObject vehicle) + : base(vehicle) + { + } + + public override void Execute() + { + // validation + if (Executor.Container == null) + Issuer.Log.Add(Executor.CreateLogMessage(Executor + " cannot leave its fleet because it is not currently in a fleet.", LogMessages.LogMessageType.Error)); + else + { + // remove from fleet + var f = Executor.Container; + f.Vehicles.Remove(Executor); + Executor.Container = null; + f.Sector.Place(Executor); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/MinisterToggleCommand.cs b/FrEee/Objects/Commands/MinisterToggleCommand.cs similarity index 72% rename from FrEee/Game/Objects/Commands/MinisterToggleCommand.cs rename to FrEee/Objects/Commands/MinisterToggleCommand.cs index 29971b0d3..e730e65d3 100644 --- a/FrEee/Game/Objects/Commands/MinisterToggleCommand.cs +++ b/FrEee/Objects/Commands/MinisterToggleCommand.cs @@ -1,29 +1,29 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Clears a player note. - /// - public class ClearPlayerNoteCommand : Command - { - public ClearPlayerNoteCommand(IReferrable target) - : base(Empire.Current) - { - Target = target; - } - - [DoNotSerialize] - public IReferrable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } - - private GalaxyReference target { get; set; } - - public override void Execute() - { - Executor.PlayerNotes.Remove(target); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Commands +{ + /// + /// Clears a player note. + /// + public class ClearPlayerNoteCommand : Command + { + public ClearPlayerNoteCommand(IReferrable target) + : base(Empire.Current) + { + Target = target; + } + + [DoNotSerialize] + public IReferrable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } + + private GalaxyReference target { get; set; } + + public override void Execute() + { + Executor.PlayerNotes.Remove(target); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/OrderCommand.cs b/FrEee/Objects/Commands/OrderCommand.cs similarity index 84% rename from FrEee/Game/Objects/Commands/OrderCommand.cs rename to FrEee/Objects/Commands/OrderCommand.cs index 80161f275..dc7ee6a9d 100644 --- a/FrEee/Game/Objects/Commands/OrderCommand.cs +++ b/FrEee/Objects/Commands/OrderCommand.cs @@ -1,50 +1,50 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command to manipulate an object's order queue. - /// - /// - /// - [Serializable] - public abstract class OrderCommand : Command, IOrderCommand - { - protected OrderCommand(IOrderable target, IOrder order) - : base(target) - { - Order = order; - } - - [DoNotSerialize] - public virtual IOrder Order - { - get - { - return order.Value; - } - set - { - order = value.ReferViaGalaxy(); - } - } - - private GalaxyReference order { get; set; } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - base.ReplaceClientIDs(idmap, done); - order.ReplaceClientIDs(idmap, done); - } - } - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.Commands +{ + /// + /// A command to manipulate an object's order queue. + /// + /// + /// + [Serializable] + public abstract class OrderCommand : Command, IOrderCommand + { + protected OrderCommand(IOrderable target, IOrder order) + : base(target) + { + Order = order; + } + + [DoNotSerialize] + public virtual IOrder Order + { + get + { + return order.Value; + } + set + { + order = value.ReferViaGalaxy(); + } + } + + private GalaxyReference order { get; set; } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + base.ReplaceClientIDs(idmap, done); + order.ReplaceClientIDs(idmap, done); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/RearrangeOrdersCommand.cs b/FrEee/Objects/Commands/RearrangeOrdersCommand.cs similarity index 82% rename from FrEee/Game/Objects/Commands/RearrangeOrdersCommand.cs rename to FrEee/Objects/Commands/RearrangeOrdersCommand.cs index 4289c814d..b4da92ea4 100644 --- a/FrEee/Game/Objects/Commands/RearrangeOrdersCommand.cs +++ b/FrEee/Objects/Commands/RearrangeOrdersCommand.cs @@ -1,43 +1,43 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using System; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Moves an order to another location in the queue. - /// - /// - [Serializable] - public class RearrangeOrdersCommand : OrderCommand - where T : IOrderable - { - public RearrangeOrdersCommand(T target, IOrder order, int deltaPosition) - : base(target, order) - { - DeltaPosition = deltaPosition; - } - - /// - /// How many spaces up (if negative) or down (if positive) to move the order. - /// - public int DeltaPosition - { - get; - set; - } - - public override void Execute() - { - if (Issuer == Executor.Owner) - { - Executor.RearrangeOrder(Order, DeltaPosition); - } - else - { - Issuer.Log.Add(new GenericLogMessage(Issuer + " cannot issue commands to " + Executor + " belonging to " + Executor.Owner + "!", Galaxy.Current.TurnNumber)); - } - } - } +using FrEee.Interfaces; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using System; + +namespace FrEee.Objects.Commands +{ + /// + /// Moves an order to another location in the queue. + /// + /// + [Serializable] + public class RearrangeOrdersCommand : OrderCommand + where T : IOrderable + { + public RearrangeOrdersCommand(T target, IOrder order, int deltaPosition) + : base(target, order) + { + DeltaPosition = deltaPosition; + } + + /// + /// How many spaces up (if negative) or down (if positive) to move the order. + /// + public int DeltaPosition + { + get; + set; + } + + public override void Execute() + { + if (Issuer == Executor.Owner) + { + Executor.RearrangeOrder(Order, DeltaPosition); + } + else + { + Issuer.Log.Add(new GenericLogMessage(Issuer + " cannot issue commands to " + Executor + " belonging to " + Executor.Owner + "!", Galaxy.Current.TurnNumber)); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/RemoveOrderCommand.cs b/FrEee/Objects/Commands/RemoveOrderCommand.cs similarity index 86% rename from FrEee/Game/Objects/Commands/RemoveOrderCommand.cs rename to FrEee/Objects/Commands/RemoveOrderCommand.cs index c7c8f3e54..b4d0bb09c 100644 --- a/FrEee/Game/Objects/Commands/RemoveOrderCommand.cs +++ b/FrEee/Objects/Commands/RemoveOrderCommand.cs @@ -1,38 +1,38 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Removes an order from the queue. - /// - /// - [Serializable] - public class RemoveOrderCommand : OrderCommand - { - public RemoveOrderCommand(IOrderable target, IOrder order) - : base(target, order) - { - } - - public override void Execute() - { - if (Order == null) - Issuer.Log.Add(new GenericLogMessage("The server attempted to remove a null order from " + Executor + ". Perhaps this order was not actually on the server yet; it was just added and removed this past turn. This is probably a game bug.")); - else if (Order.IsNew()) - Issuer.Log.Add(new GenericLogMessage("The server attempted to remove an order from " + Executor + " that was not actually on the server; it was just added and removed this past turn. This is probably a game bug.")); - else if (Executor == null) - Issuer.Log.Add(new GenericLogMessage("On your previous turn, you attempted to remove an order from an object with ID #" + executor.ID + ", but no such object exists. This is probably a game bug.")); - else if (Issuer == Executor.Owner) - { - Executor.RemoveOrder(Order); - Galaxy.Current.UnassignID(Order); - } - else - Issuer.Log.Add(new GenericLogMessage(Issuer + " cannot issue commands to " + Executor + " belonging to " + Executor.Owner + "!", Galaxy.Current.TurnNumber)); - } - } +using FrEee.Interfaces; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Extensions; +using System; + +namespace FrEee.Objects.Commands +{ + /// + /// Removes an order from the queue. + /// + /// + [Serializable] + public class RemoveOrderCommand : OrderCommand + { + public RemoveOrderCommand(IOrderable target, IOrder order) + : base(target, order) + { + } + + public override void Execute() + { + if (Order == null) + Issuer.Log.Add(new GenericLogMessage("The server attempted to remove a null order from " + Executor + ". Perhaps this order was not actually on the server yet; it was just added and removed this past turn. This is probably a game bug.")); + else if (Order.IsNew()) + Issuer.Log.Add(new GenericLogMessage("The server attempted to remove an order from " + Executor + " that was not actually on the server; it was just added and removed this past turn. This is probably a game bug.")); + else if (Executor == null) + Issuer.Log.Add(new GenericLogMessage("On your previous turn, you attempted to remove an order from an object with ID #" + executor.ID + ", but no such object exists. This is probably a game bug.")); + else if (Issuer == Executor.Owner) + { + Executor.RemoveOrder(Order); + Galaxy.Current.UnassignID(Order); + } + else + Issuer.Log.Add(new GenericLogMessage(Issuer + " cannot issue commands to " + Executor + " belonging to " + Executor.Owner + "!", Galaxy.Current.TurnNumber)); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/ResearchCommand.cs b/FrEee/Objects/Commands/ResearchCommand.cs similarity index 84% rename from FrEee/Game/Objects/Commands/ResearchCommand.cs rename to FrEee/Objects/Commands/ResearchCommand.cs index a6ce2da4d..9f329d7c5 100644 --- a/FrEee/Game/Objects/Commands/ResearchCommand.cs +++ b/FrEee/Objects/Commands/ResearchCommand.cs @@ -1,57 +1,57 @@ -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Linq; -using Tech = FrEee.Game.Objects.Technology.Technology; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Command to set an empire's research priorities. - /// - public class ResearchCommand : Command - { - public ResearchCommand() - : base(Empire.Current) - { - Spending = new ModReferenceKeyedDictionary(); - Queue = new ModReferenceList(); - } - - public ModReferenceList Queue { get; private set; } - public ModReferenceKeyedDictionary Spending { get; private set; } - - public override void Execute() - { - // make sure spending is not over 100% - var totalSpending = Spending.Sum(kvp => kvp.Value); - if (totalSpending > 100) - { - foreach (var kvp in Spending.ToArray()) - { - Spending[kvp.Key] = kvp.Value / totalSpending / 100; - } - } - - // make sure no techs are prioritized or queued that the empire can't research - foreach (var kvp in Spending.ToArray()) - { - if (!Executor.HasUnlocked(kvp.Key)) - Spending[kvp.Key] = 0; - } - foreach (Technology.Technology tech in Queue.ToArray()) - { - if (!Executor.HasUnlocked(tech)) - Queue.Remove(tech); - } - - // save to empire - Executor.ResearchSpending.Clear(); - foreach (var kvp in Spending) - Executor.ResearchSpending.Add(kvp); - Executor.ResearchQueue.Clear(); - foreach (var tech in Queue) - Executor.ResearchQueue.Add(tech); - } - } +using FrEee.Objects.Civilization; +using FrEee.Serialization; +using FrEee.Extensions; +using System.Linq; +using Tech = FrEee.Objects.Technology.Technology; + +namespace FrEee.Objects.Commands +{ + /// + /// Command to set an empire's research priorities. + /// + public class ResearchCommand : Command + { + public ResearchCommand() + : base(Empire.Current) + { + Spending = new ModReferenceKeyedDictionary(); + Queue = new ModReferenceList(); + } + + public ModReferenceList Queue { get; private set; } + public ModReferenceKeyedDictionary Spending { get; private set; } + + public override void Execute() + { + // make sure spending is not over 100% + var totalSpending = Spending.Sum(kvp => kvp.Value); + if (totalSpending > 100) + { + foreach (var kvp in Spending.ToArray()) + { + Spending[kvp.Key] = kvp.Value / totalSpending / 100; + } + } + + // make sure no techs are prioritized or queued that the empire can't research + foreach (var kvp in Spending.ToArray()) + { + if (!Executor.HasUnlocked(kvp.Key)) + Spending[kvp.Key] = 0; + } + foreach (Technology.Technology tech in Queue.ToArray()) + { + if (!Executor.HasUnlocked(tech)) + Queue.Remove(tech); + } + + // save to empire + Executor.ResearchSpending.Clear(); + foreach (var kvp in Spending) + Executor.ResearchSpending.Add(kvp); + Executor.ResearchQueue.Clear(); + foreach (var tech in Queue) + Executor.ResearchQueue.Add(tech); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/SendMessageCommand.cs b/FrEee/Objects/Commands/SendMessageCommand.cs similarity index 84% rename from FrEee/Game/Objects/Commands/SendMessageCommand.cs rename to FrEee/Objects/Commands/SendMessageCommand.cs index 195898be5..9cfecdaad 100644 --- a/FrEee/Game/Objects/Commands/SendMessageCommand.cs +++ b/FrEee/Objects/Commands/SendMessageCommand.cs @@ -1,57 +1,57 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Civilization.Diplomacy; -using FrEee.Utility.Extensions; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command to send a diplomatic message. - /// - public class SendMessageCommand : Command - { - public SendMessageCommand(IMessage message) - : base(Empire.Current) - { - Message = message; - } - - public IMessage Message { get; set; } - - public override IEnumerable NewReferrables - { - get - { - foreach (var r in base.NewReferrables) - yield return r; - yield return Message; - } - } - - public override void Execute() - { - Message.Owner.SentMessages.Add(Message); - // TODO - comms interference intel projects - Message.Recipient.IncomingMessages.Add(Message); - Message.Recipient.Log.Add(Message.CreateLogMessage("We have received a diplomatic message from the " + Message.Owner + ": " + Message.Text, LogMessages.LogMessageType.Diplomacy)); - if (Message is ActionMessage) - { - // execute unilateral action - ((ActionMessage)Message).Action.Execute(); - } - } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - base.ReplaceClientIDs(idmap, done); - Message.ReplaceClientIDs(idmap, done); - } - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Civilization.Diplomacy; +using FrEee.Extensions; +using System.Collections.Generic; + +namespace FrEee.Objects.Commands +{ + /// + /// A command to send a diplomatic message. + /// + public class SendMessageCommand : Command + { + public SendMessageCommand(IMessage message) + : base(Empire.Current) + { + Message = message; + } + + public IMessage Message { get; set; } + + public override IEnumerable NewReferrables + { + get + { + foreach (var r in base.NewReferrables) + yield return r; + yield return Message; + } + } + + public override void Execute() + { + Message.Owner.SentMessages.Add(Message); + // TODO - comms interference intel projects + Message.Recipient.IncomingMessages.Add(Message); + Message.Recipient.Log.Add(Message.CreateLogMessage("We have received a diplomatic message from the " + Message.Owner + ": " + Message.Text, LogMessages.LogMessageType.Diplomacy)); + if (Message is ActionMessage) + { + // execute unilateral action + ((ActionMessage)Message).Action.Execute(); + } + } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + base.ReplaceClientIDs(idmap, done); + Message.ReplaceClientIDs(idmap, done); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/SetObsoleteFlagCommand.cs b/FrEee/Objects/Commands/SetObsoleteFlagCommand.cs similarity index 90% rename from FrEee/Game/Objects/Commands/SetObsoleteFlagCommand.cs rename to FrEee/Objects/Commands/SetObsoleteFlagCommand.cs index ee7b6fa6b..43759cb6b 100644 --- a/FrEee/Game/Objects/Commands/SetObsoleteFlagCommand.cs +++ b/FrEee/Objects/Commands/SetObsoleteFlagCommand.cs @@ -1,76 +1,76 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// A command to enable or disable the obsolete flag on a design. - /// - public class SetObsoleteFlagCommand : Command - { - public SetObsoleteFlagCommand(IDesign design, bool isObsolete) - : base(design) - { - if (design.IsNew) - NewDesign = design; - else - Design = design; - IsObsolete = isObsolete; - } - - /// - /// The design to set the flag on if it's already knwon by the server. - /// - [DoNotSerialize] - public IDesign Design { get { return design?.Value; } set { design = value.ReferViaGalaxy(); } } - - /// - /// The flag state to set. - /// - public bool IsObsolete { get; set; } - - /// - /// The design to set the flag on if it's only in the library and not in the game or it's a brand new design. - /// - public IDesign NewDesign { get; set; } - - public override IEnumerable NewReferrables - { - get - { - if (NewDesign != null) - yield return NewDesign; - } - } - - private GalaxyReference design { get; set; } - - public override void Execute() - { - if (NewDesign != null) - { - // allows obsoleting designs that are on the library or newly created (not on the server yet) - Issuer.KnownDesigns.Add(NewDesign); - Design = NewDesign; - } - Design.IsObsolete = IsObsolete; - } - - public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - base.ReplaceClientIDs(idmap, done); - if (design != null) - design.ReplaceClientIDs(idmap, done); - if (NewDesign != null) - NewDesign.ReplaceClientIDs(idmap, done); - } - } - } +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; + +namespace FrEee.Objects.Commands +{ + /// + /// A command to enable or disable the obsolete flag on a design. + /// + public class SetObsoleteFlagCommand : Command + { + public SetObsoleteFlagCommand(IDesign design, bool isObsolete) + : base(design) + { + if (design.IsNew) + NewDesign = design; + else + Design = design; + IsObsolete = isObsolete; + } + + /// + /// The design to set the flag on if it's already knwon by the server. + /// + [DoNotSerialize] + public IDesign Design { get { return design?.Value; } set { design = value.ReferViaGalaxy(); } } + + /// + /// The flag state to set. + /// + public bool IsObsolete { get; set; } + + /// + /// The design to set the flag on if it's only in the library and not in the game or it's a brand new design. + /// + public IDesign NewDesign { get; set; } + + public override IEnumerable NewReferrables + { + get + { + if (NewDesign != null) + yield return NewDesign; + } + } + + private GalaxyReference design { get; set; } + + public override void Execute() + { + if (NewDesign != null) + { + // allows obsoleting designs that are on the library or newly created (not on the server yet) + Issuer.KnownDesigns.Add(NewDesign); + Design = NewDesign; + } + Design.IsObsolete = IsObsolete; + } + + public override void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + base.ReplaceClientIDs(idmap, done); + if (design != null) + design.ReplaceClientIDs(idmap, done); + if (NewDesign != null) + NewDesign.ReplaceClientIDs(idmap, done); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/SetPlayerInfoCommand.cs b/FrEee/Objects/Commands/SetPlayerInfoCommand.cs similarity index 71% rename from FrEee/Game/Objects/Commands/SetPlayerInfoCommand.cs rename to FrEee/Objects/Commands/SetPlayerInfoCommand.cs index c412929d8..07fdab205 100644 --- a/FrEee/Game/Objects/Commands/SetPlayerInfoCommand.cs +++ b/FrEee/Objects/Commands/SetPlayerInfoCommand.cs @@ -1,37 +1,37 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Sets the player info for an empire. - /// - /// - [Serializable] - public class SetPlayerInfoCommand: Command - { - public SetPlayerInfoCommand(Empire target) - : base(target) - { - } - - public override IEnumerable NewReferrables - { - get - { - yield break; - } - } - - public override void Execute() - { - Executor.PlayerInfo = PlayerInfo; - } - - public PlayerInfo PlayerInfo { get; set; } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.Commands +{ + /// + /// Sets the player info for an empire. + /// + /// + [Serializable] + public class SetPlayerInfoCommand: Command + { + public SetPlayerInfoCommand(Empire target) + : base(target) + { + } + + public override IEnumerable NewReferrables + { + get + { + yield break; + } + } + + public override void Execute() + { + Executor.PlayerInfo = PlayerInfo; + } + + public PlayerInfo PlayerInfo { get; set; } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/SetPlayerNoteCommand.cs b/FrEee/Objects/Commands/SetPlayerNoteCommand.cs similarity index 74% rename from FrEee/Game/Objects/Commands/SetPlayerNoteCommand.cs rename to FrEee/Objects/Commands/SetPlayerNoteCommand.cs index 8f5ee6ea4..325ecd69b 100644 --- a/FrEee/Game/Objects/Commands/SetPlayerNoteCommand.cs +++ b/FrEee/Objects/Commands/SetPlayerNoteCommand.cs @@ -1,32 +1,32 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Sets a player note. - /// - public class SetPlayerNoteCommand : Command - { - public SetPlayerNoteCommand(IReferrable target, string note) - : base(Empire.Current) - { - Target = target; - Note = note; - } - - public string Note { get; set; } - - [DoNotSerialize] - public IReferrable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } - - private GalaxyReference target { get; set; } - - public override void Execute() - { - Executor.PlayerNotes[target] = Note; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Commands +{ + /// + /// Sets a player note. + /// + public class SetPlayerNoteCommand : Command + { + public SetPlayerNoteCommand(IReferrable target, string note) + : base(Empire.Current) + { + Target = target; + Note = note; + } + + public string Note { get; set; } + + [DoNotSerialize] + public IReferrable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } + + private GalaxyReference target { get; set; } + + public override void Execute() + { + Executor.PlayerNotes[target] = Note; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/SetPrivateNameCommand.cs b/FrEee/Objects/Commands/SetPrivateNameCommand.cs similarity index 77% rename from FrEee/Game/Objects/Commands/SetPrivateNameCommand.cs rename to FrEee/Objects/Commands/SetPrivateNameCommand.cs index f923f017b..9485d7d32 100644 --- a/FrEee/Game/Objects/Commands/SetPrivateNameCommand.cs +++ b/FrEee/Objects/Commands/SetPrivateNameCommand.cs @@ -1,37 +1,37 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Sets the private name for an object. - /// - public class SetPrivateNameCommand : Command - { - public SetPrivateNameCommand(Empire empire, INameable target, string name) - : base(empire) - { - Target = target; - } - - /// - /// The name to set. - /// - public string Name { get; set; } - - /// - /// What are we clearing the name on? - /// - [DoNotSerialize] - public INameable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } - - private GalaxyReference target { get; set; } - - public override void Execute() - { - Executor.PrivateNames[target] = Name; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Commands +{ + /// + /// Sets the private name for an object. + /// + public class SetPrivateNameCommand : Command + { + public SetPrivateNameCommand(Empire empire, INameable target, string name) + : base(empire) + { + Target = target; + } + + /// + /// The name to set. + /// + public string Name { get; set; } + + /// + /// What are we clearing the name on? + /// + [DoNotSerialize] + public INameable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } + + private GalaxyReference target { get; set; } + + public override void Execute() + { + Executor.PrivateNames[target] = Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/SetPublicNameCommand.cs b/FrEee/Objects/Commands/SetPublicNameCommand.cs similarity index 80% rename from FrEee/Game/Objects/Commands/SetPublicNameCommand.cs rename to FrEee/Objects/Commands/SetPublicNameCommand.cs index 553328d3d..4d3cc760a 100644 --- a/FrEee/Game/Objects/Commands/SetPublicNameCommand.cs +++ b/FrEee/Objects/Commands/SetPublicNameCommand.cs @@ -1,26 +1,26 @@ -using FrEee.Game.Interfaces; - -namespace FrEee.Game.Objects.Commands -{ - /// - /// Sets the name of an object. - /// - public class SetPublicNameCommand : Command - { - public SetPublicNameCommand(INameable target, string name) - : base(target) - { - Name = name; - } - - /// - /// The name to set. - /// - public string Name { get; set; } - - public override void Execute() - { - Executor.Name = Name; - } - } +using FrEee.Interfaces; + +namespace FrEee.Objects.Commands +{ + /// + /// Sets the name of an object. + /// + public class SetPublicNameCommand : Command + { + public SetPublicNameCommand(INameable target, string name) + : base(target) + { + Name = name; + } + + /// + /// The name to set. + /// + public string Name { get; set; } + + public override void Execute() + { + Executor.Name = Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Commands/ToggleOrdersOnHoldCommand.cs b/FrEee/Objects/Commands/ToggleOrdersOnHoldCommand.cs similarity index 82% rename from FrEee/Game/Objects/Commands/ToggleOrdersOnHoldCommand.cs rename to FrEee/Objects/Commands/ToggleOrdersOnHoldCommand.cs index 4b8d22d3e..db9924fdb 100644 --- a/FrEee/Game/Objects/Commands/ToggleOrdersOnHoldCommand.cs +++ b/FrEee/Objects/Commands/ToggleOrdersOnHoldCommand.cs @@ -1,25 +1,25 @@ -using FrEee.Game.Interfaces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Game.Objects.Commands -{ - public class ToggleOrdersOnHoldCommand : Command - { - public ToggleOrdersOnHoldCommand(IOrderable target, bool areOrdersOnHold) - : base(target) - { - AreOrdersOnHold = areOrdersOnHold; - } - - public bool AreOrdersOnHold { get; set; } - - public override void Execute() - { - Executor.AreOrdersOnHold = AreOrdersOnHold; - } - } -} +using FrEee.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Objects.Commands +{ + public class ToggleOrdersOnHoldCommand : Command + { + public ToggleOrdersOnHoldCommand(IOrderable target, bool areOrdersOnHold) + : base(target) + { + AreOrdersOnHold = areOrdersOnHold; + } + + public bool AreOrdersOnHold { get; set; } + + public override void Execute() + { + Executor.AreOrdersOnHold = AreOrdersOnHold; + } + } +} diff --git a/FrEee/Game/Objects/Commands/ToggleRepeatOrdersCommand.cs b/FrEee/Objects/Commands/ToggleRepeatOrdersCommand.cs similarity index 84% rename from FrEee/Game/Objects/Commands/ToggleRepeatOrdersCommand.cs rename to FrEee/Objects/Commands/ToggleRepeatOrdersCommand.cs index 7ff8615ff..9f84e07f0 100644 --- a/FrEee/Game/Objects/Commands/ToggleRepeatOrdersCommand.cs +++ b/FrEee/Objects/Commands/ToggleRepeatOrdersCommand.cs @@ -1,25 +1,25 @@ -using FrEee.Game.Interfaces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Game.Objects.Commands -{ - public class ToggleRepeatOrdersCommand : Command - { - public ToggleRepeatOrdersCommand(IOrderable target, bool areRepeatOrdersEnabled) - : base(target) - { - AreRepeatOrdersEnabled = areRepeatOrdersEnabled; - } - - public bool AreRepeatOrdersEnabled { get; set; } - - public override void Execute() - { - Executor.AreRepeatOrdersEnabled = AreRepeatOrdersEnabled; - } - } -} +using FrEee.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Objects.Commands +{ + public class ToggleRepeatOrdersCommand : Command + { + public ToggleRepeatOrdersCommand(IOrderable target, bool areRepeatOrdersEnabled) + : base(target) + { + AreRepeatOrdersEnabled = areRepeatOrdersEnabled; + } + + public bool AreRepeatOrdersEnabled { get; set; } + + public override void Execute() + { + Executor.AreRepeatOrdersEnabled = AreRepeatOrdersEnabled; + } + } +} diff --git a/FrEee/Game/Objects/Events/Event.cs b/FrEee/Objects/Events/Event.cs similarity index 91% rename from FrEee/Game/Objects/Events/Event.cs rename to FrEee/Objects/Events/Event.cs index 307c38200..70144f6a8 100644 --- a/FrEee/Game/Objects/Events/Event.cs +++ b/FrEee/Objects/Events/Event.cs @@ -1,159 +1,159 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; - -namespace FrEee.Game.Objects.Events -{ - /// - /// A specific occurrence of a random event. - /// - public class Event : IPictorial - { - public Event(EventTemplate t) - { - Template = t; - TurnNumber = Galaxy.Current.TurnNumber + Template.TimeTillCompletion.Value; - Dice = new PRNG(GetHashCode()); - } - - /// - /// The empires which are affected by this event and need log messages. - /// - public IEnumerable AffectedEmpires - { - get - { - // TODO - affected empires only - return Galaxy.Current.Empires; - } - } - - public Image Icon => Pictures.GetModImage(IconPaths.ToArray()); - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths => PortraitPaths; - - public Image Portrait => Pictures.GetModImage(PortraitPaths.ToArray()); - - public IEnumerable PortraitPaths - { - get - { - yield return Path.Combine("Events", Template.Picture); - } - } - - /// - /// The object affected by this script. - /// - public IReferrable Target { get; private set; } - - /// - /// The template for this event. - /// - public EventTemplate Template { get; private set; } - - /// - /// The turn number on which this event occurs.s - /// - public int TurnNumber { get; private set; } - - /// - /// Makes this event happen right now. - /// - public void Execute() - { - foreach (var m in Template.OccurrenceMessages) - { - foreach (var emp in AffectedEmpires) - { - var context = new SafeDictionary(); - var text = m.Text.Evaluate(context); - emp.RecordLog(this, text, LogMessages.LogMessageType.Generic); - } - } - - var dict = new SafeDictionary(); - dict.Add("target", Target); - // SE4/SE5 style replacement strings turn into dynamic formulas - var regex = new Regex(@"\[\%(.*?)\%?\]"); - var matches = regex.Matches(Template.Type.Action.Text); - foreach (Match m in matches) - dict.Add(m.Captures[0].Value, new ComputedFormula(m.Captures[0].Value, this, true).Value); - PythonScriptEngine.RunScript(Template.Type.Action, dict); - } - - /// - /// Picks a target for this event. - /// - private void RollTarget() - { - Target = Template.Type.TargetSelector.Evaluate(this).PickRandom(Dice); - } - - /// - /// A random number generator. - /// - private PRNG Dice { get; } - - /// - /// Warns players who should know about this event. - /// - public void Warn() - { - // try to find a target but don't try too hard (roll up to 10 times) - bool hasTarget = true; - for (var i = 0; i < 10; i++) - { - RollTarget(); - if (Target == null) - break; // no suitable targets - hasTarget = true; - - foreach (var p in AffectedEmpires) - { - if (RandomHelper.PercentageChance(p.GetAbilityValue("Luck").ToInt() - p.GetAbilityValue("Change Bad Event Chance - Empire").ToInt(), Dice)) - hasTarget = false; - if (Target is ILocated l) - { - if (RandomHelper.PercentageChance(-l.StarSystem.GetEmpireAbilityValue(p, "Change Bad Event Chance - System").ToInt(), Dice)) - hasTarget = false; - if (RandomHelper.PercentageChance(-l.Sector.GetEmpireAbilityValue(p, "Change Bad Event Chance - Sector").ToInt(), Dice)) - hasTarget = false; - } - } - if (hasTarget) - break; - } - if (!hasTarget) - { - Target = null; - return; // give up on picking a target - } - - foreach (var m in Template.WarningMessages) - { - foreach (var emp in AffectedEmpires) - { - var context = new SafeDictionary(); - var text = m.Text.Evaluate(context); - emp.RecordLog(this, text, LogMessages.LogMessageType.Generic); - } - } - } - - public override string ToString() - { - return $"{Template} targeting {Target} at turn {TurnNumber}"; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; + +namespace FrEee.Objects.Events +{ + /// + /// A specific occurrence of a random event. + /// + public class Event : IPictorial + { + public Event(EventTemplate t) + { + Template = t; + TurnNumber = Galaxy.Current.TurnNumber + Template.TimeTillCompletion.Value; + Dice = new PRNG(GetHashCode()); + } + + /// + /// The empires which are affected by this event and need log messages. + /// + public IEnumerable AffectedEmpires + { + get + { + // TODO - affected empires only + return Galaxy.Current.Empires; + } + } + + public Image Icon => Pictures.GetModImage(IconPaths.ToArray()); + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths => PortraitPaths; + + public Image Portrait => Pictures.GetModImage(PortraitPaths.ToArray()); + + public IEnumerable PortraitPaths + { + get + { + yield return Path.Combine("Events", Template.Picture); + } + } + + /// + /// The object affected by this script. + /// + public IReferrable Target { get; private set; } + + /// + /// The template for this event. + /// + public EventTemplate Template { get; private set; } + + /// + /// The turn number on which this event occurs.s + /// + public int TurnNumber { get; private set; } + + /// + /// Makes this event happen right now. + /// + public void Execute() + { + foreach (var m in Template.OccurrenceMessages) + { + foreach (var emp in AffectedEmpires) + { + var context = new SafeDictionary(); + var text = m.Text.Evaluate(context); + emp.RecordLog(this, text, LogMessages.LogMessageType.Generic); + } + } + + var dict = new SafeDictionary(); + dict.Add("target", Target); + // SE4/SE5 style replacement strings turn into dynamic formulas + var regex = new Regex(@"\[\%(.*?)\%?\]"); + var matches = regex.Matches(Template.Type.Action.Text); + foreach (Match m in matches) + dict.Add(m.Captures[0].Value, new ComputedFormula(m.Captures[0].Value, this, true).Value); + PythonScriptEngine.RunScript(Template.Type.Action, dict); + } + + /// + /// Picks a target for this event. + /// + private void RollTarget() + { + Target = Template.Type.TargetSelector.Evaluate(this).PickRandom(Dice); + } + + /// + /// A random number generator. + /// + private PRNG Dice { get; } + + /// + /// Warns players who should know about this event. + /// + public void Warn() + { + // try to find a target but don't try too hard (roll up to 10 times) + bool hasTarget = true; + for (var i = 0; i < 10; i++) + { + RollTarget(); + if (Target == null) + break; // no suitable targets + hasTarget = true; + + foreach (var p in AffectedEmpires) + { + if (RandomHelper.PercentageChance(p.GetAbilityValue("Luck").ToInt() - p.GetAbilityValue("Change Bad Event Chance - Empire").ToInt(), Dice)) + hasTarget = false; + if (Target is ILocated l) + { + if (RandomHelper.PercentageChance(-l.StarSystem.GetEmpireAbilityValue(p, "Change Bad Event Chance - System").ToInt(), Dice)) + hasTarget = false; + if (RandomHelper.PercentageChance(-l.Sector.GetEmpireAbilityValue(p, "Change Bad Event Chance - Sector").ToInt(), Dice)) + hasTarget = false; + } + } + if (hasTarget) + break; + } + if (!hasTarget) + { + Target = null; + return; // give up on picking a target + } + + foreach (var m in Template.WarningMessages) + { + foreach (var emp in AffectedEmpires) + { + var context = new SafeDictionary(); + var text = m.Text.Evaluate(context); + emp.RecordLog(this, text, LogMessages.LogMessageType.Generic); + } + } + } + + public override string ToString() + { + return $"{Template} targeting {Target} at turn {TurnNumber}"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Events/EventMessage.cs b/FrEee/Objects/Events/EventMessage.cs similarity index 87% rename from FrEee/Game/Objects/Events/EventMessage.cs rename to FrEee/Objects/Events/EventMessage.cs index db6b175a7..9aee117cb 100644 --- a/FrEee/Game/Objects/Events/EventMessage.cs +++ b/FrEee/Objects/Events/EventMessage.cs @@ -1,18 +1,18 @@ -using FrEee.Modding.Interfaces; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Game.Objects.Events -{ - /// - /// A message sent to a player when an event is triggered. - /// - public class EventMessage - { - public IFormula Title { get; set; } - public IFormula Text { get; set; } - } -} +using FrEee.Modding.Interfaces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Objects.Events +{ + /// + /// A message sent to a player when an event is triggered. + /// + public class EventMessage + { + public IFormula Title { get; set; } + public IFormula Text { get; set; } + } +} diff --git a/FrEee/Game/Objects/LogMessages/GenericLogMessage.cs b/FrEee/Objects/LogMessages/GenericLogMessage.cs similarity index 89% rename from FrEee/Game/Objects/LogMessages/GenericLogMessage.cs rename to FrEee/Objects/LogMessages/GenericLogMessage.cs index 2bb43f630..fdec9df9d 100644 --- a/FrEee/Game/Objects/LogMessages/GenericLogMessage.cs +++ b/FrEee/Objects/LogMessages/GenericLogMessage.cs @@ -1,24 +1,24 @@ -using System; - -namespace FrEee.Game.Objects.LogMessages -{ - /// - /// A generic text log message with no picture. - /// - [Serializable] - public class GenericLogMessage : LogMessage - { - public GenericLogMessage(string text, LogMessageType logMessageType = LogMessageType.Generic) - : base(text, logMessageType) - { - } - - public GenericLogMessage(string text, int turn, LogMessageType logMessageType = LogMessageType.Generic) : base(text, turn, logMessageType) - { } - - public override System.Drawing.Image Picture - { - get { return null; } - } - } +using System; + +namespace FrEee.Objects.LogMessages +{ + /// + /// A generic text log message with no picture. + /// + [Serializable] + public class GenericLogMessage : LogMessage + { + public GenericLogMessage(string text, LogMessageType logMessageType = LogMessageType.Generic) + : base(text, logMessageType) + { + } + + public GenericLogMessage(string text, int turn, LogMessageType logMessageType = LogMessageType.Generic) : base(text, turn, logMessageType) + { } + + public override System.Drawing.Image Picture + { + get { return null; } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/LogMessages/LogMessage.cs b/FrEee/Objects/LogMessages/LogMessage.cs similarity index 89% rename from FrEee/Game/Objects/LogMessages/LogMessage.cs rename to FrEee/Objects/LogMessages/LogMessage.cs index 77f513b0b..d33a70a57 100644 --- a/FrEee/Game/Objects/LogMessages/LogMessage.cs +++ b/FrEee/Objects/LogMessages/LogMessage.cs @@ -1,58 +1,58 @@ -using FrEee.Game.Objects.Space; -using System; -using System.Drawing; - -namespace FrEee.Game.Objects.LogMessages -{ - [Serializable] - public abstract class LogMessage - { - protected LogMessage(string text, LogMessageType logMessageType) - { - Text = text; - TurnNumber = Galaxy.Current.TurnNumber; - LogMessageType = logMessageType; - } - - protected LogMessage(string text, int turn, LogMessageType logMessageType) - { - Text = text; - TurnNumber = turn; - LogMessageType =logMessageType; - } - - /// - /// A picture to display with the log message. - /// - public abstract Image Picture { get; } - - /// - /// The text of the log message. - /// - public string Text { get; set; } - - /// - /// The turn number on which the log message was generated. - /// - public int TurnNumber { get; set; } - - /// - /// The type of this message. - /// - public LogMessageType LogMessageType { get; set; } - - - } - public enum LogMessageType - { - Generic, - Error, - Warning, - ResearchComplete, - ConstructionComplete, - PlanetColonised, - Battle, - Victory, - Diplomacy, - } +using FrEee.Objects.Space; +using System; +using System.Drawing; + +namespace FrEee.Objects.LogMessages +{ + [Serializable] + public abstract class LogMessage + { + protected LogMessage(string text, LogMessageType logMessageType) + { + Text = text; + TurnNumber = Galaxy.Current.TurnNumber; + LogMessageType = logMessageType; + } + + protected LogMessage(string text, int turn, LogMessageType logMessageType) + { + Text = text; + TurnNumber = turn; + LogMessageType =logMessageType; + } + + /// + /// A picture to display with the log message. + /// + public abstract Image Picture { get; } + + /// + /// The text of the log message. + /// + public string Text { get; set; } + + /// + /// The turn number on which the log message was generated. + /// + public int TurnNumber { get; set; } + + /// + /// The type of this message. + /// + public LogMessageType LogMessageType { get; set; } + + + } + public enum LogMessageType + { + Generic, + Error, + Warning, + ResearchComplete, + ConstructionComplete, + PlanetColonised, + Battle, + Victory, + Diplomacy, + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/LogMessages/PictorialLogMessage.cs b/FrEee/Objects/LogMessages/PictorialLogMessage.cs similarity index 88% rename from FrEee/Game/Objects/LogMessages/PictorialLogMessage.cs rename to FrEee/Objects/LogMessages/PictorialLogMessage.cs index 5c94b87c7..fe86c2e5b 100644 --- a/FrEee/Game/Objects/LogMessages/PictorialLogMessage.cs +++ b/FrEee/Objects/LogMessages/PictorialLogMessage.cs @@ -1,42 +1,42 @@ -using FrEee.Game.Interfaces; -using System; -using System.Drawing; - -namespace FrEee.Game.Objects.LogMessages -{ - /// - /// A log message which displays a message including a picture from some object. - /// - /// - [Serializable] - public class PictorialLogMessage : LogMessage, IPictorialLogMessage - { - public PictorialLogMessage(string text, T context, LogMessageType logMessageType = LogMessageType.Generic) - : base(text, logMessageType) - { - Context = context; - } - - public PictorialLogMessage(string text, int turn, T context, LogMessageType logMessageType = LogMessageType.Generic) - : base(text, turn, logMessageType) - { - Context = context; - } - - /// - /// The context for the log message. - /// - public T Context { get; set; } - - public override Image Picture - { - get - { - if (Context is IPictorial p) - return p.Portrait; - else - return null; - } - } - } +using FrEee.Interfaces; +using System; +using System.Drawing; + +namespace FrEee.Objects.LogMessages +{ + /// + /// A log message which displays a message including a picture from some object. + /// + /// + [Serializable] + public class PictorialLogMessage : LogMessage, IPictorialLogMessage + { + public PictorialLogMessage(string text, T context, LogMessageType logMessageType = LogMessageType.Generic) + : base(text, logMessageType) + { + Context = context; + } + + public PictorialLogMessage(string text, int turn, T context, LogMessageType logMessageType = LogMessageType.Generic) + : base(text, turn, logMessageType) + { + Context = context; + } + + /// + /// The context for the log message. + /// + public T Context { get; set; } + + public override Image Picture + { + get + { + if (Context is IPictorial p) + return p.Portrait; + else + return null; + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/ActivateAbilityOrder.cs b/FrEee/Objects/Orders/ActivateAbilityOrder.cs similarity index 94% rename from FrEee/Game/Objects/Orders/ActivateAbilityOrder.cs rename to FrEee/Objects/Orders/ActivateAbilityOrder.cs index 2099751f3..b6fc354cc 100644 --- a/FrEee/Game/Objects/Orders/ActivateAbilityOrder.cs +++ b/FrEee/Objects/Orders/ActivateAbilityOrder.cs @@ -1,321 +1,321 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order to activate some sort of ability, like self-destruct or create a star. - /// - public class ActivateAbilityOrder : IOrder - { - public ActivateAbilityOrder(IReferrableAbilityObject source, Ability ability, IReferrable target) - { - Owner = Empire.Current; - Source = source; - Ability = ability; - Target = target; - } - - /// - /// What ability to activate? - /// - [DoNotSerialize] - public Ability Ability { get { return ability.Value; } set { ability = value.ReferViaGalaxy(); } } - - public bool ConsumesMovement - { - get { return false; } - } - - public long ID - { - get; - set; - } - - public bool IsComplete - { - get; - set; - } - - public bool IsDisposed - { - get; - set; - } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - /// - /// The source of the ability. Probably a component, facility, or hull. - /// TODO - fix this now that Component/Facility/Hull are no longer referrable - /// - [DoNotSerialize] - public IReferrableAbilityObject Source { get { return source.Value; } set { source = value.ReferViaGalaxy(); } } - - /// - /// What are we activating the ability "against"? Like, what warp point are we destroying, or whatever? Or null if there's no relevant target - /// - [DoNotSerialize] - public IReferrable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } - - private GalaxyReference ability { get; set; } - private GalaxyReference owner { get; set; } - private GalaxyReference source { get; set; } - private GalaxyReference target { get; set; } - - public bool CheckCompletion(IOrderable executor) - { - return IsComplete; - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var sobj in Galaxy.Current.Referrables.OfType()) - sobj.RemoveOrder(this); - Galaxy.Current.UnassignID(this); - } - - public void Execute(IOrderable ord) - { - if (ord is IMobileSpaceObject executor) - { - // error checking - var errors = GetErrors(executor); - if (executor.Owner != null) - { - foreach (var error in errors) - executor.Owner.Log.Add(error); - } - - if (!errors.Any()) - { - // TODO - custom activatable abilities using scripts - if (Ability.Rule.Matches("Emergency Resupply")) - { - executor.SupplyRemaining += Ability.Value1.Value.ToInt(); - // TODO - normalize supplies on other stuff, not just space vehicles - if (executor is SpaceVehicle) - (executor as SpaceVehicle).NormalizeSupplies(); - Owner.RecordLog(executor, executor + " has activated its emergency resupply pod and now has " + executor.SupplyRemaining.ToUnitString(true) + " supplies.", LogMessageType.Generic); - } - else if (Ability.Rule.Matches("Emergency Energy")) - { - if (executor is Vehicle) - { - var v = executor as Vehicle; - v.EmergencySpeed += Ability.Value1.Value.ToInt(); - Owner.RecordLog(executor, executor + " has activated its emergency propulsion and has had its speed boosted to " + v.StrategicSpeed + " temporarily.", LogMessageType.Generic); - } - else - { - Owner.RecordLog(executor, executor + " cannot activate emergency propulsion because it is not a vehicle.", LogMessageType.Error); - return; - } - } - else if (Ability.Rule.Matches("Self-Destruct")) - { - // destroy ship/planet/whatever BOOM! - // TODO - make sure units with self destruct ability don't allow a ship or planet carrying them in cargo to self destruct... - Owner.RecordLog(executor, executor + " has successfully self-destructed.", LogMessageType.Generic); - executor.DisposeAndLog("The {0}'s {2} has apparently self-destructed.".F(Owner, executor), Owner); - } - else if (Ability.Rule.Matches("Open Warp Point")) - { - var fromSector = executor.Sector; - var fromSys = executor.StarSystem; - if (fromSector == null || fromSys == null) - { - Owner.RecordLog(executor, executor + " cannot open a warp point because it is not located in space.", LogMessageType.Warning); - return; - } - var toSys = Target as StarSystem; - if (toSys == null && Target is ILocated) - toSys = (Target as ILocated).StarSystem; - if (toSys == null) - { - Owner.RecordLog(executor, executor + " cannot open a warp point because no target system is specified.", LogMessageType.Error); - return; - } - if (fromSys.Coordinates.EightWayDistance(toSys.Coordinates) > Ability.Value1.Value.ToInt()) - { - Owner.RecordLog(executor, executor + " cannot open a warp point to " + toSys + " because " + toSys + " is too far away.", LogMessageType.Warning); - return; - } - // TODO - limit to one warp point between any two systems? - if (Ability.BurnSupplies()) - { - // find suitable warp point templates - var wpt1 = Mod.Current.StellarObjectTemplates.OfType().Where(wp => !wp.IsUnusual).PickRandom(); - var wpt2 = Mod.Current.StellarObjectTemplates.OfType().Where(wp => !wp.IsUnusual).PickRandom(); - - // figure out where the warp point goes, according to our game setup's warp point placement strategy - // only in the target system - in the source system we get a warp point at the sector where the WP opener was - var toSector = Galaxy.Current.WarpPointPlacementStrategy.GetWarpPointSector(fromSys.Location, toSys.Location); - - // create the warp points - var wp1 = wpt1.Instantiate(); - var wp2 = wpt2.Instantiate(); - - // configure the warp points - wp1.IsOneWay = false; - wp1.Name = "Warp Point to " + toSys; - wp1.Target = toSector; - fromSector.Place(wp1); - wp2.IsOneWay = false; - wp2.Name = "Warp Point to " + fromSys; - wp2.Target = fromSector; - toSector.Place(wp2); - - // let empires know that warp points were created - Owner.RecordLog(wp1, "{0} has opened a warp point connecting {1} to {2}.".F(executor, fromSys, toSys), LogMessageType.Generic); - wp1.UpdateEmpireMemories("A new warp point to {0} has been created by the {1} in the {2} system.".F(toSys, Owner, fromSys), Owner); - wp2.UpdateEmpireMemories("A new warp point to {0} has appeared in the {1} system.".F(fromSys, toSys), Owner); - } - else - { - Owner.RecordLog(executor, executor + " cannot open a warp point because it lacks the necessary supplies.", LogMessageType.Warning); - return; - } - } - else if (Ability.Rule.Matches("Close Warp Point")) - { - var wp = Target as WarpPoint; - - // sanity checking, make sure we have a valid warp point to close here - if (wp == null) - { - Owner.RecordLog(executor, executor + " cannot close a warp point because no warp point is specified to close.", LogMessageType.Error); - return; - } - if (wp.Sector != executor.Sector) - { - Owner.RecordLog(executor, executor + " cannot close " + wp + " because " + wp + " is not in the same sector as " + executor + ".", LogMessageType.Warning); - return; - } - - // need to close warp points on the other side too - var otherwps = wp.Target.SpaceObjects.OfType().Where(w => w.Target == wp.Sector); - - // check for supplies and close WP - if (Ability.BurnSupplies()) - { - Owner.RecordLog(wp, "We have successfully closed the warp point connecting {0} to {1}.".F(wp.StarSystem, wp.Target.StarSystem), LogMessageType.Generic); - wp.DisposeAndLog("The {0} has closed the warp point connecting {1} to {2}.", Owner); - foreach (var otherwp in otherwps) - otherwp.DisposeAndLog("The warp point connecting {0} to {1} has closed.", Owner); - } - else - { - Owner.RecordLog(executor, executor + " cannot close " + wp + " because it lacks the necessary supplies.", LogMessageType.Warning); - } - } - else if (Ability.Rule.Matches("Create Planet")) - { - } - else if (Ability.Rule.Matches("Destroy Planet")) - { - } - else if (Ability.Rule.Matches("Create Star")) - { - } - else if (Ability.Rule.Matches("Destroy Star")) - { - } - else if (Ability.Rule.Matches("Create Storm")) - { - } - else if (Ability.Rule.Matches("Destroy Storm")) - { - } - else if (Ability.Rule.Matches("Create Nebula")) - { - } - else if (Ability.Rule.Matches("Destroy Nebula")) - { - } - else if (Ability.Rule.Matches("Create Black Hole")) - { - } - else if (Ability.Rule.Matches("Destroy Black Hole")) - { - } - else if (Ability.Rule.Matches("Create Constructed Planet From Star")) - { - } - else if (Ability.Rule.Matches("Create Constructed Planet From Planet")) - { - } - else if (Ability.Rule.Matches("Create Constructed Planet From Storm")) - { - } - else if (Ability.Rule.Matches("Create Constructed Planet From Warp Point")) - { - } - else if (Ability.Rule.Matches("Create Constructed Planet From Asteroids")) - { - } - else if (Ability.Rule.Matches("Create Constructed Planet From Space")) - { - } - - // destroy component/etc. if necessary - if (Source.HasAbility("Destroyed On Use")) - { - // TODO - log destruction - if (Source is IDamageable) - (Source as IDamageable).Hitpoints = 0; - if (Source is IHull) - executor.Dispose(); // hull destruction kills the whole ship! - } - - // destroy entire space object if necessary - if (Source.HasAbility("Space Object Destroyed On Use")) - { - // TODO - log destruction - if (executor is Planet) - { - var p = executor as Planet; - p.ConvertToAsteroidField(); - } - else - { - executor.Dispose(); - } - } - } - - } - } - - public IEnumerable GetErrors(IOrderable executor) - { - if (!Source.IntrinsicAbilities.Contains(Ability)) - yield return executor.CreateLogMessage(executor + " does not intrinsically possess the ability \"" + Ability + "\" with ID=" + Ability.ID + ".", LogMessageType.Error); - if (!Ability.Rule.IsActivatable) - yield return executor.CreateLogMessage("The ability \"" + Ability + "\" cannot be activated. It is a passive ability.", LogMessageType.Error); - if (Source is IDamageable && (Source as IDamageable).IsDestroyed) - yield return executor.CreateLogMessage(executor + " cannot activate " + Source + "'s ability because " + Source + " is destroyed.", LogMessageType.Error); - } - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // no new client objects here, nothing to do - } - } +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + /// + /// An order to activate some sort of ability, like self-destruct or create a star. + /// + public class ActivateAbilityOrder : IOrder + { + public ActivateAbilityOrder(IReferrableAbilityObject source, Ability ability, IReferrable target) + { + Owner = Empire.Current; + Source = source; + Ability = ability; + Target = target; + } + + /// + /// What ability to activate? + /// + [DoNotSerialize] + public Ability Ability { get { return ability.Value; } set { ability = value.ReferViaGalaxy(); } } + + public bool ConsumesMovement + { + get { return false; } + } + + public long ID + { + get; + set; + } + + public bool IsComplete + { + get; + set; + } + + public bool IsDisposed + { + get; + set; + } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + /// + /// The source of the ability. Probably a component, facility, or hull. + /// TODO - fix this now that Component/Facility/Hull are no longer referrable + /// + [DoNotSerialize] + public IReferrableAbilityObject Source { get { return source.Value; } set { source = value.ReferViaGalaxy(); } } + + /// + /// What are we activating the ability "against"? Like, what warp point are we destroying, or whatever? Or null if there's no relevant target + /// + [DoNotSerialize] + public IReferrable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } + + private GalaxyReference ability { get; set; } + private GalaxyReference owner { get; set; } + private GalaxyReference source { get; set; } + private GalaxyReference target { get; set; } + + public bool CheckCompletion(IOrderable executor) + { + return IsComplete; + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var sobj in Galaxy.Current.Referrables.OfType()) + sobj.RemoveOrder(this); + Galaxy.Current.UnassignID(this); + } + + public void Execute(IOrderable ord) + { + if (ord is IMobileSpaceObject executor) + { + // error checking + var errors = GetErrors(executor); + if (executor.Owner != null) + { + foreach (var error in errors) + executor.Owner.Log.Add(error); + } + + if (!errors.Any()) + { + // TODO - custom activatable abilities using scripts + if (Ability.Rule.Matches("Emergency Resupply")) + { + executor.SupplyRemaining += Ability.Value1.Value.ToInt(); + // TODO - normalize supplies on other stuff, not just space vehicles + if (executor is SpaceVehicle) + (executor as SpaceVehicle).NormalizeSupplies(); + Owner.RecordLog(executor, executor + " has activated its emergency resupply pod and now has " + executor.SupplyRemaining.ToUnitString(true) + " supplies.", LogMessageType.Generic); + } + else if (Ability.Rule.Matches("Emergency Energy")) + { + if (executor is Vehicle) + { + var v = executor as Vehicle; + v.EmergencySpeed += Ability.Value1.Value.ToInt(); + Owner.RecordLog(executor, executor + " has activated its emergency propulsion and has had its speed boosted to " + v.StrategicSpeed + " temporarily.", LogMessageType.Generic); + } + else + { + Owner.RecordLog(executor, executor + " cannot activate emergency propulsion because it is not a vehicle.", LogMessageType.Error); + return; + } + } + else if (Ability.Rule.Matches("Self-Destruct")) + { + // destroy ship/planet/whatever BOOM! + // TODO - make sure units with self destruct ability don't allow a ship or planet carrying them in cargo to self destruct... + Owner.RecordLog(executor, executor + " has successfully self-destructed.", LogMessageType.Generic); + executor.DisposeAndLog("The {0}'s {2} has apparently self-destructed.".F(Owner, executor), Owner); + } + else if (Ability.Rule.Matches("Open Warp Point")) + { + var fromSector = executor.Sector; + var fromSys = executor.StarSystem; + if (fromSector == null || fromSys == null) + { + Owner.RecordLog(executor, executor + " cannot open a warp point because it is not located in space.", LogMessageType.Warning); + return; + } + var toSys = Target as StarSystem; + if (toSys == null && Target is ILocated) + toSys = (Target as ILocated).StarSystem; + if (toSys == null) + { + Owner.RecordLog(executor, executor + " cannot open a warp point because no target system is specified.", LogMessageType.Error); + return; + } + if (fromSys.Coordinates.EightWayDistance(toSys.Coordinates) > Ability.Value1.Value.ToInt()) + { + Owner.RecordLog(executor, executor + " cannot open a warp point to " + toSys + " because " + toSys + " is too far away.", LogMessageType.Warning); + return; + } + // TODO - limit to one warp point between any two systems? + if (Ability.BurnSupplies()) + { + // find suitable warp point templates + var wpt1 = Mod.Current.StellarObjectTemplates.OfType().Where(wp => !wp.IsUnusual).PickRandom(); + var wpt2 = Mod.Current.StellarObjectTemplates.OfType().Where(wp => !wp.IsUnusual).PickRandom(); + + // figure out where the warp point goes, according to our game setup's warp point placement strategy + // only in the target system - in the source system we get a warp point at the sector where the WP opener was + var toSector = Galaxy.Current.WarpPointPlacementStrategy.GetWarpPointSector(fromSys.Location, toSys.Location); + + // create the warp points + var wp1 = wpt1.Instantiate(); + var wp2 = wpt2.Instantiate(); + + // configure the warp points + wp1.IsOneWay = false; + wp1.Name = "Warp Point to " + toSys; + wp1.Target = toSector; + fromSector.Place(wp1); + wp2.IsOneWay = false; + wp2.Name = "Warp Point to " + fromSys; + wp2.Target = fromSector; + toSector.Place(wp2); + + // let empires know that warp points were created + Owner.RecordLog(wp1, "{0} has opened a warp point connecting {1} to {2}.".F(executor, fromSys, toSys), LogMessageType.Generic); + wp1.UpdateEmpireMemories("A new warp point to {0} has been created by the {1} in the {2} system.".F(toSys, Owner, fromSys), Owner); + wp2.UpdateEmpireMemories("A new warp point to {0} has appeared in the {1} system.".F(fromSys, toSys), Owner); + } + else + { + Owner.RecordLog(executor, executor + " cannot open a warp point because it lacks the necessary supplies.", LogMessageType.Warning); + return; + } + } + else if (Ability.Rule.Matches("Close Warp Point")) + { + var wp = Target as WarpPoint; + + // sanity checking, make sure we have a valid warp point to close here + if (wp == null) + { + Owner.RecordLog(executor, executor + " cannot close a warp point because no warp point is specified to close.", LogMessageType.Error); + return; + } + if (wp.Sector != executor.Sector) + { + Owner.RecordLog(executor, executor + " cannot close " + wp + " because " + wp + " is not in the same sector as " + executor + ".", LogMessageType.Warning); + return; + } + + // need to close warp points on the other side too + var otherwps = wp.Target.SpaceObjects.OfType().Where(w => w.Target == wp.Sector); + + // check for supplies and close WP + if (Ability.BurnSupplies()) + { + Owner.RecordLog(wp, "We have successfully closed the warp point connecting {0} to {1}.".F(wp.StarSystem, wp.Target.StarSystem), LogMessageType.Generic); + wp.DisposeAndLog("The {0} has closed the warp point connecting {1} to {2}.", Owner); + foreach (var otherwp in otherwps) + otherwp.DisposeAndLog("The warp point connecting {0} to {1} has closed.", Owner); + } + else + { + Owner.RecordLog(executor, executor + " cannot close " + wp + " because it lacks the necessary supplies.", LogMessageType.Warning); + } + } + else if (Ability.Rule.Matches("Create Planet")) + { + } + else if (Ability.Rule.Matches("Destroy Planet")) + { + } + else if (Ability.Rule.Matches("Create Star")) + { + } + else if (Ability.Rule.Matches("Destroy Star")) + { + } + else if (Ability.Rule.Matches("Create Storm")) + { + } + else if (Ability.Rule.Matches("Destroy Storm")) + { + } + else if (Ability.Rule.Matches("Create Nebula")) + { + } + else if (Ability.Rule.Matches("Destroy Nebula")) + { + } + else if (Ability.Rule.Matches("Create Black Hole")) + { + } + else if (Ability.Rule.Matches("Destroy Black Hole")) + { + } + else if (Ability.Rule.Matches("Create Constructed Planet From Star")) + { + } + else if (Ability.Rule.Matches("Create Constructed Planet From Planet")) + { + } + else if (Ability.Rule.Matches("Create Constructed Planet From Storm")) + { + } + else if (Ability.Rule.Matches("Create Constructed Planet From Warp Point")) + { + } + else if (Ability.Rule.Matches("Create Constructed Planet From Asteroids")) + { + } + else if (Ability.Rule.Matches("Create Constructed Planet From Space")) + { + } + + // destroy component/etc. if necessary + if (Source.HasAbility("Destroyed On Use")) + { + // TODO - log destruction + if (Source is IDamageable) + (Source as IDamageable).Hitpoints = 0; + if (Source is IHull) + executor.Dispose(); // hull destruction kills the whole ship! + } + + // destroy entire space object if necessary + if (Source.HasAbility("Space Object Destroyed On Use")) + { + // TODO - log destruction + if (executor is Planet) + { + var p = executor as Planet; + p.ConvertToAsteroidField(); + } + else + { + executor.Dispose(); + } + } + } + + } + } + + public IEnumerable GetErrors(IOrderable executor) + { + if (!Source.IntrinsicAbilities.Contains(Ability)) + yield return executor.CreateLogMessage(executor + " does not intrinsically possess the ability \"" + Ability + "\" with ID=" + Ability.ID + ".", LogMessageType.Error); + if (!Ability.Rule.IsActivatable) + yield return executor.CreateLogMessage("The ability \"" + Ability + "\" cannot be activated. It is a passive ability.", LogMessageType.Error); + if (Source is IDamageable && (Source as IDamageable).IsDestroyed) + yield return executor.CreateLogMessage(executor + " cannot activate " + Source + "'s ability because " + Source + " is destroyed.", LogMessageType.Error); + } + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // no new client objects here, nothing to do + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/ColonizeOrder.cs b/FrEee/Objects/Orders/ColonizeOrder.cs similarity index 94% rename from FrEee/Game/Objects/Orders/ColonizeOrder.cs rename to FrEee/Objects/Orders/ColonizeOrder.cs index de02a37bc..d24f5beea 100644 --- a/FrEee/Game/Objects/Orders/ColonizeOrder.cs +++ b/FrEee/Objects/Orders/ColonizeOrder.cs @@ -1,241 +1,241 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order to colonize an uninhabited planet. - /// - [Serializable] - public class ColonizeOrder : IOrder - { - public ColonizeOrder(Planet planet) - { - Owner = Empire.Current; - Planet = planet; - } - - public bool ConsumesMovement - { - get { return true; } - } - - public long ID { get; set; } - - public bool IsComplete - { - get; - set; - } - - public bool IsDisposed { get; set; } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - /// - /// The planet we are colonizing. - /// - [DoNotSerialize] - public Planet Planet { get { return planet; } set { planet = value; } } - - private GalaxyReference owner { get; set; } - private GalaxyReference planet { get; set; } - - public bool CheckCompletion(IOrderable v) - { - return IsComplete; - } - - /// - /// Orders are visible only to their owners. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Visible; - return Visibility.Unknown; - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var v in Galaxy.Current.Referrables.OfType()) - { - if (v is SpaceVehicle sv) - sv.Orders.Remove(this); - else if (v is Fleet f) - f.Orders.Remove(this); - else if (v is Planet p) - p.Orders.Remove(this); - } - Galaxy.Current.UnassignID(this); - } - - public void Execute(IOrderable ord) - { - if (ord is IMobileSpaceObject sobj) - { - // error checking - var errors = GetErrors(sobj); - foreach (var error in errors) - sobj.Owner.Log.Add(error); - - // let only one colony ship from a fleet colonize - if (sobj is Fleet f) - sobj = f.LeafVehicles.FirstOrDefault(q => q.HasAbility(Planet.ColonizationAbilityName)); - - if (!errors.Any()) - { - // colonize now!!! - Planet.Colony = new Colony { Owner = sobj.Owner }; - Owner.TriggerHappinessChange(hm => hm.PlanetColonized); - Planet.Colony.ConstructionQueue = new ConstructionQueue(Planet); - if (sobj is ICargoContainer cc) - { - foreach (var kvp in cc.Cargo.Population) - { - // place population on planet - Planet.AddPopulation(kvp.Key, kvp.Value); - } - foreach (var unit in cc.Cargo.Units) - { - // planet unit on planet - Planet.AddUnit(unit); - } - } - - // ruins? - var ruinsTechs = Planet.GetAbilityValue("Ancient Ruins").ToInt(); - for (int i = 0; i < ruinsTechs; i++) - { - var msg = "We have discovered new technology from the ancient ruins on " + Planet + "."; - // pick a random tech that's unlocked but not fully researched and level it up - var tech = Mod.Current.Technologies.Where(t => sobj.Owner.HasUnlocked(t) && sobj.Owner.ResearchedTechnologies[t] < t.MaximumLevel).PickRandom(); - if (tech == null) - msg = "We have discovered ancient ruins on " + Planet + ", but there is nothing left for us to learn."; - else - { - var oldlvl = sobj.Owner.ResearchedTechnologies[tech]; - var newStuff = tech.GetExpectedResults(sobj.Owner); - sobj.Owner.ResearchedTechnologies[tech]++; - var newlvl = sobj.Owner.ResearchedTechnologies[tech]; - var progress = sobj.Owner.ResearchProgress.SingleOrDefault(p => p.Item == tech); - if (progress != null) - progress.Value = 0; - sobj.Owner.Log.Add(tech.CreateLogMessage("We have advanced from level " + oldlvl + " to level " + newlvl + " in " + tech + "!", LogMessageType.ResearchComplete)); - foreach (var item in newStuff) - sobj.Owner.Log.Add(item.CreateLogMessage("We have unlocked a new " + item.ResearchGroup.ToLower() + ", the " + item + "!", LogMessageType.ResearchComplete)); - } - if (i == 0) - sobj.Owner.Log.Add(Planet.CreateLogMessage(msg, LogMessageType.PlanetColonised)); - } - - // unique ruins? - foreach (var abil in Planet.Abilities().Where(a => a.Rule.Name == "Ancient Ruins Unique")) - { - if (sobj.Owner.UniqueTechsFound.Contains(abil.Value1)) - sobj.Owner.Log.Add(Planet.CreateLogMessage("We have discovered \"unique\" technology from the ancient ruins on " + Planet + ", but it appears we have already found this one elsewhere. Perhaps it was not as unique as we had thought...", LogMessageType.ResearchComplete)); - else - { - sobj.Owner.Log.Add(Planet.CreateLogMessage("We have discovered new unique technology from the ancient ruins on " + Planet + ".", LogMessageType.ResearchComplete)); - sobj.Owner.UniqueTechsFound.Add(abil.Value1); - foreach (var tech in Mod.Current.Technologies.Where(t => t.UniqueTechID == abil.Value1 && sobj.Owner.HasUnlocked(t))) - sobj.Owner.Log.Add(tech.CreateLogMessage("We have unlocked a new " + tech.ResearchGroup.ToLower() + ", the " + tech + "!", LogMessageType.ResearchComplete)); - } - } - - // delete ruins and unique ruins abilities - foreach (var a in Planet.IntrinsicAbilities.Where(a => a.Rule.Name == "Ancient Ruins" || a.Rule.Name == "Ancient Ruins Unique").ToArray()) - Planet.IntrinsicAbilities.Remove(a); - - // log it! - sobj.Owner.Log.Add(Planet.CreateLogMessage(sobj + " has founded a new colony on " + Planet + ".", LogMessageType.PlanetColonised)); - - // update pursue/evade orders to target planet now instead of ship - foreach (var o in Galaxy.Current.Referrables.OfType().Where(q => q.Target == sobj)) - { - if (o.Owner.CanSee(sobj) && o.Owner.CanSee(Planet)) - o.Target = Planet; - } - foreach (var o in Galaxy.Current.Referrables.OfType().Where(q => q.Target == sobj)) - { - if (o.Owner.CanSee(sobj) && o.Owner.CanSee(Planet)) - o.Target = Planet; - } - - // bye bye colony ship - sobj.Dispose(); - } - - // either done colonizing, or we failed - IsComplete = true; - - // spend time - sobj.SpendTime(sobj.TimePerMove); - } - else - Owner.Log.Append(Owner.CreateLogMessage($"Could not assign a colonize order to ${ord} because it is not a mobile space object.", LogMessageType.Error)); - } - - public IEnumerable GetErrors(IOrderable o) - { - if (o is IMobileSpaceObject sobj) - { - if (sobj.Sector != Planet.Sector) - { - // can't colonize here, maybe the GUI should have issued a move order? - yield return sobj.CreateLogMessage(sobj + " cannot colonize " + Planet + " because it is not currently located at the planet.", LogMessageType.Warning); - } - if (Planet.Colony != null) - { - // planet is already colonized! - yield return Planet.CreateLogMessage(Planet + " cannot be colonized by " + sobj + " because there is already a colony there belonging to the " + Planet.Colony.Owner + ".", LogMessageType.Warning); - } - if (!(sobj.HasAbility(Planet.ColonizationAbilityName) || sobj is Fleet f && f.LeafVehicles.Any(v => v.HasAbility(Planet.ColonizationAbilityName)))) - { - // no such colony module - yield return sobj.CreateLogMessage(sobj + " cannot colonize " + Planet + " because it lacks a " + Planet.Surface + " colony module.", LogMessageType.Warning); - } - if (Galaxy.Current.CanColonizeOnlyBreathable && Planet.Atmosphere != sobj.Owner.PrimaryRace.NativeAtmosphere) - { - // can only colonize breathable atmosphere (due to game setup option) - yield return sobj.CreateLogMessage(sobj + " cannot colonize " + Planet + " because we can only colonize " + sobj.Owner.PrimaryRace.NativeAtmosphere + " planets.", LogMessageType.Warning); - } - if (Galaxy.Current.CanColonizeOnlyHomeworldSurface && Planet.Surface != sobj.Owner.PrimaryRace.NativeSurface) - { - // can only colonize breathable atmosphere (due to game setup option) - yield return sobj.CreateLogMessage(sobj + " cannot colonize " + Planet + " because we can only colonize " + sobj.Owner.PrimaryRace.NativeSurface + " planets.", LogMessageType.Warning); - } - } - else - yield return o.CreateLogMessage($"{o} cannot colonize {Planet} because it is not a mobile space object.", LogMessageType.Error); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // This type does not use client objects, so nothing to do here. - } - - public override string ToString() - { - return "Colonize " + Planet.Name; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + /// + /// An order to colonize an uninhabited planet. + /// + [Serializable] + public class ColonizeOrder : IOrder + { + public ColonizeOrder(Planet planet) + { + Owner = Empire.Current; + Planet = planet; + } + + public bool ConsumesMovement + { + get { return true; } + } + + public long ID { get; set; } + + public bool IsComplete + { + get; + set; + } + + public bool IsDisposed { get; set; } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + /// + /// The planet we are colonizing. + /// + [DoNotSerialize] + public Planet Planet { get { return planet; } set { planet = value; } } + + private GalaxyReference owner { get; set; } + private GalaxyReference planet { get; set; } + + public bool CheckCompletion(IOrderable v) + { + return IsComplete; + } + + /// + /// Orders are visible only to their owners. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Visible; + return Visibility.Unknown; + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var v in Galaxy.Current.Referrables.OfType()) + { + if (v is SpaceVehicle sv) + sv.Orders.Remove(this); + else if (v is Fleet f) + f.Orders.Remove(this); + else if (v is Planet p) + p.Orders.Remove(this); + } + Galaxy.Current.UnassignID(this); + } + + public void Execute(IOrderable ord) + { + if (ord is IMobileSpaceObject sobj) + { + // error checking + var errors = GetErrors(sobj); + foreach (var error in errors) + sobj.Owner.Log.Add(error); + + // let only one colony ship from a fleet colonize + if (sobj is Fleet f) + sobj = f.LeafVehicles.FirstOrDefault(q => q.HasAbility(Planet.ColonizationAbilityName)); + + if (!errors.Any()) + { + // colonize now!!! + Planet.Colony = new Colony { Owner = sobj.Owner }; + Owner.TriggerHappinessChange(hm => hm.PlanetColonized); + Planet.Colony.ConstructionQueue = new ConstructionQueue(Planet); + if (sobj is ICargoContainer cc) + { + foreach (var kvp in cc.Cargo.Population) + { + // place population on planet + Planet.AddPopulation(kvp.Key, kvp.Value); + } + foreach (var unit in cc.Cargo.Units) + { + // planet unit on planet + Planet.AddUnit(unit); + } + } + + // ruins? + var ruinsTechs = Planet.GetAbilityValue("Ancient Ruins").ToInt(); + for (int i = 0; i < ruinsTechs; i++) + { + var msg = "We have discovered new technology from the ancient ruins on " + Planet + "."; + // pick a random tech that's unlocked but not fully researched and level it up + var tech = Mod.Current.Technologies.Where(t => sobj.Owner.HasUnlocked(t) && sobj.Owner.ResearchedTechnologies[t] < t.MaximumLevel).PickRandom(); + if (tech == null) + msg = "We have discovered ancient ruins on " + Planet + ", but there is nothing left for us to learn."; + else + { + var oldlvl = sobj.Owner.ResearchedTechnologies[tech]; + var newStuff = tech.GetExpectedResults(sobj.Owner); + sobj.Owner.ResearchedTechnologies[tech]++; + var newlvl = sobj.Owner.ResearchedTechnologies[tech]; + var progress = sobj.Owner.ResearchProgress.SingleOrDefault(p => p.Item == tech); + if (progress != null) + progress.Value = 0; + sobj.Owner.Log.Add(tech.CreateLogMessage("We have advanced from level " + oldlvl + " to level " + newlvl + " in " + tech + "!", LogMessageType.ResearchComplete)); + foreach (var item in newStuff) + sobj.Owner.Log.Add(item.CreateLogMessage("We have unlocked a new " + item.ResearchGroup.ToLower() + ", the " + item + "!", LogMessageType.ResearchComplete)); + } + if (i == 0) + sobj.Owner.Log.Add(Planet.CreateLogMessage(msg, LogMessageType.PlanetColonised)); + } + + // unique ruins? + foreach (var abil in Planet.Abilities().Where(a => a.Rule.Name == "Ancient Ruins Unique")) + { + if (sobj.Owner.UniqueTechsFound.Contains(abil.Value1)) + sobj.Owner.Log.Add(Planet.CreateLogMessage("We have discovered \"unique\" technology from the ancient ruins on " + Planet + ", but it appears we have already found this one elsewhere. Perhaps it was not as unique as we had thought...", LogMessageType.ResearchComplete)); + else + { + sobj.Owner.Log.Add(Planet.CreateLogMessage("We have discovered new unique technology from the ancient ruins on " + Planet + ".", LogMessageType.ResearchComplete)); + sobj.Owner.UniqueTechsFound.Add(abil.Value1); + foreach (var tech in Mod.Current.Technologies.Where(t => t.UniqueTechID == abil.Value1 && sobj.Owner.HasUnlocked(t))) + sobj.Owner.Log.Add(tech.CreateLogMessage("We have unlocked a new " + tech.ResearchGroup.ToLower() + ", the " + tech + "!", LogMessageType.ResearchComplete)); + } + } + + // delete ruins and unique ruins abilities + foreach (var a in Planet.IntrinsicAbilities.Where(a => a.Rule.Name == "Ancient Ruins" || a.Rule.Name == "Ancient Ruins Unique").ToArray()) + Planet.IntrinsicAbilities.Remove(a); + + // log it! + sobj.Owner.Log.Add(Planet.CreateLogMessage(sobj + " has founded a new colony on " + Planet + ".", LogMessageType.PlanetColonised)); + + // update pursue/evade orders to target planet now instead of ship + foreach (var o in Galaxy.Current.Referrables.OfType().Where(q => q.Target == sobj)) + { + if (o.Owner.CanSee(sobj) && o.Owner.CanSee(Planet)) + o.Target = Planet; + } + foreach (var o in Galaxy.Current.Referrables.OfType().Where(q => q.Target == sobj)) + { + if (o.Owner.CanSee(sobj) && o.Owner.CanSee(Planet)) + o.Target = Planet; + } + + // bye bye colony ship + sobj.Dispose(); + } + + // either done colonizing, or we failed + IsComplete = true; + + // spend time + sobj.SpendTime(sobj.TimePerMove); + } + else + Owner.Log.Append(Owner.CreateLogMessage($"Could not assign a colonize order to ${ord} because it is not a mobile space object.", LogMessageType.Error)); + } + + public IEnumerable GetErrors(IOrderable o) + { + if (o is IMobileSpaceObject sobj) + { + if (sobj.Sector != Planet.Sector) + { + // can't colonize here, maybe the GUI should have issued a move order? + yield return sobj.CreateLogMessage(sobj + " cannot colonize " + Planet + " because it is not currently located at the planet.", LogMessageType.Warning); + } + if (Planet.Colony != null) + { + // planet is already colonized! + yield return Planet.CreateLogMessage(Planet + " cannot be colonized by " + sobj + " because there is already a colony there belonging to the " + Planet.Colony.Owner + ".", LogMessageType.Warning); + } + if (!(sobj.HasAbility(Planet.ColonizationAbilityName) || sobj is Fleet f && f.LeafVehicles.Any(v => v.HasAbility(Planet.ColonizationAbilityName)))) + { + // no such colony module + yield return sobj.CreateLogMessage(sobj + " cannot colonize " + Planet + " because it lacks a " + Planet.Surface + " colony module.", LogMessageType.Warning); + } + if (Galaxy.Current.CanColonizeOnlyBreathable && Planet.Atmosphere != sobj.Owner.PrimaryRace.NativeAtmosphere) + { + // can only colonize breathable atmosphere (due to game setup option) + yield return sobj.CreateLogMessage(sobj + " cannot colonize " + Planet + " because we can only colonize " + sobj.Owner.PrimaryRace.NativeAtmosphere + " planets.", LogMessageType.Warning); + } + if (Galaxy.Current.CanColonizeOnlyHomeworldSurface && Planet.Surface != sobj.Owner.PrimaryRace.NativeSurface) + { + // can only colonize breathable atmosphere (due to game setup option) + yield return sobj.CreateLogMessage(sobj + " cannot colonize " + Planet + " because we can only colonize " + sobj.Owner.PrimaryRace.NativeSurface + " planets.", LogMessageType.Warning); + } + } + else + yield return o.CreateLogMessage($"{o} cannot colonize {Planet} because it is not a mobile space object.", LogMessageType.Error); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // This type does not use client objects, so nothing to do here. + } + + public override string ToString() + { + return "Colonize " + Planet.Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/ConstructionOrder.cs b/FrEee/Objects/Orders/ConstructionOrder.cs similarity index 90% rename from FrEee/Game/Objects/Orders/ConstructionOrder.cs rename to FrEee/Objects/Orders/ConstructionOrder.cs index f09173b18..57d42905e 100644 --- a/FrEee/Game/Objects/Orders/ConstructionOrder.cs +++ b/FrEee/Objects/Orders/ConstructionOrder.cs @@ -1,230 +1,230 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order for a construction queue to build something. - /// - [Serializable] - public class ConstructionOrder : IConstructionOrder - where T : IConstructable - where TTemplate : ITemplate, IReferrable, IConstructionTemplate - { - public ConstructionOrder() - { - Owner = Empire.Current; - } - - public bool ConsumesMovement - { - get { return false; } - } - - public ResourceQuantity Cost - { - get { return Template?.Cost ?? new ResourceQuantity(); } - } - - public long ID { get; set; } - - public bool IsComplete - { - get - { - if (isComplete == null) - return false; // haven't checked completion yet, so it's probably safe to say it's incomplete - return isComplete.Value; - } - set - { - isComplete = value; - } - } - - public bool IsDisposed { get; set; } - - /// - /// The item being built. - /// - public T Item { get; set; } - - IConstructable IConstructionOrder.Item - { - get { return Item; } - } - - public string Name - { - get - { - return Template.Name; - } - } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - /// - /// The construction template. - /// - [DoNotSerialize] - public TTemplate Template - { - get { return template.Value; } - set - { - if (value is IModObject mo) - template = GetModReference(mo.ReferViaMod().ID); - else if (value is IReferrable r) - template = new GalaxyReference(r.ReferViaGalaxy().ID); - else if (value == null) - template = null; - else - throw new Exception($"{value} is not referrable in the galaxy or the mod."); - } - } - - private IReference GetModReference(string id) - { - // since T is not guaranteed to be a compile time IModObject implementation - var type = typeof(ModReference<>).MakeGenericType(typeof(U)); - var r = (IReference)Activator.CreateInstance(type); - r.SetPropertyValue("ID", id); - return r; - } - - IConstructionTemplate IConstructionOrder.Template { get { return template.Value; } } - - [DoNotSerialize] - private bool? isComplete - { - get; - set; - } - - private GalaxyReference owner { get; set; } - private IReference template { get; set; } - - public bool CheckCompletion(IOrderable q) - { - var queue = (ConstructionQueue)q; - isComplete = Item.ConstructionProgress >= Item.Cost || GetErrors(queue).Any(); - return IsComplete; - } - - /// - /// Orders are visible only to their owners. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Visible; - return Visibility.Unknown; - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var q in Galaxy.Current.Referrables.OfType()) - q.Orders.Remove(this); - Galaxy.Current.UnassignID(this); - } - - /// - /// Does 1 turn's worth of building. - /// - public void Execute(IOrderable q) - { - var queue = (ConstructionQueue)q; - var errors = GetErrors(queue); - foreach (var error in errors) - queue.Owner.Log.Add(error); - - if (!errors.Any()) - { - // create item if needed - if (Item == null) - { - Item = Template.Instantiate(); - if (!(Item is Facility)) - Item.Owner = queue.Owner; - if (Item is SpaceVehicle) - { - // space vehicles need their supplies filled up - var sv = (SpaceVehicle)(IConstructable)Item; - sv.SupplyRemaining = sv.SupplyStorage; - } - } - - // apply build rate - var costLeft = Item.Cost - Item.ConstructionProgress; - var spending = ResourceQuantity.Min(costLeft, queue.UnspentRate); - if (!(spending <= queue.Owner.StoredResources)) - { - spending = ResourceQuantity.Min(spending, queue.Owner.StoredResources); - if (spending.IsEmpty) - { - if (!queue.IsConstructionDelayed) // don't spam messages! - Owner.Log.Add(queue.Container.CreateLogMessage("Construction of " + Template + " at " + queue.Container + " was paused due to lack of resources.", LogMessageType.Generic)); - } - else - { - Owner.Log.Add(queue.Container.CreateLogMessage("Construction of " + Template + " at " + queue.Container + " was slowed due to lack of resources.", LogMessageType.Generic)); - } - queue.IsConstructionDelayed = true; - } - queue.Owner.StoredResources -= spending; - queue.UnspentRate -= spending; - Item.ConstructionProgress += spending; - } - } - - public IEnumerable GetErrors(IOrderable q) - { - var queue = (ConstructionQueue)q; - - // do we have a valid template? - if (Template == null) - yield return Owner.CreateLogMessage($"{queue.Container} cannot build a nonexistent template; skipping it. Probably a bug...", LogMessageType.Error); - - // validate that what's being built is unlocked - if (!queue.Owner.HasUnlocked(Template)) - yield return Template.CreateLogMessage(Template + " cannot be built at " + queue.Container + " because we have not yet researched it.", LogMessageType.Warning); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - template.ReplaceClientIDs(idmap, done); - } - } - - public void Reset() - { - Item = default(T); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Orders +{ + /// + /// An order for a construction queue to build something. + /// + [Serializable] + public class ConstructionOrder : IConstructionOrder + where T : IConstructable + where TTemplate : ITemplate, IReferrable, IConstructionTemplate + { + public ConstructionOrder() + { + Owner = Empire.Current; + } + + public bool ConsumesMovement + { + get { return false; } + } + + public ResourceQuantity Cost + { + get { return Template?.Cost ?? new ResourceQuantity(); } + } + + public long ID { get; set; } + + public bool IsComplete + { + get + { + if (isComplete == null) + return false; // haven't checked completion yet, so it's probably safe to say it's incomplete + return isComplete.Value; + } + set + { + isComplete = value; + } + } + + public bool IsDisposed { get; set; } + + /// + /// The item being built. + /// + public T Item { get; set; } + + IConstructable IConstructionOrder.Item + { + get { return Item; } + } + + public string Name + { + get + { + return Template.Name; + } + } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + /// + /// The construction template. + /// + [DoNotSerialize] + public TTemplate Template + { + get { return template.Value; } + set + { + if (value is IModObject mo) + template = GetModReference(mo.ReferViaMod().ID); + else if (value is IReferrable r) + template = new GalaxyReference(r.ReferViaGalaxy().ID); + else if (value == null) + template = null; + else + throw new Exception($"{value} is not referrable in the galaxy or the mod."); + } + } + + private IReference GetModReference(string id) + { + // since T is not guaranteed to be a compile time IModObject implementation + var type = typeof(ModReference<>).MakeGenericType(typeof(U)); + var r = (IReference)Activator.CreateInstance(type); + r.SetPropertyValue("ID", id); + return r; + } + + IConstructionTemplate IConstructionOrder.Template { get { return template.Value; } } + + [DoNotSerialize] + private bool? isComplete + { + get; + set; + } + + private GalaxyReference owner { get; set; } + private IReference template { get; set; } + + public bool CheckCompletion(IOrderable q) + { + var queue = (ConstructionQueue)q; + isComplete = Item.ConstructionProgress >= Item.Cost || GetErrors(queue).Any(); + return IsComplete; + } + + /// + /// Orders are visible only to their owners. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Visible; + return Visibility.Unknown; + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var q in Galaxy.Current.Referrables.OfType()) + q.Orders.Remove(this); + Galaxy.Current.UnassignID(this); + } + + /// + /// Does 1 turn's worth of building. + /// + public void Execute(IOrderable q) + { + var queue = (ConstructionQueue)q; + var errors = GetErrors(queue); + foreach (var error in errors) + queue.Owner.Log.Add(error); + + if (!errors.Any()) + { + // create item if needed + if (Item == null) + { + Item = Template.Instantiate(); + if (!(Item is Facility)) + Item.Owner = queue.Owner; + if (Item is SpaceVehicle) + { + // space vehicles need their supplies filled up + var sv = (SpaceVehicle)(IConstructable)Item; + sv.SupplyRemaining = sv.SupplyStorage; + } + } + + // apply build rate + var costLeft = Item.Cost - Item.ConstructionProgress; + var spending = ResourceQuantity.Min(costLeft, queue.UnspentRate); + if (!(spending <= queue.Owner.StoredResources)) + { + spending = ResourceQuantity.Min(spending, queue.Owner.StoredResources); + if (spending.IsEmpty) + { + if (!queue.IsConstructionDelayed) // don't spam messages! + Owner.Log.Add(queue.Container.CreateLogMessage("Construction of " + Template + " at " + queue.Container + " was paused due to lack of resources.", LogMessageType.Generic)); + } + else + { + Owner.Log.Add(queue.Container.CreateLogMessage("Construction of " + Template + " at " + queue.Container + " was slowed due to lack of resources.", LogMessageType.Generic)); + } + queue.IsConstructionDelayed = true; + } + queue.Owner.StoredResources -= spending; + queue.UnspentRate -= spending; + Item.ConstructionProgress += spending; + } + } + + public IEnumerable GetErrors(IOrderable q) + { + var queue = (ConstructionQueue)q; + + // do we have a valid template? + if (Template == null) + yield return Owner.CreateLogMessage($"{queue.Container} cannot build a nonexistent template; skipping it. Probably a bug...", LogMessageType.Error); + + // validate that what's being built is unlocked + if (!queue.Owner.HasUnlocked(Template)) + yield return Template.CreateLogMessage(Template + " cannot be built at " + queue.Container + " because we have not yet researched it.", LogMessageType.Warning); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + template.ReplaceClientIDs(idmap, done); + } + } + + public void Reset() + { + Item = default(T); + } + } +} diff --git a/FrEee/Game/Objects/Orders/EvadeOrder.cs b/FrEee/Objects/Orders/EvadeOrder.cs similarity index 91% rename from FrEee/Game/Objects/Orders/EvadeOrder.cs rename to FrEee/Objects/Orders/EvadeOrder.cs index 0268bef5b..790e31a26 100644 --- a/FrEee/Game/Objects/Orders/EvadeOrder.cs +++ b/FrEee/Objects/Orders/EvadeOrder.cs @@ -1,88 +1,88 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order to move a mobile space object away from another space object. - /// The direction will be chosen at random - /// - [Serializable] - public class EvadeOrder : PathfindingOrder - { - public EvadeOrder(ISpaceObject target, bool avoidEnemies) - : base(target, avoidEnemies) - { - } - - public override string Verb - { - get { return "evade"; } - } - - /// - /// Finds the path for executing this order. - /// - /// The space object executing the order. - /// - public override IEnumerable Pathfind(IMobileSpaceObject me, Sector start) - { - if (Target is IMobileSpaceObject) - { - if (me.CanWarp && !Target.CanWarp) - { - // warping via any warp point that leads outside the system should be safe, so prioritize those! - var sys = me.FindStarSystem(); - var paths = sys.FindSpaceObjects() - .Where(wp => wp.TargetStarSystemLocation == null || wp.TargetStarSystemLocation.Item != sys) - .Select(wp => new { WarpPoint = wp, Path = Pathfinder.Pathfind(me, start, wp.Sector, AvoidEnemies, true, me.DijkstraMap) }); - if (paths.Any()) - { - // found a warp point to flee to! - var shortest = paths.WithMin(path => path.Path.Count()).PickRandom(); - return shortest.Path.Concat(new Sector[] { shortest.WarpPoint.Target }); - } - } - - // see how he can reach us, and go somewhere away from him (that would take longer for him to get to than - var dijkstraMap = Pathfinder.CreateDijkstraMap((IMobileSpaceObject)Target, Target.Sector, me.FindSector(), false, true); - var canMoveTo = Pathfinder.GetPossibleMoves(me.Sector, me.CanWarp, me.Owner); - var goodMoves = canMoveTo.Where(s => !dijkstraMap.Values.SelectMany(set => set).Any(n => n.Location == s)); - - if (goodMoves.Any()) - { - // just go there and recompute the path next time we can move - the enemy may have moved too - return new Sector[] { goodMoves.PickRandom() }; - } - else - { - // trapped... - return Enumerable.Empty(); - } - } - else - { - // target is immobile! no need to flee, unless it's in the same sector - if (Target.Sector == me.FindSector()) - { - // don't need to go through warp points to evade it, the warp points might be one way! - var moves = Pathfinder.GetPossibleMoves(me.Sector, false, me.Owner); - return new Sector[] { moves.PickRandom() }; - } - else - return Enumerable.Empty(); - } - } - - protected override bool AreWeThereYet(IMobileSpaceObject me) - { - // gotta keep on running... - return Target == null || Target.IsDisposed; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + /// + /// An order to move a mobile space object away from another space object. + /// The direction will be chosen at random + /// + [Serializable] + public class EvadeOrder : PathfindingOrder + { + public EvadeOrder(ISpaceObject target, bool avoidEnemies) + : base(target, avoidEnemies) + { + } + + public override string Verb + { + get { return "evade"; } + } + + /// + /// Finds the path for executing this order. + /// + /// The space object executing the order. + /// + public override IEnumerable Pathfind(IMobileSpaceObject me, Sector start) + { + if (Target is IMobileSpaceObject) + { + if (me.CanWarp && !Target.CanWarp) + { + // warping via any warp point that leads outside the system should be safe, so prioritize those! + var sys = me.FindStarSystem(); + var paths = sys.FindSpaceObjects() + .Where(wp => wp.TargetStarSystemLocation == null || wp.TargetStarSystemLocation.Item != sys) + .Select(wp => new { WarpPoint = wp, Path = Pathfinder.Pathfind(me, start, wp.Sector, AvoidEnemies, true, me.DijkstraMap) }); + if (paths.Any()) + { + // found a warp point to flee to! + var shortest = paths.WithMin(path => path.Path.Count()).PickRandom(); + return shortest.Path.Concat(new Sector[] { shortest.WarpPoint.Target }); + } + } + + // see how he can reach us, and go somewhere away from him (that would take longer for him to get to than + var dijkstraMap = Pathfinder.CreateDijkstraMap((IMobileSpaceObject)Target, Target.Sector, me.FindSector(), false, true); + var canMoveTo = Pathfinder.GetPossibleMoves(me.Sector, me.CanWarp, me.Owner); + var goodMoves = canMoveTo.Where(s => !dijkstraMap.Values.SelectMany(set => set).Any(n => n.Location == s)); + + if (goodMoves.Any()) + { + // just go there and recompute the path next time we can move - the enemy may have moved too + return new Sector[] { goodMoves.PickRandom() }; + } + else + { + // trapped... + return Enumerable.Empty(); + } + } + else + { + // target is immobile! no need to flee, unless it's in the same sector + if (Target.Sector == me.FindSector()) + { + // don't need to go through warp points to evade it, the warp points might be one way! + var moves = Pathfinder.GetPossibleMoves(me.Sector, false, me.Owner); + return new Sector[] { moves.PickRandom() }; + } + else + return Enumerable.Empty(); + } + } + + protected override bool AreWeThereYet(IMobileSpaceObject me) + { + // gotta keep on running... + return Target == null || Target.IsDisposed; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/MoveOrder.cs b/FrEee/Objects/Orders/MoveOrder.cs similarity index 92% rename from FrEee/Game/Objects/Orders/MoveOrder.cs rename to FrEee/Objects/Orders/MoveOrder.cs index 344912aee..a46c3a6fc 100644 --- a/FrEee/Game/Objects/Orders/MoveOrder.cs +++ b/FrEee/Objects/Orders/MoveOrder.cs @@ -1,218 +1,218 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order to move a mobile space object to a new location. - /// - [Serializable] - public class MoveOrder : IMovementOrder - { - public MoveOrder(Sector destination, bool avoidEnemies) - { - Owner = Empire.Current; - Destination = destination; - AvoidEnemies = avoidEnemies; - // TODO - add flag for "avoid damaging sectors"? but how to specify in UI? - } - - /// - /// Should pathfinding avoid enemies? - /// - public bool AvoidEnemies { get; set; } - - public bool ConsumesMovement - { - get { return true; } - } - - /// - /// The sector we are moving to. - /// - public Sector Destination { get; set; } - - public long ID { get; set; } - - public bool IsComplete - { - get; - set; - } - - public bool IsDisposed { get; set; } - - /// - /// Did we already log a pathfinding error this turn? - /// - [DoNotSerialize] - public bool LoggedPathfindingError { get; private set; } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - /// - /// Any pathfinding error that we might have found. - /// - [DoNotSerialize] - public LogMessage PathfindingError { get; private set; } - - private GalaxyReference owner { get; set; } - - public bool CheckCompletion(IOrderable v) - { - return IsComplete; - } - - /// - /// Orders are visible only to their owners. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Visible; - return Visibility.Unknown; - } - - /// - /// Creates a Dijkstra map for this order's movement. - /// - /// - /// - /// - public IDictionary, ISet>> CreateDijkstraMap(IMobileSpaceObject me, Sector start) - { - return Pathfinder.CreateDijkstraMap(me, start, Destination, AvoidEnemies, true); - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var v in Galaxy.Current.Referrables.OfType()) - v.RemoveOrder(this); - Galaxy.Current.UnassignID(this); - } - - public void Execute(IOrderable ord) - { - if (ord is IMobileSpaceObject sobj) - { - // TODO - movement logs - if (sobj.Sector == Destination) - { - IsComplete = true; - return; - } - else - { - var gotoSector = Pathfind(sobj, sobj.Sector).FirstOrDefault(); - if (gotoSector != null) - { - // move - sobj.Sector = gotoSector; - sobj.RefreshDijkstraMap(); - - // consume supplies - sobj.BurnMovementSupplies(); - - // resupply space vehicles - // either this vehicle from other space objects, or other vehicles from this one - // TODO - this should really be done AFTER battles... - if (gotoSector.HasAbility("Supply Generation", sobj.Owner)) - { - foreach (var v in gotoSector.SpaceObjects.OfType().Where(v => v.Owner == sobj.Owner)) - v.SupplyRemaining = v.SupplyStorage; - } - if (gotoSector.StarSystem.HasAbility("Supply Generation - System", sobj.Owner) || gotoSector.StarSystem.HasAbility("Supply Generation - System")) - { - foreach (var v in gotoSector.StarSystem.FindSpaceObjects().Where(v => v.Owner == sobj.Owner)) - v.SupplyRemaining = v.SupplyStorage; - } - - // is it done? - if (gotoSector == Destination) - IsComplete = true; - - // apply damage from damaging sectors - // TODO - apply damage from damaging systems too - // TODO - move this out into the Place method so it applies to all movement-type orders and newly constructed vehicles - foreach (var damager in gotoSector.SpaceObjects.Where(dsobj => dsobj.HasAbility("Sector - Damage"))) - { - var damage = damager.GetAbilityValue("Sector - Damage").ToInt(); - // TODO - let sector damage have special damage types? - var shot = new Shot(null, null, sobj, 0); - var hit = new Hit(shot, sobj, damage); - sobj.TakeDamage(hit, null); - sobj.Owner.Log.Add(sobj.CreateLogMessage(sobj + " took " + damage + " damage from entering " + damager + "'s sector.", LogMessageType.Generic)); - sobj.ReplenishShields(); - } - } - else if (!LoggedPathfindingError) - { - // log pathfinding error - string reason; - if (sobj.StrategicSpeed <= 0) - reason = sobj + " is immobile"; - else - reason = "there is no available path leading toward " + Destination; - PathfindingError = sobj.CreateLogMessage(sobj + " could not move to " + Destination + " because " + reason + ".", LogMessageType.Warning); - sobj.Owner?.Log.Add(PathfindingError); - LoggedPathfindingError = true; - } - } - - // spend time - sobj.SpendTime(sobj.TimePerMove); - } - else - ord.Owner.RecordLog(ord, $"{ord} cannot be ordered to move because it is not a mobile space object.", LogMessageType.Error); - } - - public IEnumerable GetErrors(IOrderable v) - { - if (PathfindingError != null) - yield return PathfindingError; - } - - /// - /// Finds the path for executing this order. - /// - /// The space object executing the order. - /// - public IEnumerable Pathfind(IMobileSpaceObject me, Sector start) - { - return Pathfinder.Pathfind(me, start, Destination, AvoidEnemies, true, me.DijkstraMap); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done) - { - // This type does not use client objects, so nothing to do here. - } - - public override string ToString() - { - var coords = Destination.Coordinates; - if (Destination == null || Destination.StarSystem == null) - return "(Unknown Move Order)"; - if (AvoidEnemies) - return "Move to " + Destination.StarSystem.Name + " (" + coords.X + ", " + coords.Y + ")"; - else - return "Attack " + Destination.StarSystem.Name + " (" + coords.X + ", " + coords.Y + ")"; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + /// + /// An order to move a mobile space object to a new location. + /// + [Serializable] + public class MoveOrder : IMovementOrder + { + public MoveOrder(Sector destination, bool avoidEnemies) + { + Owner = Empire.Current; + Destination = destination; + AvoidEnemies = avoidEnemies; + // TODO - add flag for "avoid damaging sectors"? but how to specify in UI? + } + + /// + /// Should pathfinding avoid enemies? + /// + public bool AvoidEnemies { get; set; } + + public bool ConsumesMovement + { + get { return true; } + } + + /// + /// The sector we are moving to. + /// + public Sector Destination { get; set; } + + public long ID { get; set; } + + public bool IsComplete + { + get; + set; + } + + public bool IsDisposed { get; set; } + + /// + /// Did we already log a pathfinding error this turn? + /// + [DoNotSerialize] + public bool LoggedPathfindingError { get; private set; } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + /// + /// Any pathfinding error that we might have found. + /// + [DoNotSerialize] + public LogMessage PathfindingError { get; private set; } + + private GalaxyReference owner { get; set; } + + public bool CheckCompletion(IOrderable v) + { + return IsComplete; + } + + /// + /// Orders are visible only to their owners. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Visible; + return Visibility.Unknown; + } + + /// + /// Creates a Dijkstra map for this order's movement. + /// + /// + /// + /// + public IDictionary, ISet>> CreateDijkstraMap(IMobileSpaceObject me, Sector start) + { + return Pathfinder.CreateDijkstraMap(me, start, Destination, AvoidEnemies, true); + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var v in Galaxy.Current.Referrables.OfType()) + v.RemoveOrder(this); + Galaxy.Current.UnassignID(this); + } + + public void Execute(IOrderable ord) + { + if (ord is IMobileSpaceObject sobj) + { + // TODO - movement logs + if (sobj.Sector == Destination) + { + IsComplete = true; + return; + } + else + { + var gotoSector = Pathfind(sobj, sobj.Sector).FirstOrDefault(); + if (gotoSector != null) + { + // move + sobj.Sector = gotoSector; + sobj.RefreshDijkstraMap(); + + // consume supplies + sobj.BurnMovementSupplies(); + + // resupply space vehicles + // either this vehicle from other space objects, or other vehicles from this one + // TODO - this should really be done AFTER battles... + if (gotoSector.HasAbility("Supply Generation", sobj.Owner)) + { + foreach (var v in gotoSector.SpaceObjects.OfType().Where(v => v.Owner == sobj.Owner)) + v.SupplyRemaining = v.SupplyStorage; + } + if (gotoSector.StarSystem.HasAbility("Supply Generation - System", sobj.Owner) || gotoSector.StarSystem.HasAbility("Supply Generation - System")) + { + foreach (var v in gotoSector.StarSystem.FindSpaceObjects().Where(v => v.Owner == sobj.Owner)) + v.SupplyRemaining = v.SupplyStorage; + } + + // is it done? + if (gotoSector == Destination) + IsComplete = true; + + // apply damage from damaging sectors + // TODO - apply damage from damaging systems too + // TODO - move this out into the Place method so it applies to all movement-type orders and newly constructed vehicles + foreach (var damager in gotoSector.SpaceObjects.Where(dsobj => dsobj.HasAbility("Sector - Damage"))) + { + var damage = damager.GetAbilityValue("Sector - Damage").ToInt(); + // TODO - let sector damage have special damage types? + var shot = new Shot(null, null, sobj, 0); + var hit = new Hit(shot, sobj, damage); + sobj.TakeDamage(hit, null); + sobj.Owner.Log.Add(sobj.CreateLogMessage(sobj + " took " + damage + " damage from entering " + damager + "'s sector.", LogMessageType.Generic)); + sobj.ReplenishShields(); + } + } + else if (!LoggedPathfindingError) + { + // log pathfinding error + string reason; + if (sobj.StrategicSpeed <= 0) + reason = sobj + " is immobile"; + else + reason = "there is no available path leading toward " + Destination; + PathfindingError = sobj.CreateLogMessage(sobj + " could not move to " + Destination + " because " + reason + ".", LogMessageType.Warning); + sobj.Owner?.Log.Add(PathfindingError); + LoggedPathfindingError = true; + } + } + + // spend time + sobj.SpendTime(sobj.TimePerMove); + } + else + ord.Owner.RecordLog(ord, $"{ord} cannot be ordered to move because it is not a mobile space object.", LogMessageType.Error); + } + + public IEnumerable GetErrors(IOrderable v) + { + if (PathfindingError != null) + yield return PathfindingError; + } + + /// + /// Finds the path for executing this order. + /// + /// The space object executing the order. + /// + public IEnumerable Pathfind(IMobileSpaceObject me, Sector start) + { + return Pathfinder.Pathfind(me, start, Destination, AvoidEnemies, true, me.DijkstraMap); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done) + { + // This type does not use client objects, so nothing to do here. + } + + public override string ToString() + { + var coords = Destination.Coordinates; + if (Destination == null || Destination.StarSystem == null) + return "(Unknown Move Order)"; + if (AvoidEnemies) + return "Move to " + Destination.StarSystem.Name + " (" + coords.X + ", " + coords.Y + ")"; + else + return "Attack " + Destination.StarSystem.Name + " (" + coords.X + ", " + coords.Y + ")"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/PathfindingOrder.cs b/FrEee/Objects/Orders/PathfindingOrder.cs similarity index 93% rename from FrEee/Game/Objects/Orders/PathfindingOrder.cs rename to FrEee/Objects/Orders/PathfindingOrder.cs index 525979eff..e66fb1e90 100644 --- a/FrEee/Game/Objects/Orders/PathfindingOrder.cs +++ b/FrEee/Objects/Orders/PathfindingOrder.cs @@ -1,285 +1,285 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order to pathfind relative to a target. - /// - /// - public abstract class PathfindingOrder - : IPathfindingOrder - { - protected PathfindingOrder(ISpaceObject target, bool avoidEnemies) - { - Owner = Empire.Current; - Target = target; - AvoidEnemies = avoidEnemies; - // TODO - add flag for "avoid damaging sectors"? but how to specify in UI? - } - - /// - /// Alternate target. This should be the largest ship in a fleet when a fleet is being pursued. - /// - [DoNotSerialize] - public ISpaceObject AlternateTarget - { - get; - private set; - } - - /// - /// Should pathfinding avoid enemies? - /// - public bool AvoidEnemies { get; set; } - - public bool ConsumesMovement - { - get { return true; } - } - - public Sector Destination - { - get { return KnownTarget?.Sector; } - } - - public long ID { get; set; } - - public bool IsComplete - { - get; - set; - } - - public bool IsDisposed { get; set; } - - /// - /// Either the target itself, or the memory of the target, if it's not visible. - /// - public ISpaceObject KnownTarget - { - get - { - if (Target == null) - return null; - if (Target.CheckVisibility(Owner) >= Visibility.Visible) - return Target; - return Owner?.Recall(Target); - } - } - - /// - /// Did we already log a pathfinding error this turn? - /// - [DoNotSerialize] - public bool LoggedPathfindingError { get; private set; } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - /// - /// Any pathfinding error that we might have found. - /// - [DoNotSerialize] - public LogMessage PathfindingError { get; private set; } - - /// - /// The target we are pursuing. - /// - [DoNotSerialize] - public ISpaceObject Target { get { return target?.Value; } set { target = value.ReferViaGalaxy(); } } - - /// - /// A verb used to describe this order. - /// - public abstract string Verb { get; } - - private GalaxyReference owner { get; set; } - private GalaxyReference target { get; set; } - - public bool CheckCompletion(IOrderable v) - { - return IsComplete; - } - - /// - /// Orders are visible only to their owners. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Visible; - return Visibility.Unknown; - } - - public IDictionary, ISet>> CreateDijkstraMap(IMobileSpaceObject me, Sector start) - { - return Pathfinder.CreateDijkstraMap(me, start, Destination, AvoidEnemies, true); - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var v in Galaxy.Current.FindSpaceObjects()) - v.RemoveOrder(this); - Galaxy.Current.UnassignID(this); - } - - public void Execute(IOrderable ord) - { - if (ord is IMobileSpaceObject sobj) - { - // TODO - movement logs - if (KnownTarget == null) - IsComplete = true; // target is known to be dead - else if (AreWeThereYet(sobj)) - IsComplete = true; // we've arrived at the target - else - { - var gotoSector = Pathfind(sobj, sobj.Sector).FirstOrDefault(); - if (gotoSector != null) - { - // move - if (gotoSector == null) - { - // try to warp through an unexplored warp point - var wps = sobj.Sector.SpaceObjects.OfType().Where(w => !w.TargetStarSystemLocation.Item.ExploredByEmpires.Contains(sobj.Owner)); - var wp = wps.PickRandom(); - if (wp != null) - { - // warp through the unexplored warp point - sobj.Sector = wp.Target; - } - else if (!LoggedPathfindingError) - { - // no warp points to explore and we haven'IMobileSpaceObject told the player yet - PathfindingError = sobj.CreateLogMessage("{0} found no unexplored warp points at {1} to enter.".F(sobj, sobj.Sector), LogMessageType.Warning); - sobj.Owner.Log.Add(PathfindingError); - LoggedPathfindingError = true; - } - } - else - { - sobj.Sector = gotoSector; - sobj.RefreshDijkstraMap(); - - // consume supplies - sobj.BurnMovementSupplies(); - - // are we there yet, Dad? - if (AreWeThereYet(sobj)) - IsComplete = true; // we've arrived at the target - - // resupply space vehicles - // either this vehicle from other space objects, or other vehicles from this one - // TODO - this should really be done AFTER battles... - if (gotoSector.HasAbility("Supply Generation", sobj.Owner)) - { - foreach (var v in gotoSector.SpaceObjects.OfType().Where(v => v.Owner == sobj.Owner)) - v.SupplyRemaining = v.SupplyStorage; - } - if (gotoSector.StarSystem.HasAbility("Supply Generation - System", sobj.Owner) || gotoSector.StarSystem.HasAbility("Supply Generation - System")) - { - foreach (var v in gotoSector.StarSystem.FindSpaceObjects().Where(v => v.Owner == sobj.Owner)) - v.SupplyRemaining = v.SupplyStorage; - } - } - } - else if (!LoggedPathfindingError) - { - // log pathfinding error - string reason; - if (sobj.StrategicSpeed <= 0) - reason = sobj + " is immobile"; - else - reason = "there is no available path leading toward " + Destination; - PathfindingError = sobj.CreateLogMessage(sobj + " could not " + Verb + " " + KnownTarget + " because " + reason + ".", LogMessageType.Warning); - sobj.Owner.Log.Add(PathfindingError); - LoggedPathfindingError = true; - } - } - - // spend time - sobj.SpendTime(sobj.TimePerMove); - } - else - ord.Owner.RecordLog(ord, $"{ord} cannot pathfind because it is not a mobile space object.", LogMessageType.Error); - } - - public IEnumerable GetErrors(IOrderable v) - { - if (PathfindingError != null) - yield return PathfindingError; - } - - /// - /// Finds the path for executing this order. - /// - /// The space object executing the order. - /// The start location (need not be the current location, in case there are prior orders queued). - /// - public abstract IEnumerable Pathfind(IMobileSpaceObject me, Sector start); - - public void ReplaceClientIDs(IDictionary idmap, ISet done) - { - // This type does not use client objects, so nothing to do here. - } - - public override string ToString() - { - if (KnownTarget == null) - return "Unknown " + Verb + " order"; - return Verb.Capitalize() + " " + KnownTarget; - } - - /// - /// Call this when calling UpdateMemory on the target. - /// Sets the alternate target to the largest ship in a fleet, if the target is a fleet. - /// If the fleet is destroyed, sets the target to the alternate target. - /// If the target is a ship, etc., and it is destroyed, sets the target to the memory of the target, or deletes the order if there is no memory. - /// If the target is a memory, and the original object is sighted again, sets the target to the original object. - /// Otherwise sets the alternate target to the target. - /// - public void UpdateAlternateTarget() - { - if (Target is Fleet) - { - var f = (Fleet)Target; - if (!f.IsDestroyed) - AlternateTarget = f.LeafVehicles.Largest(); - else - Target = AlternateTarget; - } - else if (Target is IMobileSpaceObject) - { - var sobj = (IMobileSpaceObject)Target; - if (sobj.IsMemory && sobj.FindOriginalObject(Owner) != null) - Target = (ISpaceObject)sobj.FindOriginalObject(Owner); - if (!sobj.IsDestroyed) - AlternateTarget = Target; - else if (Owner.Memory[Target.ID] != null) - Target = (ISpaceObject)Owner.Memory[Target.ID]; - else - Dispose(); - } - else - AlternateTarget = Target; - } - - protected abstract bool AreWeThereYet(IMobileSpaceObject me); - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + /// + /// An order to pathfind relative to a target. + /// + /// + public abstract class PathfindingOrder + : IPathfindingOrder + { + protected PathfindingOrder(ISpaceObject target, bool avoidEnemies) + { + Owner = Empire.Current; + Target = target; + AvoidEnemies = avoidEnemies; + // TODO - add flag for "avoid damaging sectors"? but how to specify in UI? + } + + /// + /// Alternate target. This should be the largest ship in a fleet when a fleet is being pursued. + /// + [DoNotSerialize] + public ISpaceObject AlternateTarget + { + get; + private set; + } + + /// + /// Should pathfinding avoid enemies? + /// + public bool AvoidEnemies { get; set; } + + public bool ConsumesMovement + { + get { return true; } + } + + public Sector Destination + { + get { return KnownTarget?.Sector; } + } + + public long ID { get; set; } + + public bool IsComplete + { + get; + set; + } + + public bool IsDisposed { get; set; } + + /// + /// Either the target itself, or the memory of the target, if it's not visible. + /// + public ISpaceObject KnownTarget + { + get + { + if (Target == null) + return null; + if (Target.CheckVisibility(Owner) >= Visibility.Visible) + return Target; + return Owner?.Recall(Target); + } + } + + /// + /// Did we already log a pathfinding error this turn? + /// + [DoNotSerialize] + public bool LoggedPathfindingError { get; private set; } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + /// + /// Any pathfinding error that we might have found. + /// + [DoNotSerialize] + public LogMessage PathfindingError { get; private set; } + + /// + /// The target we are pursuing. + /// + [DoNotSerialize] + public ISpaceObject Target { get { return target?.Value; } set { target = value.ReferViaGalaxy(); } } + + /// + /// A verb used to describe this order. + /// + public abstract string Verb { get; } + + private GalaxyReference owner { get; set; } + private GalaxyReference target { get; set; } + + public bool CheckCompletion(IOrderable v) + { + return IsComplete; + } + + /// + /// Orders are visible only to their owners. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Visible; + return Visibility.Unknown; + } + + public IDictionary, ISet>> CreateDijkstraMap(IMobileSpaceObject me, Sector start) + { + return Pathfinder.CreateDijkstraMap(me, start, Destination, AvoidEnemies, true); + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var v in Galaxy.Current.FindSpaceObjects()) + v.RemoveOrder(this); + Galaxy.Current.UnassignID(this); + } + + public void Execute(IOrderable ord) + { + if (ord is IMobileSpaceObject sobj) + { + // TODO - movement logs + if (KnownTarget == null) + IsComplete = true; // target is known to be dead + else if (AreWeThereYet(sobj)) + IsComplete = true; // we've arrived at the target + else + { + var gotoSector = Pathfind(sobj, sobj.Sector).FirstOrDefault(); + if (gotoSector != null) + { + // move + if (gotoSector == null) + { + // try to warp through an unexplored warp point + var wps = sobj.Sector.SpaceObjects.OfType().Where(w => !w.TargetStarSystemLocation.Item.ExploredByEmpires.Contains(sobj.Owner)); + var wp = wps.PickRandom(); + if (wp != null) + { + // warp through the unexplored warp point + sobj.Sector = wp.Target; + } + else if (!LoggedPathfindingError) + { + // no warp points to explore and we haven'IMobileSpaceObject told the player yet + PathfindingError = sobj.CreateLogMessage("{0} found no unexplored warp points at {1} to enter.".F(sobj, sobj.Sector), LogMessageType.Warning); + sobj.Owner.Log.Add(PathfindingError); + LoggedPathfindingError = true; + } + } + else + { + sobj.Sector = gotoSector; + sobj.RefreshDijkstraMap(); + + // consume supplies + sobj.BurnMovementSupplies(); + + // are we there yet, Dad? + if (AreWeThereYet(sobj)) + IsComplete = true; // we've arrived at the target + + // resupply space vehicles + // either this vehicle from other space objects, or other vehicles from this one + // TODO - this should really be done AFTER battles... + if (gotoSector.HasAbility("Supply Generation", sobj.Owner)) + { + foreach (var v in gotoSector.SpaceObjects.OfType().Where(v => v.Owner == sobj.Owner)) + v.SupplyRemaining = v.SupplyStorage; + } + if (gotoSector.StarSystem.HasAbility("Supply Generation - System", sobj.Owner) || gotoSector.StarSystem.HasAbility("Supply Generation - System")) + { + foreach (var v in gotoSector.StarSystem.FindSpaceObjects().Where(v => v.Owner == sobj.Owner)) + v.SupplyRemaining = v.SupplyStorage; + } + } + } + else if (!LoggedPathfindingError) + { + // log pathfinding error + string reason; + if (sobj.StrategicSpeed <= 0) + reason = sobj + " is immobile"; + else + reason = "there is no available path leading toward " + Destination; + PathfindingError = sobj.CreateLogMessage(sobj + " could not " + Verb + " " + KnownTarget + " because " + reason + ".", LogMessageType.Warning); + sobj.Owner.Log.Add(PathfindingError); + LoggedPathfindingError = true; + } + } + + // spend time + sobj.SpendTime(sobj.TimePerMove); + } + else + ord.Owner.RecordLog(ord, $"{ord} cannot pathfind because it is not a mobile space object.", LogMessageType.Error); + } + + public IEnumerable GetErrors(IOrderable v) + { + if (PathfindingError != null) + yield return PathfindingError; + } + + /// + /// Finds the path for executing this order. + /// + /// The space object executing the order. + /// The start location (need not be the current location, in case there are prior orders queued). + /// + public abstract IEnumerable Pathfind(IMobileSpaceObject me, Sector start); + + public void ReplaceClientIDs(IDictionary idmap, ISet done) + { + // This type does not use client objects, so nothing to do here. + } + + public override string ToString() + { + if (KnownTarget == null) + return "Unknown " + Verb + " order"; + return Verb.Capitalize() + " " + KnownTarget; + } + + /// + /// Call this when calling UpdateMemory on the target. + /// Sets the alternate target to the largest ship in a fleet, if the target is a fleet. + /// If the fleet is destroyed, sets the target to the alternate target. + /// If the target is a ship, etc., and it is destroyed, sets the target to the memory of the target, or deletes the order if there is no memory. + /// If the target is a memory, and the original object is sighted again, sets the target to the original object. + /// Otherwise sets the alternate target to the target. + /// + public void UpdateAlternateTarget() + { + if (Target is Fleet) + { + var f = (Fleet)Target; + if (!f.IsDestroyed) + AlternateTarget = f.LeafVehicles.Largest(); + else + Target = AlternateTarget; + } + else if (Target is IMobileSpaceObject) + { + var sobj = (IMobileSpaceObject)Target; + if (sobj.IsMemory && sobj.FindOriginalObject(Owner) != null) + Target = (ISpaceObject)sobj.FindOriginalObject(Owner); + if (!sobj.IsDestroyed) + AlternateTarget = Target; + else if (Owner.Memory[Target.ID] != null) + Target = (ISpaceObject)Owner.Memory[Target.ID]; + else + Dispose(); + } + else + AlternateTarget = Target; + } + + protected abstract bool AreWeThereYet(IMobileSpaceObject me); + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/PursueOrder.cs b/FrEee/Objects/Orders/PursueOrder.cs similarity index 86% rename from FrEee/Game/Objects/Orders/PursueOrder.cs rename to FrEee/Objects/Orders/PursueOrder.cs index 9814070cd..42c3f2c83 100644 --- a/FrEee/Game/Objects/Orders/PursueOrder.cs +++ b/FrEee/Objects/Orders/PursueOrder.cs @@ -1,48 +1,48 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order to move a mobile space object toward another space object. - /// - [Serializable] - public class PursueOrder : PathfindingOrder - { - public PursueOrder(ISpaceObject target, bool avoidEnemies) - : base(target, avoidEnemies) - { - } - - public override string Verb - { - get - { - if (KnownTarget == null) - return "pursue"; - else if (AvoidEnemies && KnownTarget.Owner != null && (!(KnownTarget is ICombatant) || !(KnownTarget as ICombatant).IsHostileTo(Owner))) - return "escort"; - else - return "pursue"; - } - } - - /// - /// Finds the path for executing this order. - /// - /// The space object executing the order. - /// - public override IEnumerable Pathfind(IMobileSpaceObject me, Sector start) - { - return Pathfinder.Pathfind(me, start, Destination, AvoidEnemies, true, me.DijkstraMap); - } - - protected override bool AreWeThereYet(IMobileSpaceObject me) - { - return me.Sector == Destination; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.Orders +{ + /// + /// An order to move a mobile space object toward another space object. + /// + [Serializable] + public class PursueOrder : PathfindingOrder + { + public PursueOrder(ISpaceObject target, bool avoidEnemies) + : base(target, avoidEnemies) + { + } + + public override string Verb + { + get + { + if (KnownTarget == null) + return "pursue"; + else if (AvoidEnemies && KnownTarget.Owner != null && (!(KnownTarget is ICombatant) || !(KnownTarget as ICombatant).IsHostileTo(Owner))) + return "escort"; + else + return "pursue"; + } + } + + /// + /// Finds the path for executing this order. + /// + /// The space object executing the order. + /// + public override IEnumerable Pathfind(IMobileSpaceObject me, Sector start) + { + return Pathfinder.Pathfind(me, start, Destination, AvoidEnemies, true, me.DijkstraMap); + } + + protected override bool AreWeThereYet(IMobileSpaceObject me) + { + return me.Sector == Destination; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/RecycleBehaviors/ScrapBehavior.cs b/FrEee/Objects/Orders/RecycleBehaviors/ScrapBehavior.cs similarity index 88% rename from FrEee/Game/Objects/Orders/RecycleBehaviors/ScrapBehavior.cs rename to FrEee/Objects/Orders/RecycleBehaviors/ScrapBehavior.cs index 06f856b4d..45c42f90d 100644 --- a/FrEee/Game/Objects/Orders/RecycleBehaviors/ScrapBehavior.cs +++ b/FrEee/Objects/Orders/RecycleBehaviors/ScrapBehavior.cs @@ -1,54 +1,54 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders.RecycleBehaviors -{ - /// - /// Scraps a recyclable object, returning resources equal to its scrap value. - /// If there is anything in cargo, it will be scrapped as well. - /// - public class ScrapBehavior : IRecycleBehavior - { - public string Verb { get { return "Scrap"; } } - - public void Execute(IRecyclable target, bool didRecycle = false) - { - // don't scrap stuff that's already been scrapped due to it being in cargo of something else being scrapped! - if (!target.IsDisposed) - { - var val = target.ScrapValue; - if (target.Owner != null) // if not, it's already scrapped? - { - target.Owner.StoredResources += val; - target.Owner.Log.Add(target.CreateLogMessage("We have scrapped " + target + " and reclaimed " + val + ".", LogMessageType.Generic)); - } - target.Dispose(); - - if (!didRecycle) - target.Recycle(this, true); - } - } - - public IEnumerable GetErrors(IMobileSpaceObject executor, IRecyclable target) - { - if (target == null) - { - yield return new GenericLogMessage("A scrap order was issued for a nonexistent target."); - yield break; - } - if (target.IsDisposed) - yield return target.CreateLogMessage($"{target} cannot be scrapped because it is already destroyed.", LogMessageType.Error); - if (target.RecycleContainer != executor) - yield return target.CreateLogMessage(target + " cannot be scrapped by " + executor + " because " + target + " does not belong to " + executor + ".", LogMessageType.Error); - if ((target is Ship || target is Base) && !executor.Sector.SpaceObjects.Any(sobj => sobj.Owner == executor.Owner && sobj.HasAbility("Space Yard"))) - yield return target.CreateLogMessage(target + " cannot be scrapped at " + executor.Sector + " because there is no space yard present in that sector.", LogMessageType.Error); - if ((target is IUnit) && !executor.Sector.SpaceObjects.Any(sobj => sobj.Owner == executor.Owner && (sobj is Planet || sobj.HasAbility("Space Yard")))) - yield return target.CreateLogMessage(target + " cannot be scrapped at " + executor.Sector + " because there is no space yard or colony present in that sector.", LogMessageType.Error); - } - } +using FrEee.Interfaces; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders.RecycleBehaviors +{ + /// + /// Scraps a recyclable object, returning resources equal to its scrap value. + /// If there is anything in cargo, it will be scrapped as well. + /// + public class ScrapBehavior : IRecycleBehavior + { + public string Verb { get { return "Scrap"; } } + + public void Execute(IRecyclable target, bool didRecycle = false) + { + // don't scrap stuff that's already been scrapped due to it being in cargo of something else being scrapped! + if (!target.IsDisposed) + { + var val = target.ScrapValue; + if (target.Owner != null) // if not, it's already scrapped? + { + target.Owner.StoredResources += val; + target.Owner.Log.Add(target.CreateLogMessage("We have scrapped " + target + " and reclaimed " + val + ".", LogMessageType.Generic)); + } + target.Dispose(); + + if (!didRecycle) + target.Recycle(this, true); + } + } + + public IEnumerable GetErrors(IMobileSpaceObject executor, IRecyclable target) + { + if (target == null) + { + yield return new GenericLogMessage("A scrap order was issued for a nonexistent target."); + yield break; + } + if (target.IsDisposed) + yield return target.CreateLogMessage($"{target} cannot be scrapped because it is already destroyed.", LogMessageType.Error); + if (target.RecycleContainer != executor) + yield return target.CreateLogMessage(target + " cannot be scrapped by " + executor + " because " + target + " does not belong to " + executor + ".", LogMessageType.Error); + if ((target is Ship || target is Base) && !executor.Sector.SpaceObjects.Any(sobj => sobj.Owner == executor.Owner && sobj.HasAbility("Space Yard"))) + yield return target.CreateLogMessage(target + " cannot be scrapped at " + executor.Sector + " because there is no space yard present in that sector.", LogMessageType.Error); + if ((target is IUnit) && !executor.Sector.SpaceObjects.Any(sobj => sobj.Owner == executor.Owner && (sobj is Planet || sobj.HasAbility("Space Yard")))) + yield return target.CreateLogMessage(target + " cannot be scrapped at " + executor.Sector + " because there is no space yard or colony present in that sector.", LogMessageType.Error); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/RecycleFacilityOrCargoOrder.cs b/FrEee/Objects/Orders/RecycleFacilityOrCargoOrder.cs similarity index 86% rename from FrEee/Game/Objects/Orders/RecycleFacilityOrCargoOrder.cs rename to FrEee/Objects/Orders/RecycleFacilityOrCargoOrder.cs index ad172258e..1c2501530 100644 --- a/FrEee/Game/Objects/Orders/RecycleFacilityOrCargoOrder.cs +++ b/FrEee/Objects/Orders/RecycleFacilityOrCargoOrder.cs @@ -1,120 +1,120 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - public class RecycleFacilityOrCargoOrder : IOrder - { - public RecycleFacilityOrCargoOrder(IRecycleBehavior behavior, IRecyclable target) - { - Behavior = behavior; - Target = target; - } - - public IRecycleBehavior Behavior { get; private set; } - - public bool ConsumesMovement - { - get { return false; } - } - - public long ID - { - get; - set; - } - - public bool IsComplete - { - get; - set; - } - - public bool IsDisposed - { - get; - set; - } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - /// - /// The facility or unit in cargo to recycle. - /// - [DoNotSerialize] - public IRecyclable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } - - private GalaxyReference owner { get; set; } - private GalaxyReference target { get; set; } - - public bool CheckCompletion(IOrderable executor) - { - return IsComplete; - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var v in Galaxy.Current.Referrables.OfType()) - v.RemoveOrder(this); - Galaxy.Current.UnassignID(this); - } - - public void Execute(IOrderable x) - { - if (x is IMobileSpaceObject executor) - { - var errors = GetErrors(executor); - if (errors.Any()) - { - if (Owner != null) - { - foreach (var e in errors) - Owner.Log.Add(e); - } - else - IsComplete = true; - return; - } - } - - Behavior.Execute(Target); - IsComplete = true; - } - - public IEnumerable GetErrors(IOrderable executor) - { - return Behavior.GetErrors(executor as IMobileSpaceObject, Target).Concat(SelfErrors); - } - - private IEnumerable SelfErrors - { - get - { - if (Target is ICombatant c && c.IsHostileTo(Owner)) - yield return c.CreateLogMessage($"You can't {Behavior.Verb} {c} because it belongs to a hostile empire.", LogMessageType.Error); - } - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // This type does not use client objects, so nothing to do here. - } - - public override string ToString() - { - return Behavior.Verb + " " + Target; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + public class RecycleFacilityOrCargoOrder : IOrder + { + public RecycleFacilityOrCargoOrder(IRecycleBehavior behavior, IRecyclable target) + { + Behavior = behavior; + Target = target; + } + + public IRecycleBehavior Behavior { get; private set; } + + public bool ConsumesMovement + { + get { return false; } + } + + public long ID + { + get; + set; + } + + public bool IsComplete + { + get; + set; + } + + public bool IsDisposed + { + get; + set; + } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + /// + /// The facility or unit in cargo to recycle. + /// + [DoNotSerialize] + public IRecyclable Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } + + private GalaxyReference owner { get; set; } + private GalaxyReference target { get; set; } + + public bool CheckCompletion(IOrderable executor) + { + return IsComplete; + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var v in Galaxy.Current.Referrables.OfType()) + v.RemoveOrder(this); + Galaxy.Current.UnassignID(this); + } + + public void Execute(IOrderable x) + { + if (x is IMobileSpaceObject executor) + { + var errors = GetErrors(executor); + if (errors.Any()) + { + if (Owner != null) + { + foreach (var e in errors) + Owner.Log.Add(e); + } + else + IsComplete = true; + return; + } + } + + Behavior.Execute(Target); + IsComplete = true; + } + + public IEnumerable GetErrors(IOrderable executor) + { + return Behavior.GetErrors(executor as IMobileSpaceObject, Target).Concat(SelfErrors); + } + + private IEnumerable SelfErrors + { + get + { + if (Target is ICombatant c && c.IsHostileTo(Owner)) + yield return c.CreateLogMessage($"You can't {Behavior.Verb} {c} because it belongs to a hostile empire.", LogMessageType.Error); + } + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // This type does not use client objects, so nothing to do here. + } + + public override string ToString() + { + return Behavior.Verb + " " + Target; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/RecycleVehicleInSpaceOrder.cs b/FrEee/Objects/Orders/RecycleVehicleInSpaceOrder.cs similarity index 83% rename from FrEee/Game/Objects/Orders/RecycleVehicleInSpaceOrder.cs rename to FrEee/Objects/Orders/RecycleVehicleInSpaceOrder.cs index 1c5133278..686851192 100644 --- a/FrEee/Game/Objects/Orders/RecycleVehicleInSpaceOrder.cs +++ b/FrEee/Objects/Orders/RecycleVehicleInSpaceOrder.cs @@ -1,95 +1,95 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - public class RecycleVehicleInSpaceOrder : IOrder - { - public RecycleVehicleInSpaceOrder(IRecycleBehavior behavior) - { - Behavior = behavior; - } - - public IRecycleBehavior Behavior { get; private set; } - - public bool ConsumesMovement - { - get { return false; } - } - - public long ID - { - get; - set; - } - - public bool IsComplete - { - get; - set; - } - - public bool IsDisposed - { - get; - set; - } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - private GalaxyReference owner { get; set; } - - public bool CheckCompletion(IOrderable executor) - { - return IsComplete; - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var v in Galaxy.Current.Referrables.OfType()) - v.Orders.Remove(this); - Galaxy.Current.UnassignID(this); - } - - public void Execute(IOrderable executor) - { - var errors = GetErrors(executor); - if (errors.Any() && Owner != null) - { - foreach (var e in errors) - Owner.Log.Add(e); - return; - } - - Behavior.Execute((IRecyclable)executor); - IsComplete = true; - } - - public IEnumerable GetErrors(IOrderable executor) - { - return Behavior.GetErrors(executor as IMobileSpaceObject, executor as IRecyclable); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // This type does not use client objects, so nothing to do here. - } - - public override string ToString() - { - return Behavior.Verb; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Utility; using FrEee.Serialization; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + public class RecycleVehicleInSpaceOrder : IOrder + { + public RecycleVehicleInSpaceOrder(IRecycleBehavior behavior) + { + Behavior = behavior; + } + + public IRecycleBehavior Behavior { get; private set; } + + public bool ConsumesMovement + { + get { return false; } + } + + public long ID + { + get; + set; + } + + public bool IsComplete + { + get; + set; + } + + public bool IsDisposed + { + get; + set; + } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + private GalaxyReference owner { get; set; } + + public bool CheckCompletion(IOrderable executor) + { + return IsComplete; + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var v in Galaxy.Current.Referrables.OfType()) + v.Orders.Remove(this); + Galaxy.Current.UnassignID(this); + } + + public void Execute(IOrderable executor) + { + var errors = GetErrors(executor); + if (errors.Any() && Owner != null) + { + foreach (var e in errors) + Owner.Log.Add(e); + return; + } + + Behavior.Execute((IRecyclable)executor); + IsComplete = true; + } + + public IEnumerable GetErrors(IOrderable executor) + { + return Behavior.GetErrors(executor as IMobileSpaceObject, executor as IRecyclable); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // This type does not use client objects, so nothing to do here. + } + + public override string ToString() + { + return Behavior.Verb; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/SentryOrder.cs b/FrEee/Objects/Orders/SentryOrder.cs similarity index 83% rename from FrEee/Game/Objects/Orders/SentryOrder.cs rename to FrEee/Objects/Orders/SentryOrder.cs index f30c94919..66865d8b4 100644 --- a/FrEee/Game/Objects/Orders/SentryOrder.cs +++ b/FrEee/Objects/Orders/SentryOrder.cs @@ -1,106 +1,106 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order for a mobile space object to hold position until enemies are sighted in the system. - /// - [Serializable] - public class SentryOrder : IOrder - { - public SentryOrder() - { - Owner = Empire.Current; - } - - public bool ConsumesMovement - { - get { return true; } - } - - public long ID { get; set; } - - public bool IsComplete - { - get; - set; - } - - public bool IsDisposed { get; set; } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - private GalaxyReference owner { get; set; } - - public bool CheckCompletion(IOrderable v) - { - return IsComplete; - } - - /// - /// Orders are visible only to their owners. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Visible; - return Visibility.Unknown; - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var v in Galaxy.Current.Referrables.OfType()) - v.Orders.Remove(this); - Galaxy.Current.UnassignID(this); - } - - public void Execute(IOrderable ord) - { - if (ord is IMobileSpaceObject sobj) - { - // if hostiles in system, we are done sentrying - if (sobj.FindStarSystem().FindSpaceObjects(s => s.IsHostileTo(sobj.Owner)).Any()) - IsComplete = true; - - // spend time - sobj.SpendTime(sobj.TimePerMove); - } - else - ord.Owner.RecordLog(ord, $"{ord} cannot sentry because it is not a mobile space object.", LogMessageType.Error); - } - - public IEnumerable GetErrors(IOrderable executor) - { - // this order doesn't error - yield break; - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // This type does not use client objects, so nothing to do here. - } - - public override string ToString() - { - return "Sentry"; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + /// + /// An order for a mobile space object to hold position until enemies are sighted in the system. + /// + [Serializable] + public class SentryOrder : IOrder + { + public SentryOrder() + { + Owner = Empire.Current; + } + + public bool ConsumesMovement + { + get { return true; } + } + + public long ID { get; set; } + + public bool IsComplete + { + get; + set; + } + + public bool IsDisposed { get; set; } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + private GalaxyReference owner { get; set; } + + public bool CheckCompletion(IOrderable v) + { + return IsComplete; + } + + /// + /// Orders are visible only to their owners. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Visible; + return Visibility.Unknown; + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var v in Galaxy.Current.Referrables.OfType()) + v.Orders.Remove(this); + Galaxy.Current.UnassignID(this); + } + + public void Execute(IOrderable ord) + { + if (ord is IMobileSpaceObject sobj) + { + // if hostiles in system, we are done sentrying + if (sobj.FindStarSystem().FindSpaceObjects(s => s.IsHostileTo(sobj.Owner)).Any()) + IsComplete = true; + + // spend time + sobj.SpendTime(sobj.TimePerMove); + } + else + ord.Owner.RecordLog(ord, $"{ord} cannot sentry because it is not a mobile space object.", LogMessageType.Error); + } + + public IEnumerable GetErrors(IOrderable executor) + { + // this order doesn't error + yield break; + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // This type does not use client objects, so nothing to do here. + } + + public override string ToString() + { + return "Sentry"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/TransferCargoOrder.cs b/FrEee/Objects/Orders/TransferCargoOrder.cs similarity index 89% rename from FrEee/Game/Objects/Orders/TransferCargoOrder.cs rename to FrEee/Objects/Orders/TransferCargoOrder.cs index 306bf44a3..4ac649bf4 100644 --- a/FrEee/Game/Objects/Orders/TransferCargoOrder.cs +++ b/FrEee/Objects/Orders/TransferCargoOrder.cs @@ -1,142 +1,142 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order to transfer cargo from one object to another. - /// - public class TransferCargoOrder : IOrder - { - public TransferCargoOrder(bool isLoadOrder, CargoDelta cargoDelta, ICargoTransferrer target) - { - Owner = Empire.Current; - IsLoadOrder = isLoadOrder; - CargoDelta = cargoDelta; - Target = target; - } - - /// - /// The cargo delta, which specifies what cargo is to be transferred. - /// - public CargoDelta CargoDelta { get; set; } - - public bool ConsumesMovement - { - get { return false; } - } - - public long ID { get; set; } - - public bool IsComplete - { - get; - set; - } - - public bool IsDisposed { get; set; } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - /// - /// The cargo transferrer to which the cargo will be transferred, or null to launch/recover to/from space. - /// - [DoNotSerialize] - public ICargoTransferrer Target { get { return target?.Value; } set { target = value.ReferViaGalaxy(); } } - - /// - /// True if this is a load order, false if it is a drop order. - /// - private bool IsLoadOrder { get; set; } - - private GalaxyReference owner { get; set; } - private GalaxyReference target { get; set; } - - public bool CheckCompletion(IOrderable v) - { - return IsComplete; - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var v in Galaxy.Current.Referrables.OfType()) - v.RemoveOrder(this); - Galaxy.Current.UnassignID(this); - } - - public void Execute(IOrderable ord) - { - if (ord is ICargoTransferrer executor) - { - var errors = GetErrors(executor); - if (executor.Owner != null) - { - foreach (var error in errors) - executor.Owner.Log.Add(error); - } - - if (!errors.Any()) - { - if (IsLoadOrder) - Target.TransferCargo(CargoDelta, executor, executor.Owner); - else - executor.TransferCargo(CargoDelta, Target, executor.Owner); - } - IsComplete = true; - } - } - - public IEnumerable GetErrors(IOrderable executor) - { - if (executor is ICargoTransferrer t) - { - if (Target != null && t.Sector != Target.Sector) - yield return t.CreateLogMessage(executor + " cannot transfer cargo to " + Target + " because they are not in the same sector.", LogMessageType.Warning); - } - else - yield return executor.CreateLogMessage($"{executor} cannot transfer cargo.", LogMessageType.Warning); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - target?.ReplaceClientIDs(idmap, done); - owner.ReplaceClientIDs(idmap, done); - } - } - - public override string ToString() - { - if (Target == null) - { - if (IsLoadOrder) - return "Recover " + CargoDelta; - else - return "Launch " + CargoDelta; - } - else - { - if (IsLoadOrder) - return "Load " + CargoDelta + " from " + Target; - else - return "Drop " + CargoDelta + " at " + Target; - } - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + /// + /// An order to transfer cargo from one object to another. + /// + public class TransferCargoOrder : IOrder + { + public TransferCargoOrder(bool isLoadOrder, CargoDelta cargoDelta, ICargoTransferrer target) + { + Owner = Empire.Current; + IsLoadOrder = isLoadOrder; + CargoDelta = cargoDelta; + Target = target; + } + + /// + /// The cargo delta, which specifies what cargo is to be transferred. + /// + public CargoDelta CargoDelta { get; set; } + + public bool ConsumesMovement + { + get { return false; } + } + + public long ID { get; set; } + + public bool IsComplete + { + get; + set; + } + + public bool IsDisposed { get; set; } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + /// + /// The cargo transferrer to which the cargo will be transferred, or null to launch/recover to/from space. + /// + [DoNotSerialize] + public ICargoTransferrer Target { get { return target?.Value; } set { target = value.ReferViaGalaxy(); } } + + /// + /// True if this is a load order, false if it is a drop order. + /// + private bool IsLoadOrder { get; set; } + + private GalaxyReference owner { get; set; } + private GalaxyReference target { get; set; } + + public bool CheckCompletion(IOrderable v) + { + return IsComplete; + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var v in Galaxy.Current.Referrables.OfType()) + v.RemoveOrder(this); + Galaxy.Current.UnassignID(this); + } + + public void Execute(IOrderable ord) + { + if (ord is ICargoTransferrer executor) + { + var errors = GetErrors(executor); + if (executor.Owner != null) + { + foreach (var error in errors) + executor.Owner.Log.Add(error); + } + + if (!errors.Any()) + { + if (IsLoadOrder) + Target.TransferCargo(CargoDelta, executor, executor.Owner); + else + executor.TransferCargo(CargoDelta, Target, executor.Owner); + } + IsComplete = true; + } + } + + public IEnumerable GetErrors(IOrderable executor) + { + if (executor is ICargoTransferrer t) + { + if (Target != null && t.Sector != Target.Sector) + yield return t.CreateLogMessage(executor + " cannot transfer cargo to " + Target + " because they are not in the same sector.", LogMessageType.Warning); + } + else + yield return executor.CreateLogMessage($"{executor} cannot transfer cargo.", LogMessageType.Warning); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + target?.ReplaceClientIDs(idmap, done); + owner.ReplaceClientIDs(idmap, done); + } + } + + public override string ToString() + { + if (Target == null) + { + if (IsLoadOrder) + return "Recover " + CargoDelta; + else + return "Launch " + CargoDelta; + } + else + { + if (IsLoadOrder) + return "Load " + CargoDelta + " from " + Target; + else + return "Drop " + CargoDelta + " at " + Target; + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/UpgradeFacilityOrder.cs b/FrEee/Objects/Orders/UpgradeFacilityOrder.cs similarity index 91% rename from FrEee/Game/Objects/Orders/UpgradeFacilityOrder.cs rename to FrEee/Objects/Orders/UpgradeFacilityOrder.cs index 68b9117b2..4b1e61792 100644 --- a/FrEee/Game/Objects/Orders/UpgradeFacilityOrder.cs +++ b/FrEee/Objects/Orders/UpgradeFacilityOrder.cs @@ -1,200 +1,200 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order for a construction queue to upgrade a facility. - /// - [Serializable] - public class UpgradeFacilityOrder : IConstructionOrder - { - public UpgradeFacilityOrder(FacilityUpgrade fu) - { - Owner = Empire.Current; - Upgrade = fu; - } - - public bool ConsumesMovement - { - get { return false; } - } - - public ResourceQuantity Cost - { - get { return Upgrade.Cost; } - } - - public long ID { get; set; } - - public bool IsComplete - { - get - { - if (isComplete == null) - return false; // haven't checked completion yet, so it's probably safe to say it's incomplete - return isComplete.Value; - } - set - { isComplete = value; } - } - - public bool IsDisposed { get; set; } - - IConstructable IConstructionOrder.Item - { - get { return NewFacility; } - } - - public string Name - { - get - { - return "Upgrade to " + Upgrade.New.Name; - } - } - - /// - /// The facility being built. - /// - public Facility NewFacility { get; set; } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - IConstructionTemplate IConstructionOrder.Template { get { return Upgrade.New; } } - - /// - /// The upgrade to perform. - /// - public FacilityUpgrade Upgrade { get; set; } - - [DoNotSerialize] - private bool? isComplete - { - get; - set; - } - - private GalaxyReference owner { get; set; } - - public bool CheckCompletion(IOrderable queue) - { - if (NewFacility == null) - return false; - isComplete = NewFacility.ConstructionProgress >= Cost || GetErrors(queue).Any(); - return IsComplete; - } - - /// - /// Orders are visible only to their owners. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Visible; - return Visibility.Unknown; - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var v in Galaxy.Current.Referrables.OfType()) - v.Orders.Remove(this); - Galaxy.Current.UnassignID(this); - } - - /// - /// Does 1 turn's worth of building. - /// - public void Execute(IOrderable ord) - { - if (ord is ConstructionQueue queue) - { - var errors = GetErrors(queue); - foreach (var error in errors) - queue.Owner.Log.Add(error); - - if (!errors.Any()) - { - // create item if needed - if (NewFacility == null) - NewFacility = Upgrade.New.Instantiate(); - - // apply build rate - var costLeft = Cost - NewFacility.ConstructionProgress; - var spending = ResourceQuantity.Min(costLeft, queue.UnspentRate); - if (spending < queue.Owner.StoredResources) - { - spending = ResourceQuantity.Min(spending, queue.Owner.StoredResources); - queue.Container.CreateLogMessage("Construction of " + Upgrade.New + " at " + queue.Container + " was delayed due to lack of resources.", LogMessageType.Generic); - } - queue.Owner.StoredResources -= spending; - queue.UnspentRate -= spending; - NewFacility.ConstructionProgress += spending; - - // if we're done, delete the old facility and replace it with this one - if (CheckCompletion(queue)) - { - var planet = (Planet)queue.Container; - planet.Colony.Facilities.Where(f => f.Template.ModID == Upgrade.Old.ModID).First().Dispose(); // HACK - why are we getting duplicate facility templates? - planet.Colony.Facilities.Add(NewFacility); - } - } - } - } - - public IEnumerable GetErrors(IOrderable ord) - { - if (ord is ConstructionQueue queue) - { - // validate that new facility is unlocked - if (!queue.Owner.HasUnlocked(Upgrade.New)) - yield return Upgrade.Old.CreateLogMessage(Upgrade.Old + " on " + queue.Container + " could not be upgraded to a " + Upgrade.New + " because we have not yet researched the " + Upgrade.New + ".", LogMessageType.Error); - - // validate that new and old facilities are in the same family - if (Upgrade.New.Family.Value != Upgrade.Old.Family.Value) - yield return Upgrade.Old.CreateLogMessage(Upgrade.Old + " on " + queue.Container + " could not be upgraded to a " + Upgrade.New + " because facilities cannot be upgraded to facilities of a different family.", LogMessageType.Error); - - // validate that there is a facility to upgrade - var planet = (Planet)queue.Container; - var colony = planet.Colony; - if (!colony.Facilities.Any(f => f.Template.ModID == Upgrade.Old.ModID)) // HACK - why are we getting duplicate facility templates? - yield return planet.CreateLogMessage("There are no " + Upgrade.Old + "s on " + planet + " to upgrade.", LogMessageType.Error); - } - else - yield return ord.CreateLogMessage($"{ord} cannot upgrade facilities because it is not a construction queue.", LogMessageType.Error); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - Upgrade.ReplaceClientIDs(idmap, done); - } - } - - public void Reset() - { - NewFacility = null; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + /// + /// An order for a construction queue to upgrade a facility. + /// + [Serializable] + public class UpgradeFacilityOrder : IConstructionOrder + { + public UpgradeFacilityOrder(FacilityUpgrade fu) + { + Owner = Empire.Current; + Upgrade = fu; + } + + public bool ConsumesMovement + { + get { return false; } + } + + public ResourceQuantity Cost + { + get { return Upgrade.Cost; } + } + + public long ID { get; set; } + + public bool IsComplete + { + get + { + if (isComplete == null) + return false; // haven't checked completion yet, so it's probably safe to say it's incomplete + return isComplete.Value; + } + set + { isComplete = value; } + } + + public bool IsDisposed { get; set; } + + IConstructable IConstructionOrder.Item + { + get { return NewFacility; } + } + + public string Name + { + get + { + return "Upgrade to " + Upgrade.New.Name; + } + } + + /// + /// The facility being built. + /// + public Facility NewFacility { get; set; } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + IConstructionTemplate IConstructionOrder.Template { get { return Upgrade.New; } } + + /// + /// The upgrade to perform. + /// + public FacilityUpgrade Upgrade { get; set; } + + [DoNotSerialize] + private bool? isComplete + { + get; + set; + } + + private GalaxyReference owner { get; set; } + + public bool CheckCompletion(IOrderable queue) + { + if (NewFacility == null) + return false; + isComplete = NewFacility.ConstructionProgress >= Cost || GetErrors(queue).Any(); + return IsComplete; + } + + /// + /// Orders are visible only to their owners. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Visible; + return Visibility.Unknown; + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var v in Galaxy.Current.Referrables.OfType()) + v.Orders.Remove(this); + Galaxy.Current.UnassignID(this); + } + + /// + /// Does 1 turn's worth of building. + /// + public void Execute(IOrderable ord) + { + if (ord is ConstructionQueue queue) + { + var errors = GetErrors(queue); + foreach (var error in errors) + queue.Owner.Log.Add(error); + + if (!errors.Any()) + { + // create item if needed + if (NewFacility == null) + NewFacility = Upgrade.New.Instantiate(); + + // apply build rate + var costLeft = Cost - NewFacility.ConstructionProgress; + var spending = ResourceQuantity.Min(costLeft, queue.UnspentRate); + if (spending < queue.Owner.StoredResources) + { + spending = ResourceQuantity.Min(spending, queue.Owner.StoredResources); + queue.Container.CreateLogMessage("Construction of " + Upgrade.New + " at " + queue.Container + " was delayed due to lack of resources.", LogMessageType.Generic); + } + queue.Owner.StoredResources -= spending; + queue.UnspentRate -= spending; + NewFacility.ConstructionProgress += spending; + + // if we're done, delete the old facility and replace it with this one + if (CheckCompletion(queue)) + { + var planet = (Planet)queue.Container; + planet.Colony.Facilities.Where(f => f.Template.ModID == Upgrade.Old.ModID).First().Dispose(); // HACK - why are we getting duplicate facility templates? + planet.Colony.Facilities.Add(NewFacility); + } + } + } + } + + public IEnumerable GetErrors(IOrderable ord) + { + if (ord is ConstructionQueue queue) + { + // validate that new facility is unlocked + if (!queue.Owner.HasUnlocked(Upgrade.New)) + yield return Upgrade.Old.CreateLogMessage(Upgrade.Old + " on " + queue.Container + " could not be upgraded to a " + Upgrade.New + " because we have not yet researched the " + Upgrade.New + ".", LogMessageType.Error); + + // validate that new and old facilities are in the same family + if (Upgrade.New.Family.Value != Upgrade.Old.Family.Value) + yield return Upgrade.Old.CreateLogMessage(Upgrade.Old + " on " + queue.Container + " could not be upgraded to a " + Upgrade.New + " because facilities cannot be upgraded to facilities of a different family.", LogMessageType.Error); + + // validate that there is a facility to upgrade + var planet = (Planet)queue.Container; + var colony = planet.Colony; + if (!colony.Facilities.Any(f => f.Template.ModID == Upgrade.Old.ModID)) // HACK - why are we getting duplicate facility templates? + yield return planet.CreateLogMessage("There are no " + Upgrade.Old + "s on " + planet + " to upgrade.", LogMessageType.Error); + } + else + yield return ord.CreateLogMessage($"{ord} cannot upgrade facilities because it is not a construction queue.", LogMessageType.Error); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + Upgrade.ReplaceClientIDs(idmap, done); + } + } + + public void Reset() + { + NewFacility = null; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Orders/WarpOrder.cs b/FrEee/Objects/Orders/WarpOrder.cs similarity index 90% rename from FrEee/Game/Objects/Orders/WarpOrder.cs rename to FrEee/Objects/Orders/WarpOrder.cs index a02b4158e..2c8f33f3f 100644 --- a/FrEee/Game/Objects/Orders/WarpOrder.cs +++ b/FrEee/Objects/Orders/WarpOrder.cs @@ -1,173 +1,173 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order to warp a mobile space object via a warp point. - /// TODO - make this also pursue the warp point first - /// - [Serializable] - public class WarpOrder : IOrder - { - public WarpOrder(WarpPoint warpPoint) - { - Owner = Empire.Current; - WarpPoint = warpPoint; - } - - public bool ConsumesMovement - { - get { return true; } - } - - public Sector Destination - { - get { return WarpPoint.Target; } - } - - public long ID { get; set; } - - public bool IsComplete - { - get; - set; - } - - public bool IsDisposed { get; set; } - - [DoNotSerialize] - public bool LoggedPathfindingError - { - get; - private set; - } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - /// - /// The warp point we are using. - /// - [DoNotSerialize] - public WarpPoint WarpPoint { get { return warpPoint; } set { warpPoint = value; } } - - private GalaxyReference owner { get; set; } - private GalaxyReference warpPoint { get; set; } - - public bool CheckCompletion(IOrderable v) - { - return IsComplete; - } - - /// - /// Orders are visible only to their owners. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Visible; - return Visibility.Unknown; - } - - public IDictionary, ISet>> CreateDijkstraMap(IMobileSpaceObject me, Sector start) - { - return Pathfinder.CreateDijkstraMap(me, start, Destination, false, true); - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var v in Galaxy.Current.Referrables.OfType()) - v.RemoveOrder(this); - Galaxy.Current.UnassignID(this); - } - - public void Execute(IOrderable ord) - { - var errors = GetErrors(ord); - foreach (var error in errors) - Owner.Log.Add(error); - - var sobj = (IMobileSpaceObject)ord; - if (!errors.Any()) - { - var here = sobj.Sector; - if (here == WarpPoint.Sector) - { - // warp now!!! - here.Remove(sobj); - - // warp point turbulence damage? - if (WarpPoint.HasAbility("Warp Point - Turbulence")) - { - var dmg = WarpPoint.GetAbilityValue("Warp Point - Turbulence").ToInt(); - sobj.TakeNormalDamage(dmg); - if (sobj.IsDestroyed) - { - sobj.Owner.Log.Add(sobj.CreateLogMessage(sobj + " was destroyed by turbulence when traversing " + WarpPoint + ".", LogMessageType.Generic)); - IsComplete = true; - return; - } - else - sobj.Owner.Log.Add(sobj.CreateLogMessage(sobj + " took " + dmg + " points of damage from turbulence when traversing " + WarpPoint + ".", LogMessageType.Generic)); - } - - sobj.Sector = WarpPoint.Target; - sobj.RefreshDijkstraMap(); - - // mark system explored - WarpPoint.TargetStarSystemLocation.Item.MarkAsExploredBy(((ISpaceObject)sobj).Owner); - - // done warping - IsComplete = true; - } - else - { - // can'IMobileSpaceObject warp here, maybe the GUI should have issued a move order? - ((ISpaceObject)sobj).Owner.Log.Add(sobj.CreateLogMessage(sobj + " cannot warp via " + WarpPoint + " because it is not currently located at the warp point.", LogMessageType.Warning)); - } - } - - // spend time - sobj.SpendTime(sobj.TimePerMove); - } - - public IEnumerable GetErrors(IOrderable executor) - { - // this order doesn't error - yield break; - } - - public IEnumerable Pathfind(IMobileSpaceObject me, Sector start) - { - return Pathfinder.Pathfind(me, start, Destination, false, true, me.DijkstraMap); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // This type does not use client objects, so nothing to do here. - } - - public override string ToString() - { - if (WarpPoint == null) - return "Invalid Warp Order"; - return "Warp via " + WarpPoint.Name + " in " + WarpPoint.FindStarSystem(); - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + /// + /// An order to warp a mobile space object via a warp point. + /// TODO - make this also pursue the warp point first + /// + [Serializable] + public class WarpOrder : IOrder + { + public WarpOrder(WarpPoint warpPoint) + { + Owner = Empire.Current; + WarpPoint = warpPoint; + } + + public bool ConsumesMovement + { + get { return true; } + } + + public Sector Destination + { + get { return WarpPoint.Target; } + } + + public long ID { get; set; } + + public bool IsComplete + { + get; + set; + } + + public bool IsDisposed { get; set; } + + [DoNotSerialize] + public bool LoggedPathfindingError + { + get; + private set; + } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + /// + /// The warp point we are using. + /// + [DoNotSerialize] + public WarpPoint WarpPoint { get { return warpPoint; } set { warpPoint = value; } } + + private GalaxyReference owner { get; set; } + private GalaxyReference warpPoint { get; set; } + + public bool CheckCompletion(IOrderable v) + { + return IsComplete; + } + + /// + /// Orders are visible only to their owners. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Visible; + return Visibility.Unknown; + } + + public IDictionary, ISet>> CreateDijkstraMap(IMobileSpaceObject me, Sector start) + { + return Pathfinder.CreateDijkstraMap(me, start, Destination, false, true); + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var v in Galaxy.Current.Referrables.OfType()) + v.RemoveOrder(this); + Galaxy.Current.UnassignID(this); + } + + public void Execute(IOrderable ord) + { + var errors = GetErrors(ord); + foreach (var error in errors) + Owner.Log.Add(error); + + var sobj = (IMobileSpaceObject)ord; + if (!errors.Any()) + { + var here = sobj.Sector; + if (here == WarpPoint.Sector) + { + // warp now!!! + here.Remove(sobj); + + // warp point turbulence damage? + if (WarpPoint.HasAbility("Warp Point - Turbulence")) + { + var dmg = WarpPoint.GetAbilityValue("Warp Point - Turbulence").ToInt(); + sobj.TakeNormalDamage(dmg); + if (sobj.IsDestroyed) + { + sobj.Owner.Log.Add(sobj.CreateLogMessage(sobj + " was destroyed by turbulence when traversing " + WarpPoint + ".", LogMessageType.Generic)); + IsComplete = true; + return; + } + else + sobj.Owner.Log.Add(sobj.CreateLogMessage(sobj + " took " + dmg + " points of damage from turbulence when traversing " + WarpPoint + ".", LogMessageType.Generic)); + } + + sobj.Sector = WarpPoint.Target; + sobj.RefreshDijkstraMap(); + + // mark system explored + WarpPoint.TargetStarSystemLocation.Item.MarkAsExploredBy(((ISpaceObject)sobj).Owner); + + // done warping + IsComplete = true; + } + else + { + // can'IMobileSpaceObject warp here, maybe the GUI should have issued a move order? + ((ISpaceObject)sobj).Owner.Log.Add(sobj.CreateLogMessage(sobj + " cannot warp via " + WarpPoint + " because it is not currently located at the warp point.", LogMessageType.Warning)); + } + } + + // spend time + sobj.SpendTime(sobj.TimePerMove); + } + + public IEnumerable GetErrors(IOrderable executor) + { + // this order doesn't error + yield break; + } + + public IEnumerable Pathfind(IMobileSpaceObject me, Sector start) + { + return Pathfinder.Pathfind(me, start, Destination, false, true, me.DijkstraMap); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // This type does not use client objects, so nothing to do here. + } + + public override string ToString() + { + if (WarpPoint == null) + return "Invalid Warp Order"; + return "Warp via " + WarpPoint.Name + " in " + WarpPoint.FindStarSystem(); + } + } +} diff --git a/FrEee/Game/Objects/Orders/WaypointOrder.cs b/FrEee/Objects/Orders/WaypointOrder.cs similarity index 92% rename from FrEee/Game/Objects/Orders/WaypointOrder.cs rename to FrEee/Objects/Orders/WaypointOrder.cs index f06eed1d4..5f8df5daf 100644 --- a/FrEee/Game/Objects/Orders/WaypointOrder.cs +++ b/FrEee/Objects/Orders/WaypointOrder.cs @@ -1,211 +1,211 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Orders -{ - /// - /// An order to move to a waypoint. - /// - /// - public class WaypointOrder : IMovementOrder - { - public WaypointOrder(Waypoint target, bool avoidEnemies) - { - Owner = Empire.Current; - Target = target; - AvoidEnemies = avoidEnemies; - // TODO - add flag for "avoid damaging sectors"? but how to specify in UI? - } - - /// - /// Should pathfinding avoid enemies? - /// - public bool AvoidEnemies { get; set; } - - public bool ConsumesMovement - { - get { return true; } - } - - public Sector Destination - { - get { return Target.Sector; } - } - - public long ID { get; set; } - - public bool IsComplete - { - get; - set; - } - - public bool IsDisposed { get; set; } - - /// - /// Did we already log a pathfinding error this turn? - /// - [DoNotSerialize] - public bool LoggedPathfindingError { get; private set; } - - /// - /// The empire which issued the order. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - /// - /// Any pathfinding error that we might have found. - /// - [DoNotSerialize] - public LogMessage PathfindingError { get; private set; } - - /// - /// The target we are pursuing. - /// - [DoNotSerialize] - public Waypoint Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } - - /// - /// A verb used to describe this order. - /// - public string Verb - { - get - { - if (AvoidEnemies) - return "navigate to"; - else - return "patrol"; - } - } - - private GalaxyReference owner { get; set; } - private GalaxyReference target { get; set; } - - public bool CheckCompletion(IOrderable v) - { - return IsComplete; - } - - /// - /// Orders are visible only to their owners. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Visible; - return Visibility.Unknown; - } - - public IDictionary, ISet>> CreateDijkstraMap(IMobileSpaceObject me, Sector start) - { - return Pathfinder.CreateDijkstraMap(me, start, Destination, AvoidEnemies, true); - } - - public void Dispose() - { - if (IsDisposed) - return; - foreach (var v in Galaxy.Current.FindSpaceObjects()) - v.RemoveOrder(this); - Galaxy.Current.UnassignID(this); - } - - public void Execute(IOrderable ord) - { - if (ord is IMobileSpaceObject sobj) - { - // TODO - movement logs - if (Target == null) - IsComplete = true; // target waypoint doesn't exist anymore - else if (sobj.Sector == Target.Sector) - IsComplete = true; // we've arrived at the target - else - { - var gotoSector = Pathfind(sobj, sobj.Sector).FirstOrDefault(); - if (gotoSector != null) - { - // move - sobj.Sector = gotoSector; - sobj.RefreshDijkstraMap(); - - // consume supplies - sobj.BurnMovementSupplies(); - - // resupply space vehicles - // either this vehicle from other space objects, or other vehicles from this one - // TODO - this should really be done AFTER battles... - if (gotoSector.HasAbility("Supply Generation", sobj.Owner)) - { - foreach (var v in gotoSector.SpaceObjects.OfType().Where(v => v.Owner == sobj.Owner)) - v.SupplyRemaining = v.SupplyStorage; - } - if (gotoSector.StarSystem.HasAbility("Supply Generation - System", sobj.Owner) || gotoSector.StarSystem.HasAbility("Supply Generation - System")) - { - foreach (var v in gotoSector.StarSystem.FindSpaceObjects().Where(v => v.Owner == sobj.Owner)) - v.SupplyRemaining = v.SupplyStorage; - } - } - else if (!LoggedPathfindingError) - { - // log pathfinding error - string reason; - if (sobj.StrategicSpeed <= 0) - reason = sobj + " is immobile"; - else - reason = "there is no available path leading toward " + Destination; - PathfindingError = sobj.CreateLogMessage(sobj + " could not " + Verb + " " + Target + " because " + reason + ".", LogMessageType.Warning); - sobj.Owner.Log.Add(PathfindingError); - LoggedPathfindingError = true; - } - } - - // spend time - sobj.SpendTime(sobj.TimePerMove); - } - else - ord.RecordLog($"{ord} cannot move to a waypoint because it is not a mobile space object.", LogMessageType.Error); - } - - public IEnumerable GetErrors(IOrderable v) - { - if (!(v is IMobileSpaceObject)) - yield return v.CreateLogMessage($"{v} cannot move to a waypoint because it is not a mobile space object.", LogMessageType.Error); - if (PathfindingError != null) - yield return PathfindingError; - } - - /// - /// Finds the path for executing this order. - /// - /// The space object executing the order. - /// The start location (need not be the current location, in case there are prior orders queued). - /// - public IEnumerable Pathfind(IMobileSpaceObject me, Sector start) - { - return Pathfinder.Pathfind(me, start, Destination, AvoidEnemies, true, me.DijkstraMap); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done) - { - target.ReplaceClientIDs(idmap, done); - } - - public override string ToString() - { - if (Target == null) - return "Unknown " + Verb + " order"; - return Verb.Capitalize() + " " + Target; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Orders +{ + /// + /// An order to move to a waypoint. + /// + /// + public class WaypointOrder : IMovementOrder + { + public WaypointOrder(Waypoint target, bool avoidEnemies) + { + Owner = Empire.Current; + Target = target; + AvoidEnemies = avoidEnemies; + // TODO - add flag for "avoid damaging sectors"? but how to specify in UI? + } + + /// + /// Should pathfinding avoid enemies? + /// + public bool AvoidEnemies { get; set; } + + public bool ConsumesMovement + { + get { return true; } + } + + public Sector Destination + { + get { return Target.Sector; } + } + + public long ID { get; set; } + + public bool IsComplete + { + get; + set; + } + + public bool IsDisposed { get; set; } + + /// + /// Did we already log a pathfinding error this turn? + /// + [DoNotSerialize] + public bool LoggedPathfindingError { get; private set; } + + /// + /// The empire which issued the order. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + /// + /// Any pathfinding error that we might have found. + /// + [DoNotSerialize] + public LogMessage PathfindingError { get; private set; } + + /// + /// The target we are pursuing. + /// + [DoNotSerialize] + public Waypoint Target { get { return target.Value; } set { target = value.ReferViaGalaxy(); } } + + /// + /// A verb used to describe this order. + /// + public string Verb + { + get + { + if (AvoidEnemies) + return "navigate to"; + else + return "patrol"; + } + } + + private GalaxyReference owner { get; set; } + private GalaxyReference target { get; set; } + + public bool CheckCompletion(IOrderable v) + { + return IsComplete; + } + + /// + /// Orders are visible only to their owners. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Visible; + return Visibility.Unknown; + } + + public IDictionary, ISet>> CreateDijkstraMap(IMobileSpaceObject me, Sector start) + { + return Pathfinder.CreateDijkstraMap(me, start, Destination, AvoidEnemies, true); + } + + public void Dispose() + { + if (IsDisposed) + return; + foreach (var v in Galaxy.Current.FindSpaceObjects()) + v.RemoveOrder(this); + Galaxy.Current.UnassignID(this); + } + + public void Execute(IOrderable ord) + { + if (ord is IMobileSpaceObject sobj) + { + // TODO - movement logs + if (Target == null) + IsComplete = true; // target waypoint doesn't exist anymore + else if (sobj.Sector == Target.Sector) + IsComplete = true; // we've arrived at the target + else + { + var gotoSector = Pathfind(sobj, sobj.Sector).FirstOrDefault(); + if (gotoSector != null) + { + // move + sobj.Sector = gotoSector; + sobj.RefreshDijkstraMap(); + + // consume supplies + sobj.BurnMovementSupplies(); + + // resupply space vehicles + // either this vehicle from other space objects, or other vehicles from this one + // TODO - this should really be done AFTER battles... + if (gotoSector.HasAbility("Supply Generation", sobj.Owner)) + { + foreach (var v in gotoSector.SpaceObjects.OfType().Where(v => v.Owner == sobj.Owner)) + v.SupplyRemaining = v.SupplyStorage; + } + if (gotoSector.StarSystem.HasAbility("Supply Generation - System", sobj.Owner) || gotoSector.StarSystem.HasAbility("Supply Generation - System")) + { + foreach (var v in gotoSector.StarSystem.FindSpaceObjects().Where(v => v.Owner == sobj.Owner)) + v.SupplyRemaining = v.SupplyStorage; + } + } + else if (!LoggedPathfindingError) + { + // log pathfinding error + string reason; + if (sobj.StrategicSpeed <= 0) + reason = sobj + " is immobile"; + else + reason = "there is no available path leading toward " + Destination; + PathfindingError = sobj.CreateLogMessage(sobj + " could not " + Verb + " " + Target + " because " + reason + ".", LogMessageType.Warning); + sobj.Owner.Log.Add(PathfindingError); + LoggedPathfindingError = true; + } + } + + // spend time + sobj.SpendTime(sobj.TimePerMove); + } + else + ord.RecordLog($"{ord} cannot move to a waypoint because it is not a mobile space object.", LogMessageType.Error); + } + + public IEnumerable GetErrors(IOrderable v) + { + if (!(v is IMobileSpaceObject)) + yield return v.CreateLogMessage($"{v} cannot move to a waypoint because it is not a mobile space object.", LogMessageType.Error); + if (PathfindingError != null) + yield return PathfindingError; + } + + /// + /// Finds the path for executing this order. + /// + /// The space object executing the order. + /// The start location (need not be the current location, in case there are prior orders queued). + /// + public IEnumerable Pathfind(IMobileSpaceObject me, Sector start) + { + return Pathfinder.Pathfind(me, start, Destination, AvoidEnemies, true, me.DijkstraMap); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done) + { + target.ReplaceClientIDs(idmap, done); + } + + public override string ToString() + { + if (Target == null) + return "Unknown " + Verb + " order"; + return Verb.Capitalize() + " " + Target; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/SimulatedObjectWrappers.cs b/FrEee/Objects/SimulatedObjectWrappers.cs similarity index 86% rename from FrEee/Game/Objects/SimulatedObjectWrappers.cs rename to FrEee/Objects/SimulatedObjectWrappers.cs index 8ccbb5e2e..ba6f59ea8 100644 --- a/FrEee/Game/Objects/SimulatedObjectWrappers.cs +++ b/FrEee/Objects/SimulatedObjectWrappers.cs @@ -1,70 +1,70 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects -{ - public class SimulatedEmpire : IDisposable - { - public SimulatedEmpire(Empire emp) - { - Empire = emp.CopyAndAssignNewID(); - SpaceObjects = new HashSet(); - Troops = new HashSet(); - } - - public Empire Empire { get; private set; } - - public ISet SpaceObjects { get; private set; } - - public ISet Troops { get; private set; } - - public void Dispose() - { - Empire.Dispose(); - foreach (var sobj in SpaceObjects) - sobj.Dispose(); - } - } - - public class SimulatedSpaceObject : IDisposable - { - public SimulatedSpaceObject(ICombatSpaceObject sobj) - { - SpaceObject = sobj; - Units = new HashSet(); - } - - public ICombatSpaceObject SpaceObject { get; private set; } - - public ISet Units { get; private set; } - - // TODO - population in cargo? - - // TODO - enemy troops in cargo? or can those go under Units? - - public void Dispose() - { - SpaceObject.Dispose(); - foreach (var u in Units) - u.Dispose(); - } - } - - public class SimulatedUnit : IDisposable - { - public SimulatedUnit(IUnit u) - { - Unit = u; - } - - public IUnit Unit { get; private set; } - - public void Dispose() - { - Unit.Dispose(); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects +{ + public class SimulatedEmpire : IDisposable + { + public SimulatedEmpire(Empire emp) + { + Empire = emp.CopyAndAssignNewID(); + SpaceObjects = new HashSet(); + Troops = new HashSet(); + } + + public Empire Empire { get; private set; } + + public ISet SpaceObjects { get; private set; } + + public ISet Troops { get; private set; } + + public void Dispose() + { + Empire.Dispose(); + foreach (var sobj in SpaceObjects) + sobj.Dispose(); + } + } + + public class SimulatedSpaceObject : IDisposable + { + public SimulatedSpaceObject(ICombatSpaceObject sobj) + { + SpaceObject = sobj; + Units = new HashSet(); + } + + public ICombatSpaceObject SpaceObject { get; private set; } + + public ISet Units { get; private set; } + + // TODO - population in cargo? + + // TODO - enemy troops in cargo? or can those go under Units? + + public void Dispose() + { + SpaceObject.Dispose(); + foreach (var u in Units) + u.Dispose(); + } + } + + public class SimulatedUnit : IDisposable + { + public SimulatedUnit(IUnit u) + { + Unit = u; + } + + public IUnit Unit { get; private set; } + + public void Dispose() + { + Unit.Dispose(); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Space/AsteroidField.cs b/FrEee/Objects/Space/AsteroidField.cs similarity index 90% rename from FrEee/Game/Objects/Space/AsteroidField.cs rename to FrEee/Objects/Space/AsteroidField.cs index d734abbb3..461ba9844 100644 --- a/FrEee/Game/Objects/Space/AsteroidField.cs +++ b/FrEee/Objects/Space/AsteroidField.cs @@ -1,106 +1,106 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Objects.Space -{ - /// - /// An asteroid field. Asteroids can be mined or converted to planets. - /// - [Serializable] - public class AsteroidField : StellarObject, ITemplate, IMineableSpaceObject, IDataObject - { - public AsteroidField() - { - ResourceValue = new ResourceQuantity(); - } - - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.AsteroidField; } - } - - /// - /// The atmospheric composition (e.g. methane, oxygen, carbon dioxide) of this asteroid field. - /// - public string Atmosphere { get; set; } - - public override bool CanBeObscured => true; - - /// - /// Some sort of combat image? Where are these stored anyway? - /// - public string CombatTile { get; set; } - - public override SafeDictionary Data - { - get - { - var dict = base.Data; - dict[nameof(size)] = size; - dict[nameof(Surface)] = Surface; - dict[nameof(Atmosphere)] = Atmosphere; - dict[nameof(CombatTile)] = CombatTile; - dict[nameof(ResourceValue)] = ResourceValue; - return dict; - } - set - { - base.Data = value; - size = value[nameof(size)].Default>(); - Surface = value[nameof(Surface)].Default(); - Atmosphere = value[nameof(Atmosphere)].Default(); - CombatTile = value[nameof(CombatTile)].Default(); - ModID = value[nameof(ModID)].Default(); - ResourceValue = value[nameof(ResourceValue)].Default(new ResourceQuantity()); - } - } - - public double MineralsValue { get { return ResourceValue[Resource.Minerals]; } } - - public double OrganicsValue { get { return ResourceValue[Resource.Organics]; } } - - public Empire Owner - { - get - { - return null; - } - } - - public double RadioactivesValue { get { return ResourceValue[Resource.Radioactives]; } } - - /// - /// The resource value of this asteroid field, in %. - /// - public ResourceQuantity ResourceValue { get; set; } - - /// - /// The PlanetSize.txt entry for this asteroid field's size. - /// - [DoNotSerialize] - public StellarObjectSize Size { get { return size; } set { size = value; } } - - /// - /// The surface composition (e.g. rock, ice, gas) of this asteroid field. - /// - public string Surface { get; set; } - - private ModReference size { get; set; } - - /// - /// Just copy the asteroid field's data. - /// - /// A copy of the asteroid field. - public AsteroidField Instantiate() - { - var result = this.CopyAndAssignNewID(); - result.ModID = null; - return result; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; + +namespace FrEee.Objects.Space +{ + /// + /// An asteroid field. Asteroids can be mined or converted to planets. + /// + [Serializable] + public class AsteroidField : StellarObject, ITemplate, IMineableSpaceObject, IDataObject + { + public AsteroidField() + { + ResourceValue = new ResourceQuantity(); + } + + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.AsteroidField; } + } + + /// + /// The atmospheric composition (e.g. methane, oxygen, carbon dioxide) of this asteroid field. + /// + public string Atmosphere { get; set; } + + public override bool CanBeObscured => true; + + /// + /// Some sort of combat image? Where are these stored anyway? + /// + public string CombatTile { get; set; } + + public override SafeDictionary Data + { + get + { + var dict = base.Data; + dict[nameof(size)] = size; + dict[nameof(Surface)] = Surface; + dict[nameof(Atmosphere)] = Atmosphere; + dict[nameof(CombatTile)] = CombatTile; + dict[nameof(ResourceValue)] = ResourceValue; + return dict; + } + set + { + base.Data = value; + size = value[nameof(size)].Default>(); + Surface = value[nameof(Surface)].Default(); + Atmosphere = value[nameof(Atmosphere)].Default(); + CombatTile = value[nameof(CombatTile)].Default(); + ModID = value[nameof(ModID)].Default(); + ResourceValue = value[nameof(ResourceValue)].Default(new ResourceQuantity()); + } + } + + public double MineralsValue { get { return ResourceValue[Resource.Minerals]; } } + + public double OrganicsValue { get { return ResourceValue[Resource.Organics]; } } + + public Empire Owner + { + get + { + return null; + } + } + + public double RadioactivesValue { get { return ResourceValue[Resource.Radioactives]; } } + + /// + /// The resource value of this asteroid field, in %. + /// + public ResourceQuantity ResourceValue { get; set; } + + /// + /// The PlanetSize.txt entry for this asteroid field's size. + /// + [DoNotSerialize] + public StellarObjectSize Size { get { return size; } set { size = value; } } + + /// + /// The surface composition (e.g. rock, ice, gas) of this asteroid field. + /// + public string Surface { get; set; } + + private ModReference size { get; set; } + + /// + /// Just copy the asteroid field's data. + /// + /// A copy of the asteroid field. + public AsteroidField Instantiate() + { + var result = this.CopyAndAssignNewID(); + result.ModID = null; + return result; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Space/Fleet.cs b/FrEee/Objects/Space/Fleet.cs similarity index 94% rename from FrEee/Game/Objects/Space/Fleet.cs rename to FrEee/Objects/Space/Fleet.cs index afca8a443..f9f0e77b5 100644 --- a/FrEee/Game/Objects/Space/Fleet.cs +++ b/FrEee/Objects/Space/Fleet.cs @@ -1,921 +1,922 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; - -namespace FrEee.Game.Objects.Space -{ - /// - /// A collection of ships, units, etc. that move synchronously. - /// - public class Fleet : IMobileSpaceObject, ICargoTransferrer, IPromotable, IIncomeProducer - { - public Fleet() - { - Vehicles = new GalaxyReferenceSet(); - Orders = new List(); - Timestamp = Galaxy.Current?.Timestamp ?? 0; - } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.Fleet; } - } - - public int Accuracy - { - get - { - // TODO - fleet experience - return 0; - } - } - - public IDictionary AllPopulation - { - get - { - var dict = new SafeDictionary(); - foreach (var cc in Vehicles.OfType()) - { - foreach (var kvp in cc.Cargo.Population) - dict[kvp.Key] += kvp.Value; - } - return dict; - } - } - - public IEnumerable AllUnits - { - get - { - return Vehicles.SelectMany(sobj => - { - var list = new List(); - if (sobj is IUnit) - list.Add((IUnit)sobj); - if (sobj is ICargoContainer) - list.AddRange(((ICargoContainer)sobj).AllUnits); - return list.Distinct(); - }); - } - } - - /// - /// Are this object's orders on hold? - /// - public bool AreOrdersOnHold { get; set; } - - /// - /// Should this object's orders repeat once they are completed? - /// - public bool AreRepeatOrdersEnabled { get; set; } - - public int ArmorHitpoints - { - get { return Vehicles.Sum(v => v.ArmorHitpoints); } - } - - /// - /// Fleets can be nested. - /// - public bool CanBeInFleet - { - get { return true; } - } - - public bool CanBeObscured => true; - - public bool CanWarp - { - get { return Vehicles.All(sobj => sobj.CanWarp); } - } - - public Cargo Cargo - { - get { return Vehicles.OfType().Sum(cc => cc.Cargo); } - } - - public int CargoStorage - { - get { return Vehicles.OfType().Sum(cc => cc.CargoStorage); } - } - - public IEnumerable Children - { - get { return Vehicles; } - } - - /// - /// Any combatants contained in this fleet and any subfleets. - /// - public IEnumerable Combatants - { - get - { - return Vehicles.SelectMany(sobj => - { - var list = new List(); - if (sobj is ICombatant) - list.Add((ICombatant)sobj); - if (sobj is Fleet) - list.AddRange(((Fleet)sobj).Combatants); - return list; - }); - } - } - - public double CombatSpeed => Mod.Current.Settings.CombatSpeedPercentPerStrategicSpeed.PercentOf(StrategicSpeed); - - /// - /// Any construction queues of ships in this fleet and its subfleets. - /// - public IEnumerable ConstructionQueues - { - get - { - return Vehicles.OfType().SelectMany(sobj => - { - var list = new List(); - if (sobj.ConstructionQueue != null) - list.Add(sobj.ConstructionQueue); - if (sobj is Fleet) - list.AddRange(((Fleet)sobj).ConstructionQueues); - return list; - }); - } - } - - public Fleet Container - { - get; set; - } - - [DoNotSerialize] - public IDictionary, ISet>> DijkstraMap - { - get; - set; - } - - public int Evasion - { - get - { - // TODO - fleet experience - return 0; - } - } - - public ResourceQuantity GrossIncome - { - get { return Vehicles.OfType().Sum(v => v.GrossIncome()); } - } - - /// - /// Fleets share supplies, so if any space object has infinite supplies, the fleet does. - /// - public bool HasInfiniteSupplies - { - get { return Vehicles.ExceptSingle(null).Any(sobj => sobj.HasInfiniteSupplies); } - } - - /// - /// Chance of hitting each ship in a fleet is equal, so this value is the number of ships in the fleet. - /// - public int HitChance - { - get - { - return LeafVehicles.Count(); - } - } - - /// - /// The hitpoints of this fleet. Cannot set this property; attempting to do so will throw a NotSupportedException. - /// - [DoNotSerialize(false)] - public int Hitpoints - { - get - { - return Vehicles.Sum(sobj => sobj.Hitpoints); - } - set - { - throw new NotSupportedException("Cannot set fleet hitpoints directly. Try setting the hitpoints of individual ship components."); - } - } - - public int HullHitpoints - { - get { return Vehicles.Sum(v => v.HullHitpoints); } - } - - public Image Icon - { - get - { - var owner = Owner ?? Empire.Current; // for client side fleets that are empty - return Pictures.GetIcon(this, owner.ShipsetPath); - } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return GetImagePaths("Mini"); - } - } - - public long ID - { - get; - set; - } - - public IEnumerable IntrinsicAbilities - { - get - { - // TODO - fleet experience - yield break; - } - } - - public bool IsAlive => Vehicles.Any(x => x.IsAlive); - - public bool IsDestroyed - { - get { return Vehicles.ExceptSingle(null).All(sobj => sobj.IsDestroyed); } - } - - public bool IsDisposed { get; set; } - - public bool IsIdle - { - get - { - return StrategicSpeed > 0 && !Orders.Any() && Container == null || ConstructionQueues.Any(q => q.Eta < 1); - } - } - - public bool IsMemory - { - get; - set; - } - - public bool IsOurs { get { return Owner == Empire.Current; } } - - /// - /// All space vehicles in this fleet and subfleets, but not counting the subfleets themselves. - /// - public IEnumerable LeafVehicles - { - get - { - return Vehicles.SelectMany(v => - { - var list = new List(); - if (v is Fleet) - { - foreach (var v2 in ((Fleet)v).LeafVehicles) - list.Add(v2); - } - else if (v is SpaceVehicle) - list.Add((SpaceVehicle)v); - return list; - }); - } - } - - public ResourceQuantity MaintenanceCost - { - get { return Vehicles.Sum(v => v.MaintenanceCost); } - } - - public int MaxArmorHitpoints - { - get { return Vehicles.Sum(v => v.MaxArmorHitpoints); } - } - - public int MaxHitpoints - { - get { return Vehicles.Sum(sobj => sobj.MaxHitpoints); } - } - - public int MaxHullHitpoints - { - get { return Vehicles.Sum(v => v.MaxHullHitpoints); } - } - - public int MaxNormalShields - { - get { return Vehicles.Sum(sobj => sobj.MaxNormalShields); } - } - - public int MaxPhasedShields - { - get { return Vehicles.Sum(sobj => sobj.MaxPhasedShields); } - } - - public int MaxShieldHitpoints - { - get { return Vehicles.Sum(v => v.MaxShieldHitpoints); } - } - - /// - /// Fleets can't fire on enemies directly; the contained ships do. - /// - public int MaxTargets => 0; - - public double MerchantsRatio => Owner.HasAbility("No Spaceports") ? 1.0 : 0.0; - - public int MineralsMaintenance - { - get { return MaintenanceCost[Resource.Minerals]; } - } - - public int MovementRemaining { get; set; } - - public string Name - { - get; - set; - } - - /// - /// The normal shields of this fleet. Cannot set this property; attempting to do so will throw a NotSupportedException. - /// - [DoNotSerialize(false)] - public int NormalShields - { - get - { - return Vehicles.Sum(sobj => sobj.NormalShields); - } - set - { - throw new NotSupportedException("Cannot set fleet shields directly. Try setting the shields of individual ships."); - } - } - - public IList Orders { get; private set; } - - IEnumerable IOrderable.Orders - => Orders; - - public int OrganicsMaintenance - { - get { return MaintenanceCost[Resource.Organics]; } - } - - [DoNotSerialize] - public Empire Owner - { - get { return Vehicles.ExceptSingle(null).FirstOrDefault()?.Owner; } // assume all vehicles have the same owner - set - { - foreach (var v in Vehicles) - v.Owner = value; - } - } - - public IEnumerable Parents - { - get - { - if (Container != null) - yield return Container; - else - { - if (Sector != null) - yield return Sector; - if (Owner != null) - yield return Owner; - } - } - } - - /// - /// The phased shields of this fleet. Cannot set this property; attempting to do so will throw a NotSupportedException. - /// - [DoNotSerialize(false)] - public int PhasedShields - { - get - { - return Vehicles.Sum(sobj => sobj.PhasedShields); - } - set - { - throw new NotSupportedException("Cannot set fleet shields directly. Try setting the shields of individual ships."); - } - } - - public long PopulationStorageFree - { - get { return 0L; } - } - - public Image Portrait - { - get - { - var owner = Owner ?? Empire.Current; // for client side fleets that are empty - return Pictures.GetPortrait(this, owner.ShipsetPath); - } - } - - public IEnumerable PortraitPaths - { - get - { - return GetImagePaths("Portrait"); - } - } - - public int RadioactivesMaintenance - { - get { return MaintenanceCost[Resource.Radioactives]; } - } - - public ResourceQuantity RemoteMiningIncomePercentages - { - get { return Owner.PrimaryRace.IncomePercentages; } - } - - /// - /// Fleets have no resource value. - /// - public ResourceQuantity ResourceValue - { - get { return new ResourceQuantity(); } - } - - public Sector Sector - { - get - { - if (Container != null) - return Container.Sector; - if (sector == null) - sector = this.FindSector(); - return sector; - } - set - { - var oldsector = Sector; - sector = value; - if (value == null) - { - if (oldsector != null) - oldsector.Remove(this); - } - else - { - if (oldsector != value) - value.Place(this); - } - } - } - - public int ShieldHitpoints - { - get { return Vehicles.Sum(v => v.ShieldHitpoints); } - } - - public int Size - { - get { return Vehicles.ExceptSingle((IMobileSpaceObject)null).Sum(v => v.Size); } - } - - public ResourceQuantity StandardIncomePercentages - { - get { return Owner.PrimaryRace.IncomePercentages; } - } - - public StarSystem StarSystem - { - get { return this.FindStarSystem(); } - } - - /// - /// Resources stored in this fleet. - /// Note that modifying this value will have no effect on the individual vehicles in the fleet; - /// we just don't have a handy read only resource quantity type. - /// - public ResourceQuantity StoredResources - { - get - { - return Vehicles.Sum(v => v.StoredResources); - } - } - - public int StrategicSpeed - { - get { return Vehicles.MinOrDefault(sobj => sobj.StrategicSpeed); } - } - - /// - /// The amount of supply which this fleet can store. - /// - public int SupplyCapacity - { - get - { - return this.GetAbilityValue("Supply Storage").ToInt(); - } - } - - [DoNotSerialize(false)] - public int SupplyRemaining - { - get - { - return Vehicles.Sum(sobj => sobj?.SupplyRemaining ?? 0); - } - set - { - var available = value; - var storage = SupplyStorage; - int spent = 0; - - // sharing supplies should not affect abilities - bool wasCacheDisabled = !Galaxy.Current.IsAbilityCacheEnabled; - if (wasCacheDisabled) - Galaxy.Current.EnableAbilityCache(); - - foreach (var sobj in Vehicles) - { - if (storage == 0) - { - sobj.SupplyRemaining = 0; - continue; - } - var amount = (int)Math.Floor((double)sobj.SupplyStorage / (double)storage * available); - sobj.SupplyRemaining = amount; - spent += amount; - } - var roundingError = available - spent; - if (storage > 0) - { - while (roundingError > 0) - { - var sobj2 = Vehicles.WithMin(sobj => (double)sobj.SupplyRemaining / (double)sobj.SupplyStorage).PickRandom(); - sobj2.SupplyRemaining += 1; - roundingError -= 1; - } - } - - if (wasCacheDisabled) - Galaxy.Current.DisableAbilityCache(); - } - } - - public int SupplyStorage - { - get { return Vehicles.Sum(sobj => sobj.SupplyStorage); } - } - - public double TimePerMove - { - get - { - if (!Vehicles.Any()) - return double.PositiveInfinity; - return Vehicles.Max(sobj => sobj.TimePerMove); - } - } - - public double Timestamp { get; set; } - - [DoNotSerialize] - public double TimeToNextMove - { - get; - set; - } - - /// - /// The space objects in the fleet. - /// Fleets may contain other fleets, but may not contain themselves. - /// - public GalaxyReferenceSet Vehicles { get; private set; } - - public IEnumerable Weapons - { - get { return Vehicles.SelectMany(sobj => sobj.Weapons); } - } - - /// - /// Fleets cannot be directly targeted by weapons. Target the individual ships instead. - /// - public WeaponTargets WeaponTargetType - { - get { return WeaponTargets.None; } - } - - private Sector sector; - - public void AddOrder(IOrder order) - { - if (!(order is IOrder)) - throw new InvalidOperationException("Fleets can only accept orders of type IOrder."); - Orders.Add((IOrder)order); - } - - public long AddPopulation(Civilization.Race race, long amount) - { - foreach (var ct in Vehicles.OfType()) - { - amount = ct.AddPopulation(race, amount); - } - return amount; - } - - public bool AddUnit(IUnit unit) - { - foreach (var ct in Vehicles.OfType()) - { - if (ct.AddUnit(unit)) - return true; - } - return false; - } - - /// - /// Burns movement supplies for all vehicles in the fleet. - /// - public void BurnMovementSupplies() - { - foreach (var v in Vehicles) - v.BurnMovementSupplies(); - } - - public bool CanTarget(ITargetable target) - { - return Vehicles.Any(sobj => sobj.CanTarget(target)); - } - - /// - /// Fleets are as visible as their most visible space object. Not that the others will actually be that visible... - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (!Vehicles.Any(v => v != null)) - return Visibility.Unknown; - return Vehicles.Where(v => v != null).Max(sobj => sobj.CheckVisibility(emp)); - } - - /// - /// Disposes of the fleet. Does not dispose of the individual ships; they are removed from the fleet instead. - /// - public void Dispose() - { - if (IsDisposed) - return; - IsDisposed = true; - foreach (var v in Vehicles.ExceptSingle(null)) - v.Container = null; - Vehicles.Clear(); - Galaxy.Current.UnassignID(this); - Sector = null; - Orders.Clear(); - if (!IsMemory) - this.UpdateEmpireMemories(); - } - - public bool ExecuteOrders() - { - if (!Vehicles.ExceptSingle(null).Any()) - return false; // fleets with no vehicles can't execute orders - return this.ExecuteMobileSpaceObjectOrders(); - } - - public bool IsHostileTo(Empire emp) - { - return Owner != null && Owner.IsEnemyOf(emp, StarSystem); - } - - public bool IsObsoleteMemory(Empire emp) - { - if (StarSystem == null) - return Timestamp < Galaxy.Current.Timestamp - 1; - return StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; - } - - public void RearrangeOrder(IOrder order, int delta) - { - if (!(order is IOrder)) - throw new InvalidOperationException("Fleets can only accept orders of type IOrder."); - var o = (IOrder)order; - var newpos = Orders.IndexOf(o) + delta; - Orders.Remove(o); - if (newpos < 0) - newpos = 0; - if (newpos >= Orders.Count) - Orders.Add(o); - else - Orders.Insert(newpos, o); - } - - public void Redact(Empire emp) - { - // HACK - check for null (destroyed?) vehicles - Validate(); - - var vis = CheckVisibility(emp); - - // Can't see names or orders of alien fleets - // TODO - espionage - if (vis < Visibility.Owned) - { - Name = Owner + " Fleet"; - Orders.Clear(); - AreOrdersOnHold = false; - AreRepeatOrdersEnabled = false; - } - if (vis < Visibility.Fogged) - Dispose(); - } - - public void RemoveOrder(IOrder order) - { - if (!(order is IOrder)) - return; // order can't exist here anyway - Orders.Remove((IOrder)order); - } - - public long RemovePopulation(Civilization.Race race, long amount) - { - foreach (var ct in Vehicles.OfType()) - { - amount = ct.RemovePopulation(race, amount); - } - return amount; - } - - public bool RemoveUnit(IUnit unit) - { - foreach (var ct in Vehicles.OfType()) - { - if (ct.RemoveUnit(unit)) - return true; - } - return false; - } - - public int? Repair(int? amount = null) - { - // TODO - repair priority - foreach (var sobj in Vehicles) - amount = sobj.Repair(amount); - return amount; - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - Vehicles.ReplaceClientIDs(idmap, done); - } - } - - public void ReplenishShields(int? amount = null) - { - if (amount != null) - throw new NotImplementedException("Can't replenish only some of a fleet's shields. Replenish individual ships' shields, or all of the fleet's shields."); - Validate(); - foreach (var sobj in Vehicles) - sobj.ReplenishShields(); - } - - /// - /// Shares supplies between ships in a fleet, proprtional to their supply storage. - /// - public void ShareSupplies() - { - if (HasInfiniteSupplies) - { - // full refill - foreach (var sobj in Vehicles) - sobj.SupplyRemaining = sobj.SupplyStorage; - } - else - { - // share existing supplies - SupplyRemaining = SupplyRemaining; - } - } - - /// - /// When a fleet spends time, all its ships and subfleets do, too. - /// - /// - public void SpendTime(double timeElapsed) - { - TimeToNextMove += timeElapsed; - foreach (var sobj in Vehicles) - sobj.SpendTime(timeElapsed); - } - - /// - /// Assigns damage to a random ship in the fleet. If damage is left over, it leaks to the next ship. - /// - public int TakeDamage(Hit hit, PRNG dice = null) - { - var vs = LeafVehicles.Shuffle().ToList(); - var dmg = hit.NominalDamage; - while (vs.Any() && dmg > 0) - { - var vhit = new Hit(hit.Shot, vs.First(), dmg); - var v = vs.First(); - dmg = v.TakeDamage(vhit, dice); - vs.Remove(v); - } - return dmg; - } - - public override string ToString() - { - return Name; - } - - /// - /// Remove any invalid objects from the fleet and any valid subfleets. - /// If there are no valid objects left, the fleet is disbanded. - /// Objects that are invalid: - /// * Ships, etc. not owned by the owner of the fleet - /// * This fleet (fleets may not contain themselves) - /// * Space objects that are not located in the same sector as this fleet - /// * Space objects that are destroyed - /// - public void Validate(ICollection ancestors = null) - { - if (ancestors == null) - ancestors = new List(); - ancestors.Add(this); - foreach (var sobj in Vehicles.ToArray()) - { - if (sobj == null || sobj.Owner != Owner || (sobj is Fleet && ancestors.Contains((Fleet)sobj)) || sobj.Sector != Sector || sobj.IsDestroyed) - Vehicles.Remove(sobj); - else if (sobj is Fleet) - ((Fleet)sobj).Validate(ancestors); - } - if (!Vehicles.ExceptSingle(null).Any()) - Dispose(); - } - - private IEnumerable GetImagePaths(string imagetype) - { - var shipsetPath = Owner?.ShipsetPath ?? Empire.Current?.ShipsetPath; - - if (shipsetPath == null) - yield break; - - string imageName = "Fleet"; - if (LeafVehicles.All(v => v is Fighter)) - imageName = "FighterGroup"; - else if (LeafVehicles.All(v => v is Satellite)) - imageName = "SatelliteGroup"; - else if (LeafVehicles.All(v => v is Drone)) - imageName = "DroneGroup"; - else if (LeafVehicles.All(v => v is Mine)) - imageName = "MineGroup"; - - if (Mod.Current.RootPath != null) - { - yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, imagetype + "_" + imageName); - yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, shipsetPath + "_" + imagetype + "_" + imageName); - } - yield return Path.Combine("Pictures", "Races", shipsetPath, imagetype + "_" + imageName); - yield return Path.Combine("Pictures", "Races", shipsetPath, shipsetPath + "_" + imagetype + "_" + imageName); - } - - public IEnumerable Components => Vehicles.SelectMany(q => q.Components); - - public bool FillsCombatTile => Vehicles.Any(q => q.FillsCombatTile); - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Utility; +using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; + +namespace FrEee.Objects.Space +{ + /// + /// A collection of ships, units, etc. that move synchronously. + /// + public class Fleet : IMobileSpaceObject, ICargoTransferrer, IPromotable, IIncomeProducer + { + public Fleet() + { + Vehicles = new GalaxyReferenceSet(); + Orders = new List(); + Timestamp = Galaxy.Current?.Timestamp ?? 0; + } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.Fleet; } + } + + public int Accuracy + { + get + { + // TODO - fleet experience + return 0; + } + } + + public IDictionary AllPopulation + { + get + { + var dict = new SafeDictionary(); + foreach (var cc in Vehicles.OfType()) + { + foreach (var kvp in cc.Cargo.Population) + dict[kvp.Key] += kvp.Value; + } + return dict; + } + } + + public IEnumerable AllUnits + { + get + { + return Vehicles.SelectMany(sobj => + { + var list = new List(); + if (sobj is IUnit) + list.Add((IUnit)sobj); + if (sobj is ICargoContainer) + list.AddRange(((ICargoContainer)sobj).AllUnits); + return list.Distinct(); + }); + } + } + + /// + /// Are this object's orders on hold? + /// + public bool AreOrdersOnHold { get; set; } + + /// + /// Should this object's orders repeat once they are completed? + /// + public bool AreRepeatOrdersEnabled { get; set; } + + public int ArmorHitpoints + { + get { return Vehicles.Sum(v => v.ArmorHitpoints); } + } + + /// + /// Fleets can be nested. + /// + public bool CanBeInFleet + { + get { return true; } + } + + public bool CanBeObscured => true; + + public bool CanWarp + { + get { return Vehicles.All(sobj => sobj.CanWarp); } + } + + public Cargo Cargo + { + get { return Vehicles.OfType().Sum(cc => cc.Cargo); } + } + + public int CargoStorage + { + get { return Vehicles.OfType().Sum(cc => cc.CargoStorage); } + } + + public IEnumerable Children + { + get { return Vehicles; } + } + + /// + /// Any combatants contained in this fleet and any subfleets. + /// + public IEnumerable Combatants + { + get + { + return Vehicles.SelectMany(sobj => + { + var list = new List(); + if (sobj is ICombatant) + list.Add((ICombatant)sobj); + if (sobj is Fleet) + list.AddRange(((Fleet)sobj).Combatants); + return list; + }); + } + } + + public double CombatSpeed => Mod.Current.Settings.CombatSpeedPercentPerStrategicSpeed.PercentOf(StrategicSpeed); + + /// + /// Any construction queues of ships in this fleet and its subfleets. + /// + public IEnumerable ConstructionQueues + { + get + { + return Vehicles.OfType().SelectMany(sobj => + { + var list = new List(); + if (sobj.ConstructionQueue != null) + list.Add(sobj.ConstructionQueue); + if (sobj is Fleet) + list.AddRange(((Fleet)sobj).ConstructionQueues); + return list; + }); + } + } + + public Fleet Container + { + get; set; + } + + [DoNotSerialize] + public IDictionary, ISet>> DijkstraMap + { + get; + set; + } + + public int Evasion + { + get + { + // TODO - fleet experience + return 0; + } + } + + public ResourceQuantity GrossIncome + { + get { return Vehicles.OfType().Sum(v => v.GrossIncome()); } + } + + /// + /// Fleets share supplies, so if any space object has infinite supplies, the fleet does. + /// + public bool HasInfiniteSupplies + { + get { return Vehicles.ExceptSingle(null).Any(sobj => sobj.HasInfiniteSupplies); } + } + + /// + /// Chance of hitting each ship in a fleet is equal, so this value is the number of ships in the fleet. + /// + public int HitChance + { + get + { + return LeafVehicles.Count(); + } + } + + /// + /// The hitpoints of this fleet. Cannot set this property; attempting to do so will throw a NotSupportedException. + /// + [DoNotSerialize(false)] + public int Hitpoints + { + get + { + return Vehicles.Sum(sobj => sobj.Hitpoints); + } + set + { + throw new NotSupportedException("Cannot set fleet hitpoints directly. Try setting the hitpoints of individual ship components."); + } + } + + public int HullHitpoints + { + get { return Vehicles.Sum(v => v.HullHitpoints); } + } + + public Image Icon + { + get + { + var owner = Owner ?? Empire.Current; // for client side fleets that are empty + return Pictures.GetIcon(this, owner.ShipsetPath); + } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return GetImagePaths("Mini"); + } + } + + public long ID + { + get; + set; + } + + public IEnumerable IntrinsicAbilities + { + get + { + // TODO - fleet experience + yield break; + } + } + + public bool IsAlive => Vehicles.Any(x => x.IsAlive); + + public bool IsDestroyed + { + get { return Vehicles.ExceptSingle(null).All(sobj => sobj.IsDestroyed); } + } + + public bool IsDisposed { get; set; } + + public bool IsIdle + { + get + { + return StrategicSpeed > 0 && !Orders.Any() && Container == null || ConstructionQueues.Any(q => q.Eta < 1); + } + } + + public bool IsMemory + { + get; + set; + } + + public bool IsOurs { get { return Owner == Empire.Current; } } + + /// + /// All space vehicles in this fleet and subfleets, but not counting the subfleets themselves. + /// + public IEnumerable LeafVehicles + { + get + { + return Vehicles.SelectMany(v => + { + var list = new List(); + if (v is Fleet) + { + foreach (var v2 in ((Fleet)v).LeafVehicles) + list.Add(v2); + } + else if (v is SpaceVehicle) + list.Add((SpaceVehicle)v); + return list; + }); + } + } + + public ResourceQuantity MaintenanceCost + { + get { return Vehicles.Sum(v => v.MaintenanceCost); } + } + + public int MaxArmorHitpoints + { + get { return Vehicles.Sum(v => v.MaxArmorHitpoints); } + } + + public int MaxHitpoints + { + get { return Vehicles.Sum(sobj => sobj.MaxHitpoints); } + } + + public int MaxHullHitpoints + { + get { return Vehicles.Sum(v => v.MaxHullHitpoints); } + } + + public int MaxNormalShields + { + get { return Vehicles.Sum(sobj => sobj.MaxNormalShields); } + } + + public int MaxPhasedShields + { + get { return Vehicles.Sum(sobj => sobj.MaxPhasedShields); } + } + + public int MaxShieldHitpoints + { + get { return Vehicles.Sum(v => v.MaxShieldHitpoints); } + } + + /// + /// Fleets can't fire on enemies directly; the contained ships do. + /// + public int MaxTargets => 0; + + public double MerchantsRatio => Owner.HasAbility("No Spaceports") ? 1.0 : 0.0; + + public int MineralsMaintenance + { + get { return MaintenanceCost[Resource.Minerals]; } + } + + public int MovementRemaining { get; set; } + + public string Name + { + get; + set; + } + + /// + /// The normal shields of this fleet. Cannot set this property; attempting to do so will throw a NotSupportedException. + /// + [DoNotSerialize(false)] + public int NormalShields + { + get + { + return Vehicles.Sum(sobj => sobj.NormalShields); + } + set + { + throw new NotSupportedException("Cannot set fleet shields directly. Try setting the shields of individual ships."); + } + } + + public IList Orders { get; private set; } + + IEnumerable IOrderable.Orders + => Orders; + + public int OrganicsMaintenance + { + get { return MaintenanceCost[Resource.Organics]; } + } + + [DoNotSerialize] + public Empire Owner + { + get { return Vehicles.ExceptSingle(null).FirstOrDefault()?.Owner; } // assume all vehicles have the same owner + set + { + foreach (var v in Vehicles) + v.Owner = value; + } + } + + public IEnumerable Parents + { + get + { + if (Container != null) + yield return Container; + else + { + if (Sector != null) + yield return Sector; + if (Owner != null) + yield return Owner; + } + } + } + + /// + /// The phased shields of this fleet. Cannot set this property; attempting to do so will throw a NotSupportedException. + /// + [DoNotSerialize(false)] + public int PhasedShields + { + get + { + return Vehicles.Sum(sobj => sobj.PhasedShields); + } + set + { + throw new NotSupportedException("Cannot set fleet shields directly. Try setting the shields of individual ships."); + } + } + + public long PopulationStorageFree + { + get { return 0L; } + } + + public Image Portrait + { + get + { + var owner = Owner ?? Empire.Current; // for client side fleets that are empty + return Pictures.GetPortrait(this, owner.ShipsetPath); + } + } + + public IEnumerable PortraitPaths + { + get + { + return GetImagePaths("Portrait"); + } + } + + public int RadioactivesMaintenance + { + get { return MaintenanceCost[Resource.Radioactives]; } + } + + public ResourceQuantity RemoteMiningIncomePercentages + { + get { return Owner.PrimaryRace.IncomePercentages; } + } + + /// + /// Fleets have no resource value. + /// + public ResourceQuantity ResourceValue + { + get { return new ResourceQuantity(); } + } + + public Sector Sector + { + get + { + if (Container != null) + return Container.Sector; + if (sector == null) + sector = this.FindSector(); + return sector; + } + set + { + var oldsector = Sector; + sector = value; + if (value == null) + { + if (oldsector != null) + oldsector.Remove(this); + } + else + { + if (oldsector != value) + value.Place(this); + } + } + } + + public int ShieldHitpoints + { + get { return Vehicles.Sum(v => v.ShieldHitpoints); } + } + + public int Size + { + get { return Vehicles.ExceptSingle((IMobileSpaceObject)null).Sum(v => v.Size); } + } + + public ResourceQuantity StandardIncomePercentages + { + get { return Owner.PrimaryRace.IncomePercentages; } + } + + public StarSystem StarSystem + { + get { return this.FindStarSystem(); } + } + + /// + /// Resources stored in this fleet. + /// Note that modifying this value will have no effect on the individual vehicles in the fleet; + /// we just don't have a handy read only resource quantity type. + /// + public ResourceQuantity StoredResources + { + get + { + return Vehicles.Sum(v => v.StoredResources); + } + } + + public int StrategicSpeed + { + get { return Vehicles.MinOrDefault(sobj => sobj.StrategicSpeed); } + } + + /// + /// The amount of supply which this fleet can store. + /// + public int SupplyCapacity + { + get + { + return this.GetAbilityValue("Supply Storage").ToInt(); + } + } + + [DoNotSerialize(false)] + public int SupplyRemaining + { + get + { + return Vehicles.Sum(sobj => sobj?.SupplyRemaining ?? 0); + } + set + { + var available = value; + var storage = SupplyStorage; + int spent = 0; + + // sharing supplies should not affect abilities + bool wasCacheDisabled = !Galaxy.Current.IsAbilityCacheEnabled; + if (wasCacheDisabled) + Galaxy.Current.EnableAbilityCache(); + + foreach (var sobj in Vehicles) + { + if (storage == 0) + { + sobj.SupplyRemaining = 0; + continue; + } + var amount = (int)Math.Floor((double)sobj.SupplyStorage / (double)storage * available); + sobj.SupplyRemaining = amount; + spent += amount; + } + var roundingError = available - spent; + if (storage > 0) + { + while (roundingError > 0) + { + var sobj2 = Vehicles.WithMin(sobj => (double)sobj.SupplyRemaining / (double)sobj.SupplyStorage).PickRandom(); + sobj2.SupplyRemaining += 1; + roundingError -= 1; + } + } + + if (wasCacheDisabled) + Galaxy.Current.DisableAbilityCache(); + } + } + + public int SupplyStorage + { + get { return Vehicles.Sum(sobj => sobj.SupplyStorage); } + } + + public double TimePerMove + { + get + { + if (!Vehicles.Any()) + return double.PositiveInfinity; + return Vehicles.Max(sobj => sobj.TimePerMove); + } + } + + public double Timestamp { get; set; } + + [DoNotSerialize] + public double TimeToNextMove + { + get; + set; + } + + /// + /// The space objects in the fleet. + /// Fleets may contain other fleets, but may not contain themselves. + /// + public GalaxyReferenceSet Vehicles { get; private set; } + + public IEnumerable Weapons + { + get { return Vehicles.SelectMany(sobj => sobj.Weapons); } + } + + /// + /// Fleets cannot be directly targeted by weapons. Target the individual ships instead. + /// + public WeaponTargets WeaponTargetType + { + get { return WeaponTargets.None; } + } + + private Sector sector; + + public void AddOrder(IOrder order) + { + if (!(order is IOrder)) + throw new InvalidOperationException("Fleets can only accept orders of type IOrder."); + Orders.Add((IOrder)order); + } + + public long AddPopulation(Civilization.Race race, long amount) + { + foreach (var ct in Vehicles.OfType()) + { + amount = ct.AddPopulation(race, amount); + } + return amount; + } + + public bool AddUnit(IUnit unit) + { + foreach (var ct in Vehicles.OfType()) + { + if (ct.AddUnit(unit)) + return true; + } + return false; + } + + /// + /// Burns movement supplies for all vehicles in the fleet. + /// + public void BurnMovementSupplies() + { + foreach (var v in Vehicles) + v.BurnMovementSupplies(); + } + + public bool CanTarget(ITargetable target) + { + return Vehicles.Any(sobj => sobj.CanTarget(target)); + } + + /// + /// Fleets are as visible as their most visible space object. Not that the others will actually be that visible... + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (!Vehicles.Any(v => v != null)) + return Visibility.Unknown; + return Vehicles.Where(v => v != null).Max(sobj => sobj.CheckVisibility(emp)); + } + + /// + /// Disposes of the fleet. Does not dispose of the individual ships; they are removed from the fleet instead. + /// + public void Dispose() + { + if (IsDisposed) + return; + IsDisposed = true; + foreach (var v in Vehicles.ExceptSingle(null)) + v.Container = null; + Vehicles.Clear(); + Galaxy.Current.UnassignID(this); + Sector = null; + Orders.Clear(); + if (!IsMemory) + this.UpdateEmpireMemories(); + } + + public bool ExecuteOrders() + { + if (!Vehicles.ExceptSingle(null).Any()) + return false; // fleets with no vehicles can't execute orders + return this.ExecuteMobileSpaceObjectOrders(); + } + + public bool IsHostileTo(Empire emp) + { + return Owner != null && Owner.IsEnemyOf(emp, StarSystem); + } + + public bool IsObsoleteMemory(Empire emp) + { + if (StarSystem == null) + return Timestamp < Galaxy.Current.Timestamp - 1; + return StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; + } + + public void RearrangeOrder(IOrder order, int delta) + { + if (!(order is IOrder)) + throw new InvalidOperationException("Fleets can only accept orders of type IOrder."); + var o = (IOrder)order; + var newpos = Orders.IndexOf(o) + delta; + Orders.Remove(o); + if (newpos < 0) + newpos = 0; + if (newpos >= Orders.Count) + Orders.Add(o); + else + Orders.Insert(newpos, o); + } + + public void Redact(Empire emp) + { + // HACK - check for null (destroyed?) vehicles + Validate(); + + var vis = CheckVisibility(emp); + + // Can't see names or orders of alien fleets + // TODO - espionage + if (vis < Visibility.Owned) + { + Name = Owner + " Fleet"; + Orders.Clear(); + AreOrdersOnHold = false; + AreRepeatOrdersEnabled = false; + } + if (vis < Visibility.Fogged) + Dispose(); + } + + public void RemoveOrder(IOrder order) + { + if (!(order is IOrder)) + return; // order can't exist here anyway + Orders.Remove((IOrder)order); + } + + public long RemovePopulation(Civilization.Race race, long amount) + { + foreach (var ct in Vehicles.OfType()) + { + amount = ct.RemovePopulation(race, amount); + } + return amount; + } + + public bool RemoveUnit(IUnit unit) + { + foreach (var ct in Vehicles.OfType()) + { + if (ct.RemoveUnit(unit)) + return true; + } + return false; + } + + public int? Repair(int? amount = null) + { + // TODO - repair priority + foreach (var sobj in Vehicles) + amount = sobj.Repair(amount); + return amount; + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + Vehicles.ReplaceClientIDs(idmap, done); + } + } + + public void ReplenishShields(int? amount = null) + { + if (amount != null) + throw new NotImplementedException("Can't replenish only some of a fleet's shields. Replenish individual ships' shields, or all of the fleet's shields."); + Validate(); + foreach (var sobj in Vehicles) + sobj.ReplenishShields(); + } + + /// + /// Shares supplies between ships in a fleet, proprtional to their supply storage. + /// + public void ShareSupplies() + { + if (HasInfiniteSupplies) + { + // full refill + foreach (var sobj in Vehicles) + sobj.SupplyRemaining = sobj.SupplyStorage; + } + else + { + // share existing supplies + SupplyRemaining = SupplyRemaining; + } + } + + /// + /// When a fleet spends time, all its ships and subfleets do, too. + /// + /// + public void SpendTime(double timeElapsed) + { + TimeToNextMove += timeElapsed; + foreach (var sobj in Vehicles) + sobj.SpendTime(timeElapsed); + } + + /// + /// Assigns damage to a random ship in the fleet. If damage is left over, it leaks to the next ship. + /// + public int TakeDamage(Hit hit, PRNG dice = null) + { + var vs = LeafVehicles.Shuffle().ToList(); + var dmg = hit.NominalDamage; + while (vs.Any() && dmg > 0) + { + var vhit = new Hit(hit.Shot, vs.First(), dmg); + var v = vs.First(); + dmg = v.TakeDamage(vhit, dice); + vs.Remove(v); + } + return dmg; + } + + public override string ToString() + { + return Name; + } + + /// + /// Remove any invalid objects from the fleet and any valid subfleets. + /// If there are no valid objects left, the fleet is disbanded. + /// Objects that are invalid: + /// * Ships, etc. not owned by the owner of the fleet + /// * This fleet (fleets may not contain themselves) + /// * Space objects that are not located in the same sector as this fleet + /// * Space objects that are destroyed + /// + public void Validate(ICollection ancestors = null) + { + if (ancestors == null) + ancestors = new List(); + ancestors.Add(this); + foreach (var sobj in Vehicles.ToArray()) + { + if (sobj == null || sobj.Owner != Owner || (sobj is Fleet && ancestors.Contains((Fleet)sobj)) || sobj.Sector != Sector || sobj.IsDestroyed) + Vehicles.Remove(sobj); + else if (sobj is Fleet) + ((Fleet)sobj).Validate(ancestors); + } + if (!Vehicles.ExceptSingle(null).Any()) + Dispose(); + } + + private IEnumerable GetImagePaths(string imagetype) + { + var shipsetPath = Owner?.ShipsetPath ?? Empire.Current?.ShipsetPath; + + if (shipsetPath == null) + yield break; + + string imageName = "Fleet"; + if (LeafVehicles.All(v => v is Fighter)) + imageName = "FighterGroup"; + else if (LeafVehicles.All(v => v is Satellite)) + imageName = "SatelliteGroup"; + else if (LeafVehicles.All(v => v is Drone)) + imageName = "DroneGroup"; + else if (LeafVehicles.All(v => v is Mine)) + imageName = "MineGroup"; + + if (Mod.Current.RootPath != null) + { + yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, imagetype + "_" + imageName); + yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, shipsetPath + "_" + imagetype + "_" + imageName); + } + yield return Path.Combine("Pictures", "Races", shipsetPath, imagetype + "_" + imageName); + yield return Path.Combine("Pictures", "Races", shipsetPath, shipsetPath + "_" + imagetype + "_" + imageName); + } + + public IEnumerable Components => Vehicles.SelectMany(q => q.Components); + + public bool FillsCombatTile => Vehicles.Any(q => q.FillsCombatTile); + } +} diff --git a/FrEee/Game/Objects/Space/Galaxy.cs b/FrEee/Objects/Space/Galaxy.cs similarity index 96% rename from FrEee/Game/Objects/Space/Galaxy.cs rename to FrEee/Objects/Space/Galaxy.cs index ce8a6eb1d..b9e492f6a 100644 --- a/FrEee/Game/Objects/Space/Galaxy.cs +++ b/FrEee/Objects/Space/Galaxy.cs @@ -1,1307 +1,1307 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Civilization.Diplomacy.Clauses; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Combat.Grid; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Events; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Objects.VictoryConditions; -using FrEee.Game.Setup; -using FrEee.Game.Setup.WarpPointPlacementStrategies; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using Microsoft.Scripting.Utils; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Configuration; -using System.IO; -using System.Linq; -using System.Reflection; - -namespace FrEee.Game.Objects.Space -{ - /// - /// Prevents IDs from being assigned to objects when calling AssignIDs. - /// TODO - move to utility namespace? - /// - public class DoNotAssignIDAttribute : Attribute - { - public DoNotAssignIDAttribute(bool recurse = true) - { - Recurse = recurse; - } - - /// - /// Should the "don't assign ID" rule be recursive? - /// - public bool Recurse { get; private set; } - } - - /// - /// A galaxy in which the game is played. - /// - [Serializable] - public class Galaxy : ICommonAbilityObject - { - public Galaxy() - { - Galaxy.Current = this; - if (Mod.Current != null) - ModPath = Mod.Current.RootPath; - StarSystemLocations = new List>(); - Empires = new List(); - Name = "Unnamed"; - TurnNumber = 1; - referrables = new Dictionary(); - VictoryConditions = new List(); - AbilityCache = new SafeDictionary>(); - CommonAbilityCache = new SafeDictionary, IEnumerable>(); - SharedAbilityCache = new SafeDictionary, IEnumerable>(); - GivenTreatyClauseCache = new SafeDictionary>(); - ReceivedTreatyClauseCache = new SafeDictionary>(); - Battles = new HashSet(); - ScriptNotes = new DynamicDictionary(); - /*if (Mod.Current != null) - { - foreach (var q in Mod.Current.Objects.OfType()) - AssignID(q); - }*/ - } - - /// - /// The current galaxy. Shouldn't change except at loading a game or turn processing. - /// - public static Galaxy Current { get; set; } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.Galaxy; } - } - - /// - /// Allowed trades in this game. - /// - public AllowedTrades AllowedTrades { get; set; } - - /// - /// Should players have sensor data for all systems from the get-go? - /// - public bool AllSystemsExploredFromStart { get; set; } - - /// - /// The battles which have taken place this turn. - /// - public ICollection Battles { get; private set; } - - public bool CanColonizeOnlyBreathable { get; set; } - - public bool CanColonizeOnlyHomeworldSurface { get; set; } - - public IEnumerable Children - { - get { return StarSystemLocations.Select(l => l.Item); } - } - - public string CommandFileName - { - get - { - if (PlayerNumber > 0) - return Name + "_" + TurnNumber + "_" + PlayerNumber + FrEeeConstants.PlayerCommandsSaveGameExtension; - else - throw new InvalidOperationException("The game host does not have a command file."); - } - } - - /// - /// The empire whose turn it is. - /// - public Empire CurrentEmpire { get; set; } - - /// - /// The current tick in turn processing. 0 = start of turn, 1 = end of turn. - /// - public double CurrentTick { get; set; } - - /// - /// The empires participating in the game. - /// - public IList Empires { get; private set; } - - /// - /// Per mille chance of a random event occurring, per turn, per player. - /// - public double EventFrequency { get; set; } - - public string GameFileName - { - get - { - if (PlayerNumber > 0) - return Name + "_" + TurnNumber + "_" + PlayerNumber + FrEeeConstants.SaveGameExtension; - else - return Name + "_" + TurnNumber + FrEeeConstants.SaveGameExtension; - } - } - - public int Height - { - get; - set; - } - - public IEnumerable IntrinsicAbilities - { - // TODO - galaxy wide abilities? - get { yield break; } - } - - /// - /// Is the ability cache enabled? - /// Always enabled on the client side; only when a flag is set on the server side. - /// - public bool IsAbilityCacheEnabled - { - get - { - return Empire.Current != null || isAbilityCacheEnabled; - } - } - - public bool IsAnalysisAllowed { get; set; } - - /// - /// Is this a "humans vs. AI" game? - /// - public bool IsHumansVsAI { get; set; } - - public bool IsIntelligenceAllowed { get; set; } - - /// - /// Is this a single player game? If so, autoprocess the turn after the player takes his turn. - /// - public bool IsSinglePlayer { get; set; } - - public bool IsSurrenderAllowed { get; set; } - - /// - /// The maximum event severity in this game. - /// - public EventSeverity MaximumEventSeverity { get; set; } - - public int MaxPlanetValue { get; set; } - - public int MaxSpawnedAsteroidValue { get; set; } - - public int MaxSpawnedPlanetValue { get; set; } - - public int MaxX - { - get { return StarSystemLocations.MaxOrDefault(ssl => ssl.Location.X); } - } - - public int MaxY - { - get { return StarSystemLocations.MaxOrDefault(ssl => ssl.Location.Y); } - } - - public int MinAsteroidValue { get; set; } - - public int MinPlanetValue { get; set; } - - public int MinSpawnedAsteroidValue { get; set; } - - public int MinSpawnedPlanetValue { get; set; } - - public int MinX - { - get { return StarSystemLocations.MinOrDefault(ssl => ssl.Location.X); } - } - - public int MinY - { - get { return StarSystemLocations.MinOrDefault(ssl => ssl.Location.Y); } - } - - private string modPath; - - /// - /// The mod being played. - /// - [SerializationPriority(1)] - [ForceSerializationWhenDefaultValue] - public string ModPath - { - get => modPath; - set - { - if (Mod.Current == null || Mod.Current.RootPath != value) - Mod.Load(value); - modPath = value; - } - } - - /// - /// The game name. - /// - public string Name { get; set; } - - /// - /// The next tick size, for ship movement. - /// - public double NextTickSize { get; internal set; } - - /// - /// Should players have an omniscient view of all explored systems? - /// Does not prevent cloaking from working; this is just basic sight. - /// Also does not give battle reports for other empires' battles. - /// - public bool OmniscientView { get; set; } - - public IEnumerable Parents - { - get - { - yield break; - } - } - - /// - /// Events which have been warned of and are pending execution. - /// - public ICollection PendingEvents { get; private set; } = new List(); - - /// - /// The current player number (1 is the first player, 0 is the game host). - /// - public int PlayerNumber - { - get { return Empires.IndexOf(CurrentEmpire) + 1; } - } - - public IEnumerable Referrables { get { return referrables.Values; } } - - /// - /// Model to use for remote mining. - /// - public MiningModel RemoteMiningModel { get; set; } - - /// - /// Who can view empire scores? - /// - public ScoreDisplay ScoreDisplay { get; set; } - - /// - /// Notes that mod scripts can play with. - /// - public DynamicDictionary ScriptNotes { get; private set; } - - /// - /// Model to use for standard planetary mining. - /// - public MiningModel StandardMiningModel { get; set; } - - /// - /// The current stardate. Advances 0.1 years per turn. - /// - public string Stardate - { - get - { - return TurnNumber.ToStardate(); - } - } - - /// - /// The locations of the star systems in the galaxy. - /// - public ICollection> StarSystemLocations { get; private set; } - - /// - /// Technology research cost formula. - /// Low = Level * BaseCost - /// Medium = BaseCost for level 1, Level ^ 2 * BaseCost / 2 otherwise - /// Hight = Level ^ 2 * BaseCost - /// - public TechnologyCost TechnologyCost { get; set; } - - /// - /// Zero means normal tech cost; positive values make researching techs that other players know already harder; negative makes it easier. - /// - public int TechnologyUniqueness { get; set; } - - /// - /// Current time equals turn number plus tick minus 1. - /// - public double Timestamp { get { return TurnNumber + CurrentTick - 1; } } - - /// - /// The current turn number. - /// - public int TurnNumber { get; set; } - - /// - /// Number of turns of uninterrupted galactic peace (Non-Aggression or better between all surviving empires). - /// - public int TurnsOfPeace - { - get - { - // TODO - treaties - return 0; - } - } - - /// - /// Vertical space occupied by star systems. - /// - public int UsedHeight - { - get - { - if (!StarSystemLocations.Any()) - return 0; - return StarSystemLocations.Max(ssl => ssl.Location.Y) - StarSystemLocations.Min(ssl => ssl.Location.Y) + 1; - } - } - - /// - /// Horizontal space occuped by star systems. - /// - public int UsedWidth - { - get - { - if (!StarSystemLocations.Any()) - return 0; - return StarSystemLocations.Max(ssl => ssl.Location.X) - StarSystemLocations.Min(ssl => ssl.Location.X) + 1; - } - } - - /// - /// Game victory conditions. - /// - public IList VictoryConditions { get; private set; } - - /// - /// Delay in turns before victory conditions take effect. - /// - public int VictoryDelay { get; set; } - - public WarpPointPlacementStrategy WarpPointPlacementStrategy { get; set; } - - public int Width - { - get; - set; - } - - /// - /// Cache of abilities belonging to game objects. - /// - [DoNotSerialize] - internal SafeDictionary> AbilityCache { get; private set; } - - /// - /// Cache of abilities belonging to common game objects that can have different abilities for each empire. - /// - [DoNotSerialize] - internal SafeDictionary, IEnumerable> CommonAbilityCache { get; private set; } - - /// - /// Cache of treaty clauses given by empires. - /// - [DoNotSerialize] - internal SafeDictionary> GivenTreatyClauseCache { get; set; } - - /// - /// Cache of treaty clauses received by empires. - /// - [DoNotSerialize] - internal SafeDictionary> ReceivedTreatyClauseCache { get; set; } - - /// - /// Anything in the game that can be referenced from the client side - /// using a Reference object instead of passing whole objects around. - /// Stuff needs to be registered to be found though! - /// - [SerializationPriority(2)] - internal IDictionary referrables { get; set; } - - /// - /// Cache of abilities that are shared to empires from other objects due to treaties. - /// - [DoNotSerialize] - internal SafeDictionary, IEnumerable> SharedAbilityCache { get; private set; } - - /// - /// Serialized string value of the galaxy at the beginning of the turn. - /// - [DoNotSerialize] - internal string StringValue - { - get - { - if (stringValue == null) - StringValue = SaveToString(false); - return stringValue; - } - set - { - stringValue = value; - } - } - - private bool isAbilityCacheEnabled; - - private IDictionary lastBattleTimestamps = new SafeDictionary(); - - private string stringValue; - - public static string GetEmpireCommandsSavePath(string gameName, int turnNumber, int empireNumber) - { - return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Savegame", String.Format("{0}_{1}_{2:d4}{3}", gameName, turnNumber, empireNumber, FrEeeConstants.PlayerCommandsSaveGameExtension)); - } - - public static string GetGameSavePath(string gameName, int turnNumber, int empireNumber) - { - return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Savegame", empireNumber < 1 ? - String.Format("{0}_{1}{2}", gameName, turnNumber, FrEeeConstants.SaveGameExtension) : - String.Format("{0}_{1}_{2:d4}{3}", gameName, turnNumber, empireNumber, FrEeeConstants.SaveGameExtension)); - } - - /// - /// Initializes a new game. Sets Galaxy.Current. - /// - /// if there is no mod loaded. - /// A status object to report status back to the GUI. - /// How much progress should we report back to the GUI when we're done initializing the galaxy? 1.0 means all done with everything that needs to be done. - public static void Initialize(GameSetup gsu, PRNG dice, Status status = null, double desiredProgress = 1.0) - { - if (Mod.Current == null) - throw new InvalidOperationException("Cannot initialize a galaxy without a mod. Load a mod into Mod.Current first."); - - if (dice == null) - dice = new PRNG(DateTime.Now.Millisecond + 1000 * DateTime.Now.Second + 60000 * DateTime.Now.Minute); - - var startProgress = status == null ? 0d : status.Progress; - var progressPerStep = (desiredProgress - startProgress) / 4d; - - // create the game - if (Galaxy.Current == null) - { - var galtemp = gsu.GalaxyTemplate; - galtemp.GameSetup = gsu; - Current = galtemp.Instantiate(status, startProgress + progressPerStep, dice); - } - if (status != null) - status.Message = "Populating galaxy"; - gsu.PopulateGalaxy(Current, dice); - Current.SaveTechLevelsForUniqueness(); - if (status != null) - status.Progress += progressPerStep; - - // set single player flag - Current.IsSinglePlayer = gsu.IsSinglePlayer; - - // run init script - if (status != null) - status.Message = "Executing script"; - PythonScriptEngine.RunScript(Mod.Current.GameInitScript); - if (status != null) - status.Progress += progressPerStep; - - // save the game - if (status != null) - status.Message = "Saving game"; - Galaxy.SaveAll(status, desiredProgress); - } - - /// - /// Loads a savegame from the Savegame folder. - /// Note that if it was renamed, it might have different game name, turn number, player number, etc. than the filename indicates. - /// - /// - public static void Load(string filename) - { - var fs = new FileStream(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), FrEeeConstants.SaveGameDirectory, filename), FileMode.Open); - Current = Serializer.Deserialize(fs); - if (Current.ModPath == null) - Mod.Load(null); // skipped in deserialization because it is null but the mod needs to be loaded! - if (Empire.Current != null) - { - // load library of designs, strategies, etc. - Library.Load(); - } - fs.Close(); - fs.Dispose(); - Current.PopulatePropertyValues(); - } - - /// - /// Loads a host savegame from the Savegame folder. - /// - /// - /// - public static void Load(string gameName, int turnNumber) - { - Load(gameName + "_" + turnNumber + FrEeeConstants.SaveGameExtension); - } - - /// - /// Loads a player savegame from the Savegame folder. - /// - /// - /// - /// - public static void Load(string gameName, int turnNumber, int playerNumber) - { - Load(gameName + "_" + turnNumber + "_" + playerNumber.ToString("d4") + FrEeeConstants.SaveGameExtension); - } - - /// - /// Loads from a string in memory. - /// - /// - public static void LoadFromString(string serializedData) - { - Galaxy.Current = Serializer.DeserializeFromString(serializedData); - //Current.SpaceObjectIDCheck("after loading from memory"); - - - if (Current.ModPath == null) - Mod.Load(null); // skipped in deserialization because it is null but the mod needs to be loaded! - - if (Empire.Current != null) - { - // initialize IronPython galaxy on load - Current.StringValue = serializedData; - var formula = new ComputedFormula("Galaxy.Current.TurnNumber", null, true); - var turn = formula.Value; - - // load library of designs, strategies, etc. - Library.Load(); - } - - Current.PopulatePropertyValues(); - } - - /// - /// Populates property values specified by . - /// - private void PopulatePropertyValues() - { - // TODO: cache list of properties to populate when deserializing? - // enumerate all referrables - foreach (var referrable in Referrables) - { - // find referrable's properties - var props = referrable.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); - foreach (var prop in props) - { - // search property's attributes for PopulateAttribute - foreach (var att in prop.GetCustomAttributes()) - { - if (att.GetType().IsGenericType && att.GetType().GetGenericTypeDefinition() == typeof(PopulateAttribute<>)) - { - // found PopulateAttribute - // create populator - var populatorType = att.GetType().GetGenericArguments()[0]; - var populator = (IPopulator)populatorType.Instantiate(); - - // get value from populator and save it into the referrable's property - prop.SetValue(referrable, populator.Populate(referrable)); - } - } - } - } - } - - /// - /// Saves all empires' tech levels in the other empires for uniqueness calculations. - /// - internal void SaveTechLevelsForUniqueness() - { - if (Current.TechnologyUniqueness != 0) - { - foreach (var emp in Current.Empires) - { - emp.OtherPlayersTechLevels.Clear(); - foreach (var emp2 in Current.Empires.ExceptSingle(emp)) - { - foreach (var tech in Mod.Current.Technologies) - { - if (emp.OtherPlayersTechLevels[tech] == null) - emp.OtherPlayersTechLevels[tech] = new List(); - emp.OtherPlayersTechLevels[tech].Add(emp2.ResearchedTechnologies[tech]); - } - } - } - } - } - - /// - /// Saves the master view and all players' views of the galaxy, unless single player, in which case only the first player's view is saved. - /// - /// if CurrentEmpire is not null. - public static void SaveAll(Status status = null, double desiredProgress = 1d) - { - if (Current.CurrentEmpire != null) - throw new InvalidOperationException("Can only save player galaxy views from the master galaxy view."); - - var progressPerSaveLoad = (desiredProgress - (status == null ? 0d : status.Progress)) / (Current.IsSinglePlayer ? 3 : (Current.Empires.Count + 2)); - //Current.SpaceObjectIDCheck("before saving"); - - // save master view - if (status != null) - status.Message = "Saving game (host)"; - var gamname = Galaxy.Current.Save(); - if (status != null) - status.Progress += progressPerSaveLoad; - //Current.SpaceObjectIDCheck("after saving master view to disk"); - - // save player views - for (int i = 0; i < Current.Empires.Count; i++) - { - Load(gamname); - if (Current.Empires[i].IsPlayerEmpire) - { - if (status != null) - status.Message = "Saving game (player " + (i + 1) + ")"; - Current.CurrentEmpire = Current.Empires[i]; - Current.Redact(); - //Current.SpaceObjectIDCheck("after creating player view for " + Current.Empires[i]); - Current.Save(false); // already asssigned IDs in the redact phase - if (status != null) - status.Progress += progressPerSaveLoad; - } - } - - // TODO - only reload master view if we really need to - if (status != null) - status.Message = "Saving game"; - Load(gamname); - if (status != null) - status.Progress += progressPerSaveLoad; - - //Current.SpaceObjectIDCheck("after reloading master view"); - } - - /// - /// Assigns an ID to an object. - /// Will dispose of an object that has a negative ID if it hasn't already been disposed of. - /// - /// The object. - /// The ID, or 0 to generate a new ID (unless the ID is already valid). - /// The new ID. - public long AssignID(IReferrable r, long id = 0) - { - if (r.ID < 0 || r.IsDisposed) - { - if (!r.IsDisposed) - r.Dispose(); - return r.ID; - } - - if (r.HasValidID()) - return r.ID; // no need to reassign ID - else if (referrables.ContainsKey(r.ID)) - { - // HACK - already exists, just log an error but don't overwrite anything - // we need to fix start combatants having the same IDs as the real objects... - Console.Error.WriteLine("The galaxy thinks that " + referrables[r.ID] + " has the ID " + r.ID + " but " + r + " claims to have that ID as well."); - return r.ID; - } - - var oldid = r.ID; - long newid = oldid <= 0 ? id : oldid; - - while (newid <= 0 || referrables.ContainsKey(newid)) - { - newid = RandomHelper.Range(1L, long.MaxValue); - } - r.ID = newid; - referrables.Add(newid, r); - - // clean up old IDs - if (oldid > 0 && referrables.ContainsKey(oldid) && oldid != newid) - referrables.Remove(oldid); - - return newid; - } - - /// - /// Assigns IDs to referrable objects in the galaxy and purges disposed objects. - /// Doesn't assign IDs to objects via DoNotAssignID properties, or to memories (or sub-objects of them). - /// - public void CleanGameState() - { - var parser = new ObjectGraphParser(); - bool canAssign = true; - foreach (var kvp in referrables.ToArray()) - { - if (kvp.Value.IsDisposed) - referrables.Remove(kvp.Key); - } - parser.Property += (pname, o, val) => - { - var prop = o.GetType().FindProperty(pname); - var isMemory = val is IFoggable && (val as IFoggable).IsMemory; - canAssign = !prop.HasAttribute() && !isMemory; - if (isMemory) - return false; // no recursion! - if (prop.GetAttributes().Any(a => a.Recurse)) - return false; // no recursion! - else - return true; - }; - var colls = new List(); - parser.StartObject += o => - { - if (o is IReferrable && canAssign) - { - var r = (IReferrable)o; - AssignID(r); - } - if (o is IEnumerable) - { - colls.Add((IEnumerable)o); - } - }; - parser.EndObject += o => - { - if (o is IEnumerable) - { - colls.Remove((IEnumerable)o); - } - }; - parser.Parse(this); - foreach (var l in StarSystemLocations.ToArray()) - { - if (l.Item == null) - StarSystemLocations.Remove(l); - else - { - foreach (var l2 in l.Item.SpaceObjectLocations.ToArray()) - { - if (l2.Item == null || l2.Item.IsDisposed) - l.Item.SpaceObjectLocations.Remove(l2); - } - } - } - } - - public void ComputeNextTickSize() - { - var objs = FindSpaceObjects().Where(obj => obj.Orders.Any()); - objs = objs.Where(obj => !obj.IsMemory); - if (objs.Where(v => v.TimeToNextMove > 0).Any() && CurrentTick < 1.0) - { - // HACK - why are objects getting zero time to next move?! - var nextTickSize = objs.Where(v => v.TimeToNextMove > 0).Min(v => v.TimeToNextMove); - NextTickSize = Math.Min(1.0 - CurrentTick, nextTickSize); - } - else if (objs.Any()) - { - NextTickSize = objs.Min(v => v.TimePerMove); - } - else - NextTickSize = double.PositiveInfinity; - } - - /// - /// Creates a new empire. - /// - /// - public Empire CreateNewEmpire() - { - var emp = new Empire(); - emp.Name = "Randomly Generated Empire"; // TODO - load from EmpireNames.txt / EmpireTypes.txt - - // TODO - assign AI and primary race to empire - Empires.Add(emp); - return emp; - } - - /// - /// Disables the server side ability cache. - /// - public void DisableAbilityCache() - { - isAbilityCacheEnabled = false; - AbilityCache.Clear(); - CommonAbilityCache.Clear(); - SharedAbilityCache.Clear(); - } - - /// - /// Enables the server side ability cache. - /// - public void EnableAbilityCache() - { - isAbilityCacheEnabled = true; - } - - /// - /// Finds referrable objects in the galaxy. - /// - /// - /// - /// - public IEnumerable Find(Func condition = null) where T : IReferrable - { - if (condition == null) - condition = t => true; - return Referrables.OfType().Where(r => condition(r)); - } - - /// - /// Searches for space objects matching criteria. - /// - /// The type of space object. - /// The criteria. - /// The matching space objects. - public IEnumerable FindSpaceObjects(Func criteria = null) - { - return StarSystemLocations.SelectMany(l => l.Item.FindSpaceObjects(criteria)); - } - - public IEnumerable GetContainedAbilityObjects(Empire emp) - { - return StarSystemLocations.Select(ssl => ssl.Item).Concat(StarSystemLocations.SelectMany(ssl => ssl.Item.GetContainedAbilityObjects(emp))); - } - - public string GetEmpireCommandsSavePath(Empire emp) - { - return GetEmpireCommandsSavePath(Name, TurnNumber, Empires.IndexOf(emp) + 1); - } - - public string GetGameSavePath(Empire emp = null) - { - if (emp == null) - emp = CurrentEmpire; - return GetGameSavePath(Name, TurnNumber, emp == null ? 0 : (Empires.IndexOf(emp) + 1)); - } - - public IReferrable GetReferrable(long key) - { - if (!referrables.ContainsKey(key)) - return null; - return referrables[key]; - } - - /// - /// Finds the real version of a fake referrable. - /// - /// - /// The fake referrable. - /// - public T GetReferrable(T fakeobj) - where T : IReferrable - { - return (T)GetReferrable(fakeobj.ID); - } - - /// - /// Loads player commands into the current game state. - /// If this is the host view, commands will be loaded for all players. - /// If this is the player view, commands will be immediately executed so as to provide the player with a fresh game state. - /// - /// Player empires which did not submit commands and are not defeated. - public IEnumerable LoadCommands() - { - // whose commands are we loading? - var emps = new List(); - if (CurrentEmpire == null) - emps.AddRange(Empires); - else - emps.Add(CurrentEmpire); - - var noCmds = new List(); - - foreach (var emp in emps) - { - var plrfile = GetEmpireCommandsSavePath(emp); - if (File.Exists(plrfile)) - { - var fs = new FileStream(plrfile, FileMode.Open); - var cmds = DeserializeCommands(fs); - LoadCommands(emp, cmds); - fs.Close(); fs.Dispose(); - } - else if (emp.IsPlayerEmpire) - noCmds.Add(emp); - } - - if (CurrentEmpire != null) - { - foreach (var cmd in CurrentEmpire.Commands) - { - if (cmd.Executor == null) - CurrentEmpire.Log.Add(CurrentEmpire.CreateLogMessage($"{cmd} cannot be issued because its executor does not exist. Probably a bug...", LogMessageType.Error)); - else if (cmd.Issuer != cmd.Executor.Owner && cmd.Issuer != cmd.Executor) - CurrentEmpire.Log.Add(CurrentEmpire.CreateLogMessage("We cannot issue commands to " + cmd.Executor + " because it does not belong to us!", LogMessageType.Error)); - else - cmd.Execute(); - } - } - - return noCmds; - } - - /// - /// Only public for unit tests. You should probably call ProcessTurn instead. - /// - public void MoveShips() - { - var vlist = FindSpaceObjects().Where(sobj => sobj.Container == null && !sobj.IsMemory).Shuffle(); - foreach (var v in vlist) - { - // mark system explored if not already - var sys = v.StarSystem; - if (sys == null) - continue; // space object is dead, or not done being built - - if (CurrentTick == 0d && !v.Orders.OfType().Any()) - v.DealWithMines(); - - bool didStuff = v.ExecuteOrders(); - sys.MarkAsExploredBy(v.Owner); - - // update memory sight after movement - if (didStuff) - { - v.UpdateEmpireMemories(); - if (v.StarSystem != null && v.Owner != null) - { - foreach (var sobj in v.StarSystem.FindSpaceObjects().Where(sobj => sobj != v && !sobj.IsMemory && v.Owner.CanSee(sobj)).ToArray()) - v.Owner.UpdateMemory(sobj); - } - - // replenish shields after moving (who knows, we might be out of supplies, or about to hit a minefield) - v.ReplenishShields(); - } - - // check for battles - var sector = v.Sector; - if (v.Owner != null && // unowned objects can't pick fights - sector != null && // can't fight nowhere - sector.SpaceObjects.OfType().Any( - sobj => - (sobj.IsHostileTo(v.Owner) && sobj.Weapons.Any() || v.IsHostileTo(sobj.Owner) && v.Weapons.Any()) // any enemies? - && (sobj.Owner.CanSee(v) || v.Owner.CanSee(sobj)) // enemies are visible? - && (!lastBattleTimestamps.ContainsKey(sector) || lastBattleTimestamps[sector] < Timestamp - (v.StrategicSpeed == 0 ? 1d : 1d / v.StrategicSpeed)))) // have we fought here too recently? - { - // resolve the battle - var battle = new SpaceBattle(sector); - battle.Resolve(); - Battles.Add(battle); - foreach (var emp in battle.Empires) - emp.Log.Add(battle.CreateLogMessage(battle.NameFor(emp), LogMessageType.Battle)); - lastBattleTimestamps[sector] = Current.Timestamp; - } - } - } - - public Sector PickRandomSector(PRNG prng = null) - { - return StarSystemLocations.PickRandom(prng).Item.PickRandomSector(prng); - } - - /// - /// Removes any space objects, etc. that the current empire cannot see. - /// - public void Redact() - { - // save off empire scores first, before data is removed - foreach (var emp in Empires) - { - emp.Scores[TurnNumber] = emp.ComputeScore(Empire.Current); - } - - // the galaxy data itself - if (Empire.Current != null) - ScriptNotes.Clear(); - - // redact sub objects - var parser = new ObjectGraphParser(); - parser.StartObject += redactParser_StartObject; - parser.Parse(this); - - // clean up redacted objects that are not IFoggable - foreach (var x in StarSystemLocations.Where(x => x.Item.IsDisposed).ToArray()) - StarSystemLocations.Remove(x); - - // delete memories since they've been copied to "physical" objects already - foreach (var kvp in Empire.Current.Memory.ToArray()) - { - kvp.Value.Dispose(); - Empire.Current.Memory.Remove(kvp); - } - } - - public void Save(Stream stream, bool assignIDs = true) - { - if (assignIDs) - CleanGameState(); - foreach (var kvp in referrables.Where(kvp => kvp.Value.IsDisposed).ToArray()) - referrables.Remove(kvp); - Serializer.Serialize(this, stream); - } - - /// - /// Saves the game to an appropriately named file in the Savegame folder. - /// Files are named GameName_TurnNumber_PlayerNumber.gam for players (PlayerNumber is 1-indexed) - /// and GameName_TurnNumber.gam for the host. - /// - /// The filename saved to without the folder name (which is Savegame). - public string Save(bool assignIDs = true) - { - if (assignIDs) - CleanGameState(); - foreach (var kvp in referrables.Where(kvp => kvp.Value.ID < 0).ToArray()) - referrables.Remove(kvp); - string filename; - if (CurrentEmpire == null) - filename = Name + "_" + TurnNumber + ".gam"; - else - filename = Name + "_" + TurnNumber + "_" + (Empires.IndexOf(CurrentEmpire) + 1).ToString("d4") + ".gam"; - if (!Directory.Exists(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), FrEeeConstants.SaveGameDirectory))) - Directory.CreateDirectory(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), FrEeeConstants.SaveGameDirectory)); - var fs = new FileStream(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), FrEeeConstants.SaveGameDirectory, filename), FileMode.Create); - Serializer.Serialize(this, fs); - fs.Close(); fs.Dispose(); - return filename; - } - - /// - /// Saves the player's commands to an appropriately named file in the Savegame folder. - /// Files are named GameName_TurnNumber_PlayerNumber.plr. (PlayerNumber is 1-indexed and padded to 4 digits with zeroes) - /// This doesn't make sense for the host view, so an exception will be thrown if there is no current empire. - /// - /// The filename saved to without the folder name (which is Savegame). - /// if there is no current empire. - public string SaveCommands() - { - CleanGameState(); - if (CurrentEmpire == null) - throw new InvalidOperationException("Can't save commands without a current empire."); - foreach (var c in Empire.Current.Commands.OfType().ToArray()) - Empire.Current.Commands.Remove(c); - Empire.Current.Commands.Add(new SetPlayerInfoCommand(Empire.Current) { PlayerInfo = Empire.Current.PlayerInfo }); - if (!Directory.Exists(FrEeeConstants.SaveGameDirectory)) - Directory.CreateDirectory(FrEeeConstants.SaveGameDirectory); - var filename = GetEmpireCommandsSavePath(CurrentEmpire); - var fs = new FileStream(filename, FileMode.Create); - SerializeCommands(fs); - fs.Close(); fs.Dispose(); - - // save library of designs, commands, etc. - Library.Save(); - - return filename; - } - - public string SaveToString(bool assignIDs = true) - { - if (assignIDs) - CleanGameState(); - return Serializer.SerializeToString(this); - } - - public override string ToString() - { - if (CurrentEmpire == null) - return Name; - return Name + " - " + CurrentEmpire.Name + " - " + CurrentEmpire.LeaderName + " - " + Stardate; - } - - public void UnassignID(long id) - { - if (referrables.ContainsKey(id)) - { - var r = referrables[id]; - r.ID = -1; - referrables.Remove(id); - } - } - - public void UnassignID(IReferrable r) - { - if (r == null || r.ID < 0) - return; // nothing to do - if (referrables.ContainsKey(r.ID)) - { - if (referrables[r.ID] == r) - referrables.Remove(r.ID); - else - { - var galaxyThinksTheIDIs = referrables.SingleOrDefault(kvp => kvp.Value == r); - referrables.Remove(galaxyThinksTheIDIs); - } - } - else if (referrables.Values.Contains(r)) - { - try - { - referrables.Remove(referrables.Single(kvp => kvp.Value == r)); - } - catch (InvalidOperationException ex) - { - // HACK - why is the item not being found? sequence contains no matching element? it's right there! - Console.Error.WriteLine(ex); - } - } - //r.ID = -1; - } - - internal void SpaceObjectIDCheck(string when) - { - foreach (var sobj in FindSpaceObjects().ToArray()) - { - if (!referrables.ContainsKey(sobj.ID)) - AssignID(sobj); - if (sobj.ID > 0) - { - var r = referrables[sobj.ID]; - if (r != sobj) - { - // HACK - assume the space object that's actually in space is "real" - referrables[sobj.ID] = sobj; - Console.Error.WriteLine("Space object identity mismatch " + when + " for ID=" + sobj.ID + ". " + sobj + " is actually in space so it is replacing " + r + " in the referrables collection."); - } - } - } - } - - /// - /// Deserializes the player's commands. - /// - /// - /// - private static IList DeserializeCommands(Stream stream) - { - var cmds = Serializer.Deserialize>(stream); - - // check for client safety - foreach (var cmd in cmds.Where(cmd => cmd != null)) - { - cmd.CheckForClientSafety(); - } - - return cmds; - } - - internal void LoadCommands(Empire emp, IList cmds) - { - cmds = cmds.Where(cmd => cmd != null).Distinct().ToList(); // HACK - why would we have null/duplicate commands in a plr file?! - emp.Commands.Clear(); - var idmap = new Dictionary(); - foreach (var cmd in cmds) - { - if (cmd.NewReferrables.Any(r => r.IsDisposed)) - { - emp.Log.Add(new GenericLogMessage("Command \"" + cmd + "\" contained a reference to deleted object \"" + cmd.NewReferrables.First(r => r.IsDisposed) + "\" and will be ignored. This may be a game bug.")); - continue; - } - emp.Commands.Add(cmd); - foreach (var r in cmd.NewReferrables) - { - var clientid = r.ID; - var serverid = AssignID(r); - if (idmap.ContainsKey(clientid)) - { - if (idmap[clientid] != serverid) - throw new InvalidOperationException($"Adding {r} with ID {serverid} to client ID {clientid} for {emp} when that client ID is already mapped to server ID {idmap[clientid]}."); - // else do nothing - } - else - idmap.Add(clientid, serverid); - } - } - foreach (var cmd in cmds) - cmd.ReplaceClientIDs(idmap); // convert client IDs to server IDs - } - - private void redactParser_StartObject(object o) - { - if (o is IReferrable) - AssignID(o as IReferrable); - if (o is IFoggable obj && o is IReferrable r) - { - if (!obj.IsMemory) - { - var id = r.ID; - var vis = obj.CheckVisibility(CurrentEmpire); - if (vis < Visibility.Fogged) - obj.Dispose(); - if (vis == Visibility.Fogged && CurrentEmpire.Memory.ContainsKey(id)) - { - var mem = (IReferrable)CurrentEmpire.Memory[id]; - mem.CopyToExceptID(r, IDCopyBehavior.PreserveDestination); // memory sight! - if (mem is ILocated l1 && r is ILocated l2) - l2.Sector = l1.Sector; // hack to copy location just now without always copying it when an object is copied - obj.IsMemory = true; - } - obj.Redact(Empire.Current); - } - else - { - // memories are only visible to the empire which is seeing them! - // well unless we add some sort of intel project to see them or something... - if (!CurrentEmpire.Memory.Values.Contains(obj)) - obj.Dispose(); - } - } - //SpaceObjectIDCheck("when redacting " + o); - } - - /// - /// Serializes the player's commands. - /// - /// if no current empire - /// - private void SerializeCommands(Stream stream) - { - if (CurrentEmpire == null) - throw new InvalidOperationException("Can't serialize commands if there is no current empire."); - - Serializer.Serialize(CurrentEmpire.Commands, stream); - } - - /// - /// Disposes of any space objects that aren't in space, under construction, or part of the mod definition. - /// - private void SpaceObjectCleanup() - { - foreach (var sobj in Referrables.OfType().ToArray()) - { - bool dispose = true; - if (sobj.Sector != null) - dispose = false; // save space objects that are in space - else if (this is IUnit u && u.FindContainer() != null) // save units that are in cargo - dispose = false; - else if (Mod.Current.StellarObjectTemplates.Contains(sobj as StellarObject)) - dispose = false; // save stellar objects that are part of the mod templates - else if (Referrables.OfType().Any(q => q.Orders.Any(o => o.Item == sobj as IConstructable))) - dispose = false; // save constructable space objects under construction - if (dispose) - sobj.Dispose(); - } - } - - // TODO - replace all those duplicate properties with a reference to the game setup - /* - /// - /// The game setup used to create this galaxy. - /// - public GameSetup GameSetup { get; set; } - */ - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Civilization.Diplomacy.Clauses; +using FrEee.Objects.Combat; +using FrEee.Objects.Combat.Grid; +using FrEee.Objects.Commands; +using FrEee.Objects.Events; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Vehicles; +using FrEee.Objects.VictoryConditions; +using FrEee.Setup; +using FrEee.Setup.WarpPointPlacementStrategies; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using Microsoft.Scripting.Utils; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Configuration; +using System.IO; +using System.Linq; +using System.Reflection; + +namespace FrEee.Objects.Space +{ + /// + /// Prevents IDs from being assigned to objects when calling AssignIDs. + /// TODO - move to utility namespace? + /// + public class DoNotAssignIDAttribute : Attribute + { + public DoNotAssignIDAttribute(bool recurse = true) + { + Recurse = recurse; + } + + /// + /// Should the "don't assign ID" rule be recursive? + /// + public bool Recurse { get; private set; } + } + + /// + /// A galaxy in which the game is played. + /// + [Serializable] + public class Galaxy : ICommonAbilityObject + { + public Galaxy() + { + Galaxy.Current = this; + if (Mod.Current != null) + ModPath = Mod.Current.RootPath; + StarSystemLocations = new List>(); + Empires = new List(); + Name = "Unnamed"; + TurnNumber = 1; + referrables = new Dictionary(); + VictoryConditions = new List(); + AbilityCache = new SafeDictionary>(); + CommonAbilityCache = new SafeDictionary, IEnumerable>(); + SharedAbilityCache = new SafeDictionary, IEnumerable>(); + GivenTreatyClauseCache = new SafeDictionary>(); + ReceivedTreatyClauseCache = new SafeDictionary>(); + Battles = new HashSet(); + ScriptNotes = new DynamicDictionary(); + /*if (Mod.Current != null) + { + foreach (var q in Mod.Current.Objects.OfType()) + AssignID(q); + }*/ + } + + /// + /// The current galaxy. Shouldn't change except at loading a game or turn processing. + /// + public static Galaxy Current { get; set; } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.Galaxy; } + } + + /// + /// Allowed trades in this game. + /// + public AllowedTrades AllowedTrades { get; set; } + + /// + /// Should players have sensor data for all systems from the get-go? + /// + public bool AllSystemsExploredFromStart { get; set; } + + /// + /// The battles which have taken place this turn. + /// + public ICollection Battles { get; private set; } + + public bool CanColonizeOnlyBreathable { get; set; } + + public bool CanColonizeOnlyHomeworldSurface { get; set; } + + public IEnumerable Children + { + get { return StarSystemLocations.Select(l => l.Item); } + } + + public string CommandFileName + { + get + { + if (PlayerNumber > 0) + return Name + "_" + TurnNumber + "_" + PlayerNumber + FrEeeConstants.PlayerCommandsSaveGameExtension; + else + throw new InvalidOperationException("The game host does not have a command file."); + } + } + + /// + /// The empire whose turn it is. + /// + public Empire CurrentEmpire { get; set; } + + /// + /// The current tick in turn processing. 0 = start of turn, 1 = end of turn. + /// + public double CurrentTick { get; set; } + + /// + /// The empires participating in the game. + /// + public IList Empires { get; private set; } + + /// + /// Per mille chance of a random event occurring, per turn, per player. + /// + public double EventFrequency { get; set; } + + public string GameFileName + { + get + { + if (PlayerNumber > 0) + return Name + "_" + TurnNumber + "_" + PlayerNumber + FrEeeConstants.SaveGameExtension; + else + return Name + "_" + TurnNumber + FrEeeConstants.SaveGameExtension; + } + } + + public int Height + { + get; + set; + } + + public IEnumerable IntrinsicAbilities + { + // TODO - galaxy wide abilities? + get { yield break; } + } + + /// + /// Is the ability cache enabled? + /// Always enabled on the client side; only when a flag is set on the server side. + /// + public bool IsAbilityCacheEnabled + { + get + { + return Empire.Current != null || isAbilityCacheEnabled; + } + } + + public bool IsAnalysisAllowed { get; set; } + + /// + /// Is this a "humans vs. AI" game? + /// + public bool IsHumansVsAI { get; set; } + + public bool IsIntelligenceAllowed { get; set; } + + /// + /// Is this a single player game? If so, autoprocess the turn after the player takes his turn. + /// + public bool IsSinglePlayer { get; set; } + + public bool IsSurrenderAllowed { get; set; } + + /// + /// The maximum event severity in this game. + /// + public EventSeverity MaximumEventSeverity { get; set; } + + public int MaxPlanetValue { get; set; } + + public int MaxSpawnedAsteroidValue { get; set; } + + public int MaxSpawnedPlanetValue { get; set; } + + public int MaxX + { + get { return StarSystemLocations.MaxOrDefault(ssl => ssl.Location.X); } + } + + public int MaxY + { + get { return StarSystemLocations.MaxOrDefault(ssl => ssl.Location.Y); } + } + + public int MinAsteroidValue { get; set; } + + public int MinPlanetValue { get; set; } + + public int MinSpawnedAsteroidValue { get; set; } + + public int MinSpawnedPlanetValue { get; set; } + + public int MinX + { + get { return StarSystemLocations.MinOrDefault(ssl => ssl.Location.X); } + } + + public int MinY + { + get { return StarSystemLocations.MinOrDefault(ssl => ssl.Location.Y); } + } + + private string modPath; + + /// + /// The mod being played. + /// + [SerializationPriority(1)] + [ForceSerializationWhenDefaultValue] + public string ModPath + { + get => modPath; + set + { + if (Mod.Current == null || Mod.Current.RootPath != value) + Mod.Load(value); + modPath = value; + } + } + + /// + /// The game name. + /// + public string Name { get; set; } + + /// + /// The next tick size, for ship movement. + /// + public double NextTickSize { get; internal set; } + + /// + /// Should players have an omniscient view of all explored systems? + /// Does not prevent cloaking from working; this is just basic sight. + /// Also does not give battle reports for other empires' battles. + /// + public bool OmniscientView { get; set; } + + public IEnumerable Parents + { + get + { + yield break; + } + } + + /// + /// Events which have been warned of and are pending execution. + /// + public ICollection PendingEvents { get; private set; } = new List(); + + /// + /// The current player number (1 is the first player, 0 is the game host). + /// + public int PlayerNumber + { + get { return Empires.IndexOf(CurrentEmpire) + 1; } + } + + public IEnumerable Referrables { get { return referrables.Values; } } + + /// + /// Model to use for remote mining. + /// + public MiningModel RemoteMiningModel { get; set; } + + /// + /// Who can view empire scores? + /// + public ScoreDisplay ScoreDisplay { get; set; } + + /// + /// Notes that mod scripts can play with. + /// + public DynamicDictionary ScriptNotes { get; private set; } + + /// + /// Model to use for standard planetary mining. + /// + public MiningModel StandardMiningModel { get; set; } + + /// + /// The current stardate. Advances 0.1 years per turn. + /// + public string Stardate + { + get + { + return TurnNumber.ToStardate(); + } + } + + /// + /// The locations of the star systems in the galaxy. + /// + public ICollection> StarSystemLocations { get; private set; } + + /// + /// Technology research cost formula. + /// Low = Level * BaseCost + /// Medium = BaseCost for level 1, Level ^ 2 * BaseCost / 2 otherwise + /// Hight = Level ^ 2 * BaseCost + /// + public TechnologyCost TechnologyCost { get; set; } + + /// + /// Zero means normal tech cost; positive values make researching techs that other players know already harder; negative makes it easier. + /// + public int TechnologyUniqueness { get; set; } + + /// + /// Current time equals turn number plus tick minus 1. + /// + public double Timestamp { get { return TurnNumber + CurrentTick - 1; } } + + /// + /// The current turn number. + /// + public int TurnNumber { get; set; } + + /// + /// Number of turns of uninterrupted galactic peace (Non-Aggression or better between all surviving empires). + /// + public int TurnsOfPeace + { + get + { + // TODO - treaties + return 0; + } + } + + /// + /// Vertical space occupied by star systems. + /// + public int UsedHeight + { + get + { + if (!StarSystemLocations.Any()) + return 0; + return StarSystemLocations.Max(ssl => ssl.Location.Y) - StarSystemLocations.Min(ssl => ssl.Location.Y) + 1; + } + } + + /// + /// Horizontal space occuped by star systems. + /// + public int UsedWidth + { + get + { + if (!StarSystemLocations.Any()) + return 0; + return StarSystemLocations.Max(ssl => ssl.Location.X) - StarSystemLocations.Min(ssl => ssl.Location.X) + 1; + } + } + + /// + /// Game victory conditions. + /// + public IList VictoryConditions { get; private set; } + + /// + /// Delay in turns before victory conditions take effect. + /// + public int VictoryDelay { get; set; } + + public WarpPointPlacementStrategy WarpPointPlacementStrategy { get; set; } + + public int Width + { + get; + set; + } + + /// + /// Cache of abilities belonging to game objects. + /// + [DoNotSerialize] + internal SafeDictionary> AbilityCache { get; private set; } + + /// + /// Cache of abilities belonging to common game objects that can have different abilities for each empire. + /// + [DoNotSerialize] + internal SafeDictionary, IEnumerable> CommonAbilityCache { get; private set; } + + /// + /// Cache of treaty clauses given by empires. + /// + [DoNotSerialize] + internal SafeDictionary> GivenTreatyClauseCache { get; set; } + + /// + /// Cache of treaty clauses received by empires. + /// + [DoNotSerialize] + internal SafeDictionary> ReceivedTreatyClauseCache { get; set; } + + /// + /// Anything in the game that can be referenced from the client side + /// using a Reference object instead of passing whole objects around. + /// Stuff needs to be registered to be found though! + /// + [SerializationPriority(2)] + internal IDictionary referrables { get; set; } + + /// + /// Cache of abilities that are shared to empires from other objects due to treaties. + /// + [DoNotSerialize] + internal SafeDictionary, IEnumerable> SharedAbilityCache { get; private set; } + + /// + /// Serialized string value of the galaxy at the beginning of the turn. + /// + [DoNotSerialize] + internal string StringValue + { + get + { + if (stringValue == null) + StringValue = SaveToString(false); + return stringValue; + } + set + { + stringValue = value; + } + } + + private bool isAbilityCacheEnabled; + + private IDictionary lastBattleTimestamps = new SafeDictionary(); + + private string stringValue; + + public static string GetEmpireCommandsSavePath(string gameName, int turnNumber, int empireNumber) + { + return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Savegame", String.Format("{0}_{1}_{2:d4}{3}", gameName, turnNumber, empireNumber, FrEeeConstants.PlayerCommandsSaveGameExtension)); + } + + public static string GetGameSavePath(string gameName, int turnNumber, int empireNumber) + { + return Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Savegame", empireNumber < 1 ? + String.Format("{0}_{1}{2}", gameName, turnNumber, FrEeeConstants.SaveGameExtension) : + String.Format("{0}_{1}_{2:d4}{3}", gameName, turnNumber, empireNumber, FrEeeConstants.SaveGameExtension)); + } + + /// + /// Initializes a new game. Sets Galaxy.Current. + /// + /// if there is no mod loaded. + /// A status object to report status back to the GUI. + /// How much progress should we report back to the GUI when we're done initializing the galaxy? 1.0 means all done with everything that needs to be done. + public static void Initialize(GameSetup gsu, PRNG dice, Status status = null, double desiredProgress = 1.0) + { + if (Mod.Current == null) + throw new InvalidOperationException("Cannot initialize a galaxy without a mod. Load a mod into Mod.Current first."); + + if (dice == null) + dice = new PRNG(DateTime.Now.Millisecond + 1000 * DateTime.Now.Second + 60000 * DateTime.Now.Minute); + + var startProgress = status == null ? 0d : status.Progress; + var progressPerStep = (desiredProgress - startProgress) / 4d; + + // create the game + if (Galaxy.Current == null) + { + var galtemp = gsu.GalaxyTemplate; + galtemp.GameSetup = gsu; + Current = galtemp.Instantiate(status, startProgress + progressPerStep, dice); + } + if (status != null) + status.Message = "Populating galaxy"; + gsu.PopulateGalaxy(Current, dice); + Current.SaveTechLevelsForUniqueness(); + if (status != null) + status.Progress += progressPerStep; + + // set single player flag + Current.IsSinglePlayer = gsu.IsSinglePlayer; + + // run init script + if (status != null) + status.Message = "Executing script"; + PythonScriptEngine.RunScript(Mod.Current.GameInitScript); + if (status != null) + status.Progress += progressPerStep; + + // save the game + if (status != null) + status.Message = "Saving game"; + Galaxy.SaveAll(status, desiredProgress); + } + + /// + /// Loads a savegame from the Savegame folder. + /// Note that if it was renamed, it might have different game name, turn number, player number, etc. than the filename indicates. + /// + /// + public static void Load(string filename) + { + var fs = new FileStream(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), FrEeeConstants.SaveGameDirectory, filename), FileMode.Open); + Current = Serializer.Deserialize(fs); + if (Current.ModPath == null) + Mod.Load(null); // skipped in deserialization because it is null but the mod needs to be loaded! + if (Empire.Current != null) + { + // load library of designs, strategies, etc. + Library.Load(); + } + fs.Close(); + fs.Dispose(); + Current.PopulatePropertyValues(); + } + + /// + /// Loads a host savegame from the Savegame folder. + /// + /// + /// + public static void Load(string gameName, int turnNumber) + { + Load(gameName + "_" + turnNumber + FrEeeConstants.SaveGameExtension); + } + + /// + /// Loads a player savegame from the Savegame folder. + /// + /// + /// + /// + public static void Load(string gameName, int turnNumber, int playerNumber) + { + Load(gameName + "_" + turnNumber + "_" + playerNumber.ToString("d4") + FrEeeConstants.SaveGameExtension); + } + + /// + /// Loads from a string in memory. + /// + /// + public static void LoadFromString(string serializedData) + { + Galaxy.Current = Serializer.DeserializeFromString(serializedData); + //Current.SpaceObjectIDCheck("after loading from memory"); + + + if (Current.ModPath == null) + Mod.Load(null); // skipped in deserialization because it is null but the mod needs to be loaded! + + if (Empire.Current != null) + { + // initialize IronPython galaxy on load + Current.StringValue = serializedData; + var formula = new ComputedFormula("Galaxy.Current.TurnNumber", null, true); + var turn = formula.Value; + + // load library of designs, strategies, etc. + Library.Load(); + } + + Current.PopulatePropertyValues(); + } + + /// + /// Populates property values specified by . + /// + private void PopulatePropertyValues() + { + // TODO: cache list of properties to populate when deserializing? + // enumerate all referrables + foreach (var referrable in Referrables) + { + // find referrable's properties + var props = referrable.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + foreach (var prop in props) + { + // search property's attributes for PopulateAttribute + foreach (var att in prop.GetCustomAttributes()) + { + if (att.GetType().IsGenericType && att.GetType().GetGenericTypeDefinition() == typeof(PopulateAttribute<>)) + { + // found PopulateAttribute + // create populator + var populatorType = att.GetType().GetGenericArguments()[0]; + var populator = (IPopulator)populatorType.Instantiate(); + + // get value from populator and save it into the referrable's property + prop.SetValue(referrable, populator.Populate(referrable)); + } + } + } + } + } + + /// + /// Saves all empires' tech levels in the other empires for uniqueness calculations. + /// + internal void SaveTechLevelsForUniqueness() + { + if (Current.TechnologyUniqueness != 0) + { + foreach (var emp in Current.Empires) + { + emp.OtherPlayersTechLevels.Clear(); + foreach (var emp2 in Current.Empires.ExceptSingle(emp)) + { + foreach (var tech in Mod.Current.Technologies) + { + if (emp.OtherPlayersTechLevels[tech] == null) + emp.OtherPlayersTechLevels[tech] = new List(); + emp.OtherPlayersTechLevels[tech].Add(emp2.ResearchedTechnologies[tech]); + } + } + } + } + } + + /// + /// Saves the master view and all players' views of the galaxy, unless single player, in which case only the first player's view is saved. + /// + /// if CurrentEmpire is not null. + public static void SaveAll(Status status = null, double desiredProgress = 1d) + { + if (Current.CurrentEmpire != null) + throw new InvalidOperationException("Can only save player galaxy views from the master galaxy view."); + + var progressPerSaveLoad = (desiredProgress - (status == null ? 0d : status.Progress)) / (Current.IsSinglePlayer ? 3 : (Current.Empires.Count + 2)); + //Current.SpaceObjectIDCheck("before saving"); + + // save master view + if (status != null) + status.Message = "Saving game (host)"; + var gamname = Galaxy.Current.Save(); + if (status != null) + status.Progress += progressPerSaveLoad; + //Current.SpaceObjectIDCheck("after saving master view to disk"); + + // save player views + for (int i = 0; i < Current.Empires.Count; i++) + { + Load(gamname); + if (Current.Empires[i].IsPlayerEmpire) + { + if (status != null) + status.Message = "Saving game (player " + (i + 1) + ")"; + Current.CurrentEmpire = Current.Empires[i]; + Current.Redact(); + //Current.SpaceObjectIDCheck("after creating player view for " + Current.Empires[i]); + Current.Save(false); // already asssigned IDs in the redact phase + if (status != null) + status.Progress += progressPerSaveLoad; + } + } + + // TODO - only reload master view if we really need to + if (status != null) + status.Message = "Saving game"; + Load(gamname); + if (status != null) + status.Progress += progressPerSaveLoad; + + //Current.SpaceObjectIDCheck("after reloading master view"); + } + + /// + /// Assigns an ID to an object. + /// Will dispose of an object that has a negative ID if it hasn't already been disposed of. + /// + /// The object. + /// The ID, or 0 to generate a new ID (unless the ID is already valid). + /// The new ID. + public long AssignID(IReferrable r, long id = 0) + { + if (r.ID < 0 || r.IsDisposed) + { + if (!r.IsDisposed) + r.Dispose(); + return r.ID; + } + + if (r.HasValidID()) + return r.ID; // no need to reassign ID + else if (referrables.ContainsKey(r.ID)) + { + // HACK - already exists, just log an error but don't overwrite anything + // we need to fix start combatants having the same IDs as the real objects... + Console.Error.WriteLine("The galaxy thinks that " + referrables[r.ID] + " has the ID " + r.ID + " but " + r + " claims to have that ID as well."); + return r.ID; + } + + var oldid = r.ID; + long newid = oldid <= 0 ? id : oldid; + + while (newid <= 0 || referrables.ContainsKey(newid)) + { + newid = RandomHelper.Range(1L, long.MaxValue); + } + r.ID = newid; + referrables.Add(newid, r); + + // clean up old IDs + if (oldid > 0 && referrables.ContainsKey(oldid) && oldid != newid) + referrables.Remove(oldid); + + return newid; + } + + /// + /// Assigns IDs to referrable objects in the galaxy and purges disposed objects. + /// Doesn't assign IDs to objects via DoNotAssignID properties, or to memories (or sub-objects of them). + /// + public void CleanGameState() + { + var parser = new ObjectGraphParser(); + bool canAssign = true; + foreach (var kvp in referrables.ToArray()) + { + if (kvp.Value.IsDisposed) + referrables.Remove(kvp.Key); + } + parser.Property += (pname, o, val) => + { + var prop = o.GetType().FindProperty(pname); + var isMemory = val is IFoggable && (val as IFoggable).IsMemory; + canAssign = !prop.HasAttribute() && !isMemory; + if (isMemory) + return false; // no recursion! + if (prop.GetAttributes().Any(a => a.Recurse)) + return false; // no recursion! + else + return true; + }; + var colls = new List(); + parser.StartObject += o => + { + if (o is IReferrable && canAssign) + { + var r = (IReferrable)o; + AssignID(r); + } + if (o is IEnumerable) + { + colls.Add((IEnumerable)o); + } + }; + parser.EndObject += o => + { + if (o is IEnumerable) + { + colls.Remove((IEnumerable)o); + } + }; + parser.Parse(this); + foreach (var l in StarSystemLocations.ToArray()) + { + if (l.Item == null) + StarSystemLocations.Remove(l); + else + { + foreach (var l2 in l.Item.SpaceObjectLocations.ToArray()) + { + if (l2.Item == null || l2.Item.IsDisposed) + l.Item.SpaceObjectLocations.Remove(l2); + } + } + } + } + + public void ComputeNextTickSize() + { + var objs = FindSpaceObjects().Where(obj => obj.Orders.Any()); + objs = objs.Where(obj => !obj.IsMemory); + if (objs.Where(v => v.TimeToNextMove > 0).Any() && CurrentTick < 1.0) + { + // HACK - why are objects getting zero time to next move?! + var nextTickSize = objs.Where(v => v.TimeToNextMove > 0).Min(v => v.TimeToNextMove); + NextTickSize = Math.Min(1.0 - CurrentTick, nextTickSize); + } + else if (objs.Any()) + { + NextTickSize = objs.Min(v => v.TimePerMove); + } + else + NextTickSize = double.PositiveInfinity; + } + + /// + /// Creates a new empire. + /// + /// + public Empire CreateNewEmpire() + { + var emp = new Empire(); + emp.Name = "Randomly Generated Empire"; // TODO - load from EmpireNames.txt / EmpireTypes.txt + + // TODO - assign AI and primary race to empire + Empires.Add(emp); + return emp; + } + + /// + /// Disables the server side ability cache. + /// + public void DisableAbilityCache() + { + isAbilityCacheEnabled = false; + AbilityCache.Clear(); + CommonAbilityCache.Clear(); + SharedAbilityCache.Clear(); + } + + /// + /// Enables the server side ability cache. + /// + public void EnableAbilityCache() + { + isAbilityCacheEnabled = true; + } + + /// + /// Finds referrable objects in the galaxy. + /// + /// + /// + /// + public IEnumerable Find(Func condition = null) where T : IReferrable + { + if (condition == null) + condition = t => true; + return Referrables.OfType().Where(r => condition(r)); + } + + /// + /// Searches for space objects matching criteria. + /// + /// The type of space object. + /// The criteria. + /// The matching space objects. + public IEnumerable FindSpaceObjects(Func criteria = null) + { + return StarSystemLocations.SelectMany(l => l.Item.FindSpaceObjects(criteria)); + } + + public IEnumerable GetContainedAbilityObjects(Empire emp) + { + return StarSystemLocations.Select(ssl => ssl.Item).Concat(StarSystemLocations.SelectMany(ssl => ssl.Item.GetContainedAbilityObjects(emp))); + } + + public string GetEmpireCommandsSavePath(Empire emp) + { + return GetEmpireCommandsSavePath(Name, TurnNumber, Empires.IndexOf(emp) + 1); + } + + public string GetGameSavePath(Empire emp = null) + { + if (emp == null) + emp = CurrentEmpire; + return GetGameSavePath(Name, TurnNumber, emp == null ? 0 : (Empires.IndexOf(emp) + 1)); + } + + public IReferrable GetReferrable(long key) + { + if (!referrables.ContainsKey(key)) + return null; + return referrables[key]; + } + + /// + /// Finds the real version of a fake referrable. + /// + /// + /// The fake referrable. + /// + public T GetReferrable(T fakeobj) + where T : IReferrable + { + return (T)GetReferrable(fakeobj.ID); + } + + /// + /// Loads player commands into the current game state. + /// If this is the host view, commands will be loaded for all players. + /// If this is the player view, commands will be immediately executed so as to provide the player with a fresh game state. + /// + /// Player empires which did not submit commands and are not defeated. + public IEnumerable LoadCommands() + { + // whose commands are we loading? + var emps = new List(); + if (CurrentEmpire == null) + emps.AddRange(Empires); + else + emps.Add(CurrentEmpire); + + var noCmds = new List(); + + foreach (var emp in emps) + { + var plrfile = GetEmpireCommandsSavePath(emp); + if (File.Exists(plrfile)) + { + var fs = new FileStream(plrfile, FileMode.Open); + var cmds = DeserializeCommands(fs); + LoadCommands(emp, cmds); + fs.Close(); fs.Dispose(); + } + else if (emp.IsPlayerEmpire) + noCmds.Add(emp); + } + + if (CurrentEmpire != null) + { + foreach (var cmd in CurrentEmpire.Commands) + { + if (cmd.Executor == null) + CurrentEmpire.Log.Add(CurrentEmpire.CreateLogMessage($"{cmd} cannot be issued because its executor does not exist. Probably a bug...", LogMessageType.Error)); + else if (cmd.Issuer != cmd.Executor.Owner && cmd.Issuer != cmd.Executor) + CurrentEmpire.Log.Add(CurrentEmpire.CreateLogMessage("We cannot issue commands to " + cmd.Executor + " because it does not belong to us!", LogMessageType.Error)); + else + cmd.Execute(); + } + } + + return noCmds; + } + + /// + /// Only public for unit tests. You should probably call ProcessTurn instead. + /// + public void MoveShips() + { + var vlist = FindSpaceObjects().Where(sobj => sobj.Container == null && !sobj.IsMemory).Shuffle(); + foreach (var v in vlist) + { + // mark system explored if not already + var sys = v.StarSystem; + if (sys == null) + continue; // space object is dead, or not done being built + + if (CurrentTick == 0d && !v.Orders.OfType().Any()) + v.DealWithMines(); + + bool didStuff = v.ExecuteOrders(); + sys.MarkAsExploredBy(v.Owner); + + // update memory sight after movement + if (didStuff) + { + v.UpdateEmpireMemories(); + if (v.StarSystem != null && v.Owner != null) + { + foreach (var sobj in v.StarSystem.FindSpaceObjects().Where(sobj => sobj != v && !sobj.IsMemory && v.Owner.CanSee(sobj)).ToArray()) + v.Owner.UpdateMemory(sobj); + } + + // replenish shields after moving (who knows, we might be out of supplies, or about to hit a minefield) + v.ReplenishShields(); + } + + // check for battles + var sector = v.Sector; + if (v.Owner != null && // unowned objects can't pick fights + sector != null && // can't fight nowhere + sector.SpaceObjects.OfType().Any( + sobj => + (sobj.IsHostileTo(v.Owner) && sobj.Weapons.Any() || v.IsHostileTo(sobj.Owner) && v.Weapons.Any()) // any enemies? + && (sobj.Owner.CanSee(v) || v.Owner.CanSee(sobj)) // enemies are visible? + && (!lastBattleTimestamps.ContainsKey(sector) || lastBattleTimestamps[sector] < Timestamp - (v.StrategicSpeed == 0 ? 1d : 1d / v.StrategicSpeed)))) // have we fought here too recently? + { + // resolve the battle + var battle = new SpaceBattle(sector); + battle.Resolve(); + Battles.Add(battle); + foreach (var emp in battle.Empires) + emp.Log.Add(battle.CreateLogMessage(battle.NameFor(emp), LogMessageType.Battle)); + lastBattleTimestamps[sector] = Current.Timestamp; + } + } + } + + public Sector PickRandomSector(PRNG prng = null) + { + return StarSystemLocations.PickRandom(prng).Item.PickRandomSector(prng); + } + + /// + /// Removes any space objects, etc. that the current empire cannot see. + /// + public void Redact() + { + // save off empire scores first, before data is removed + foreach (var emp in Empires) + { + emp.Scores[TurnNumber] = emp.ComputeScore(Empire.Current); + } + + // the galaxy data itself + if (Empire.Current != null) + ScriptNotes.Clear(); + + // redact sub objects + var parser = new ObjectGraphParser(); + parser.StartObject += redactParser_StartObject; + parser.Parse(this); + + // clean up redacted objects that are not IFoggable + foreach (var x in StarSystemLocations.Where(x => x.Item.IsDisposed).ToArray()) + StarSystemLocations.Remove(x); + + // delete memories since they've been copied to "physical" objects already + foreach (var kvp in Empire.Current.Memory.ToArray()) + { + kvp.Value.Dispose(); + Empire.Current.Memory.Remove(kvp); + } + } + + public void Save(Stream stream, bool assignIDs = true) + { + if (assignIDs) + CleanGameState(); + foreach (var kvp in referrables.Where(kvp => kvp.Value.IsDisposed).ToArray()) + referrables.Remove(kvp); + Serializer.Serialize(this, stream); + } + + /// + /// Saves the game to an appropriately named file in the Savegame folder. + /// Files are named GameName_TurnNumber_PlayerNumber.gam for players (PlayerNumber is 1-indexed) + /// and GameName_TurnNumber.gam for the host. + /// + /// The filename saved to without the folder name (which is Savegame). + public string Save(bool assignIDs = true) + { + if (assignIDs) + CleanGameState(); + foreach (var kvp in referrables.Where(kvp => kvp.Value.ID < 0).ToArray()) + referrables.Remove(kvp); + string filename; + if (CurrentEmpire == null) + filename = Name + "_" + TurnNumber + ".gam"; + else + filename = Name + "_" + TurnNumber + "_" + (Empires.IndexOf(CurrentEmpire) + 1).ToString("d4") + ".gam"; + if (!Directory.Exists(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), FrEeeConstants.SaveGameDirectory))) + Directory.CreateDirectory(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), FrEeeConstants.SaveGameDirectory)); + var fs = new FileStream(Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), FrEeeConstants.SaveGameDirectory, filename), FileMode.Create); + Serializer.Serialize(this, fs); + fs.Close(); fs.Dispose(); + return filename; + } + + /// + /// Saves the player's commands to an appropriately named file in the Savegame folder. + /// Files are named GameName_TurnNumber_PlayerNumber.plr. (PlayerNumber is 1-indexed and padded to 4 digits with zeroes) + /// This doesn't make sense for the host view, so an exception will be thrown if there is no current empire. + /// + /// The filename saved to without the folder name (which is Savegame). + /// if there is no current empire. + public string SaveCommands() + { + CleanGameState(); + if (CurrentEmpire == null) + throw new InvalidOperationException("Can't save commands without a current empire."); + foreach (var c in Empire.Current.Commands.OfType().ToArray()) + Empire.Current.Commands.Remove(c); + Empire.Current.Commands.Add(new SetPlayerInfoCommand(Empire.Current) { PlayerInfo = Empire.Current.PlayerInfo }); + if (!Directory.Exists(FrEeeConstants.SaveGameDirectory)) + Directory.CreateDirectory(FrEeeConstants.SaveGameDirectory); + var filename = GetEmpireCommandsSavePath(CurrentEmpire); + var fs = new FileStream(filename, FileMode.Create); + SerializeCommands(fs); + fs.Close(); fs.Dispose(); + + // save library of designs, commands, etc. + Library.Save(); + + return filename; + } + + public string SaveToString(bool assignIDs = true) + { + if (assignIDs) + CleanGameState(); + return Serializer.SerializeToString(this); + } + + public override string ToString() + { + if (CurrentEmpire == null) + return Name; + return Name + " - " + CurrentEmpire.Name + " - " + CurrentEmpire.LeaderName + " - " + Stardate; + } + + public void UnassignID(long id) + { + if (referrables.ContainsKey(id)) + { + var r = referrables[id]; + r.ID = -1; + referrables.Remove(id); + } + } + + public void UnassignID(IReferrable r) + { + if (r == null || r.ID < 0) + return; // nothing to do + if (referrables.ContainsKey(r.ID)) + { + if (referrables[r.ID] == r) + referrables.Remove(r.ID); + else + { + var galaxyThinksTheIDIs = referrables.SingleOrDefault(kvp => kvp.Value == r); + referrables.Remove(galaxyThinksTheIDIs); + } + } + else if (referrables.Values.Contains(r)) + { + try + { + referrables.Remove(referrables.Single(kvp => kvp.Value == r)); + } + catch (InvalidOperationException ex) + { + // HACK - why is the item not being found? sequence contains no matching element? it's right there! + Console.Error.WriteLine(ex); + } + } + //r.ID = -1; + } + + internal void SpaceObjectIDCheck(string when) + { + foreach (var sobj in FindSpaceObjects().ToArray()) + { + if (!referrables.ContainsKey(sobj.ID)) + AssignID(sobj); + if (sobj.ID > 0) + { + var r = referrables[sobj.ID]; + if (r != sobj) + { + // HACK - assume the space object that's actually in space is "real" + referrables[sobj.ID] = sobj; + Console.Error.WriteLine("Space object identity mismatch " + when + " for ID=" + sobj.ID + ". " + sobj + " is actually in space so it is replacing " + r + " in the referrables collection."); + } + } + } + } + + /// + /// Deserializes the player's commands. + /// + /// + /// + private static IList DeserializeCommands(Stream stream) + { + var cmds = Serializer.Deserialize>(stream); + + // check for client safety + foreach (var cmd in cmds.Where(cmd => cmd != null)) + { + cmd.CheckForClientSafety(); + } + + return cmds; + } + + internal void LoadCommands(Empire emp, IList cmds) + { + cmds = cmds.Where(cmd => cmd != null).Distinct().ToList(); // HACK - why would we have null/duplicate commands in a plr file?! + emp.Commands.Clear(); + var idmap = new Dictionary(); + foreach (var cmd in cmds) + { + if (cmd.NewReferrables.Any(r => r.IsDisposed)) + { + emp.Log.Add(new GenericLogMessage("Command \"" + cmd + "\" contained a reference to deleted object \"" + cmd.NewReferrables.First(r => r.IsDisposed) + "\" and will be ignored. This may be a game bug.")); + continue; + } + emp.Commands.Add(cmd); + foreach (var r in cmd.NewReferrables) + { + var clientid = r.ID; + var serverid = AssignID(r); + if (idmap.ContainsKey(clientid)) + { + if (idmap[clientid] != serverid) + throw new InvalidOperationException($"Adding {r} with ID {serverid} to client ID {clientid} for {emp} when that client ID is already mapped to server ID {idmap[clientid]}."); + // else do nothing + } + else + idmap.Add(clientid, serverid); + } + } + foreach (var cmd in cmds) + cmd.ReplaceClientIDs(idmap); // convert client IDs to server IDs + } + + private void redactParser_StartObject(object o) + { + if (o is IReferrable) + AssignID(o as IReferrable); + if (o is IFoggable obj && o is IReferrable r) + { + if (!obj.IsMemory) + { + var id = r.ID; + var vis = obj.CheckVisibility(CurrentEmpire); + if (vis < Visibility.Fogged) + obj.Dispose(); + if (vis == Visibility.Fogged && CurrentEmpire.Memory.ContainsKey(id)) + { + var mem = (IReferrable)CurrentEmpire.Memory[id]; + mem.CopyToExceptID(r, IDCopyBehavior.PreserveDestination); // memory sight! + if (mem is ILocated l1 && r is ILocated l2) + l2.Sector = l1.Sector; // hack to copy location just now without always copying it when an object is copied + obj.IsMemory = true; + } + obj.Redact(Empire.Current); + } + else + { + // memories are only visible to the empire which is seeing them! + // well unless we add some sort of intel project to see them or something... + if (!CurrentEmpire.Memory.Values.Contains(obj)) + obj.Dispose(); + } + } + //SpaceObjectIDCheck("when redacting " + o); + } + + /// + /// Serializes the player's commands. + /// + /// if no current empire + /// + private void SerializeCommands(Stream stream) + { + if (CurrentEmpire == null) + throw new InvalidOperationException("Can't serialize commands if there is no current empire."); + + Serializer.Serialize(CurrentEmpire.Commands, stream); + } + + /// + /// Disposes of any space objects that aren't in space, under construction, or part of the mod definition. + /// + private void SpaceObjectCleanup() + { + foreach (var sobj in Referrables.OfType().ToArray()) + { + bool dispose = true; + if (sobj.Sector != null) + dispose = false; // save space objects that are in space + else if (this is IUnit u && u.FindContainer() != null) // save units that are in cargo + dispose = false; + else if (Mod.Current.StellarObjectTemplates.Contains(sobj as StellarObject)) + dispose = false; // save stellar objects that are part of the mod templates + else if (Referrables.OfType().Any(q => q.Orders.Any(o => o.Item == sobj as IConstructable))) + dispose = false; // save constructable space objects under construction + if (dispose) + sobj.Dispose(); + } + } + + // TODO - replace all those duplicate properties with a reference to the game setup + /* + /// + /// The game setup used to create this galaxy. + /// + public GameSetup GameSetup { get; set; } + */ + } +} diff --git a/FrEee/Game/Objects/Space/ObjectLocation.cs b/FrEee/Objects/Space/ObjectLocation.cs similarity index 91% rename from FrEee/Game/Objects/Space/ObjectLocation.cs rename to FrEee/Objects/Space/ObjectLocation.cs index 0cccf0817..5abe8ca8a 100644 --- a/FrEee/Game/Objects/Space/ObjectLocation.cs +++ b/FrEee/Objects/Space/ObjectLocation.cs @@ -1,59 +1,59 @@ -using FrEee.Utility; -using System; -using System.Drawing; - -namespace FrEee.Game.Objects.Space -{ - /// - /// An item and its location. - /// - [Serializable] - public class ObjectLocation - { - public ObjectLocation() - { - } - - public ObjectLocation(T item, Point location) - { - Item = item; - Location = location; - } - - public T Item { get; set; } - public Point Location { get; set; } - - public static bool operator !=(ObjectLocation l1, ObjectLocation l2) - { - return !(l1 == l2); - } - - public static bool operator ==(ObjectLocation l1, ObjectLocation l2) - { - if (object.ReferenceEquals(l1, l2)) - return true; - if (l1 is null || l2 is null) - return false; - if (object.ReferenceEquals(l1, l2)) - return l1.Location.Equals(l2.Location); - if (object.ReferenceEquals(l1.Item, null) || object.ReferenceEquals(l2.Item, null)) - return false; - return l1.Item.Equals(l2.Item) && l1.Location.Equals(l2.Location); - } - - public override bool Equals(object obj) - { - return this == obj as ObjectLocation; - } - - public override int GetHashCode() - { - return HashCodeMasher.Mash(Item, Location); - } - - public override string ToString() - { - return "(" + Location.X + ", " + Location.Y + ")" + ": " + Item; - } - } +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Drawing; + +namespace FrEee.Objects.Space +{ + /// + /// An item and its location. + /// + [Serializable] + public class ObjectLocation + { + public ObjectLocation() + { + } + + public ObjectLocation(T item, Point location) + { + Item = item; + Location = location; + } + + public T Item { get; set; } + public Point Location { get; set; } + + public static bool operator !=(ObjectLocation l1, ObjectLocation l2) + { + return !(l1 == l2); + } + + public static bool operator ==(ObjectLocation l1, ObjectLocation l2) + { + if (object.ReferenceEquals(l1, l2)) + return true; + if (l1 is null || l2 is null) + return false; + if (object.ReferenceEquals(l1, l2)) + return l1.Location.Equals(l2.Location); + if (object.ReferenceEquals(l1.Item, null) || object.ReferenceEquals(l2.Item, null)) + return false; + return l1.Item.Equals(l2.Item) && l1.Location.Equals(l2.Location); + } + + public override bool Equals(object obj) + { + return this == obj as ObjectLocation; + } + + public override int GetHashCode() + { + return HashCodeMasher.Mash(Item, Location); + } + + public override string ToString() + { + return "(" + Location.X + ", " + Location.Y + ")" + ": " + Item; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Space/Planet.cs b/FrEee/Objects/Space/Planet.cs similarity index 95% rename from FrEee/Game/Objects/Space/Planet.cs rename to FrEee/Objects/Space/Planet.cs index d7f4143cd..2a54b2e68 100644 --- a/FrEee/Game/Objects/Space/Planet.cs +++ b/FrEee/Objects/Space/Planet.cs @@ -1,1045 +1,1045 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Modding.Templates; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; - -namespace FrEee.Game.Objects.Space -{ - /// - /// A planet. Planets can be colonized or mined. - /// - [Serializable] - public class Planet : StellarObject, ITemplate, IOrderable, ICombatSpaceObject, ICargoTransferrer, IReferrable, IMobileSpaceObject, IMineableSpaceObject, IIncomeProducer, IDataObject, ITransferrable, ITargetable, IConstructor - { - public Planet() - { - ResourceValue = new ResourceQuantity(); - Orders = new List(); - } - - public override AbilityTargets AbilityTarget => AbilityTargets.Planet; - - public int Accuracy - { - get => - Mod.Current.Settings.PlanetAccuracy - + this.GetAbilityValue("Combat To Hit Offense Plus").ToInt() - - this.GetAbilityValue("Combat To Hit Offense Minus").ToInt() - + (Owner == null || Owner.Culture == null ? 0 : Owner.Culture.SpaceCombat) - + Sector.GetEmpireAbilityValue(Owner, "Combat Modifier - Sector").ToInt() - + StarSystem.GetEmpireAbilityValue(Owner, "Combat Modifier - System").ToInt() - + Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); - } - - public IDictionary AllPopulation - { - get - { - var dict = new SafeDictionary(); - if (Colony != null) - { - foreach (var kvp in Colony.Population) - dict[kvp.Key] += kvp.Value; - foreach (var kvp in Colony.Cargo.Population) - dict[kvp.Key] += kvp.Value; - } - return dict; - } - } - - public IEnumerable AllUnits => Cargo?.Units ?? Enumerable.Empty(); - - /// - /// Are this object's orders on hold? - /// - public bool AreOrdersOnHold { get; set; } - - /// - /// Should this object's orders repeat once they are completed? - /// - public bool AreRepeatOrdersEnabled { get; set; } - - /// - /// TODO - planetary "armor" facilities that soak damage first? - /// - public int ArmorHitpoints => Cargo?.ArmorHitpoints ?? 0; - - /// - /// The atmospheric composition (e.g. methane, oxygen, carbon dioxide) of this planet. - /// - public string Atmosphere { get; set; } - - public override bool CanBeInFleet => false; - - public override bool CanBeObscured => true; - - /// - /// If planets had engines, they could warp... - /// (Sure, why not?) - /// - public override bool CanWarp => !Owner?.IsMinorEmpire ?? true; - - public Cargo Cargo => Colony?.Cargo; - - public Progress CargoFill => new Progress(Colony?.Cargo.Size ?? 0, MaxCargo); - - /// - /// Planets get cargo storage both from facilities and intrinsically. - /// - public int CargoStorage => MaxCargo + this.GetAbilityValue("Cargo Storage").ToInt(); - - public override IEnumerable Children - { - get - { - if (Colony != null) - yield return Colony; - } - } - - /// - /// The environmental conditions of this planet. Affects reproduction rate of populations. - /// - public Conditions Conditions => Mod.Current.Settings.ConditionsThresholds.Where(x => x.Value <= ConditionsAmount).WithMax(x => x.Value).Single().Key; - - public Progress ConditionsProgress => new Progress(ConditionsAmount, Mod.Current.Settings.MaxConditions); - - /// - /// Numeric representation of plantery conditions. - /// - public int ConditionsAmount { get; set; } - - public string ColonizationAbilityName => "Colonize Planet - " + Surface; - - /// - /// The colony on this planet, if any. - /// - public Colony Colony { get; set; } - - public double CombatSpeed => 0; - - public override ConstructionQueue ConstructionQueue => Colony?.ConstructionQueue; - - public Fleet Container { get; set; } - - public override SafeDictionary Data - { - get - { - var dict = base.Data; - dict[nameof(size)] = size; - dict[nameof(Surface)] = Surface; - dict[nameof(Atmosphere)] = Atmosphere; - dict[nameof(ConditionsAmount)] = ConditionsAmount; - dict[nameof(ResourceValue)] = ResourceValue; - dict[nameof(Colony)] = Colony; - dict[nameof(Orders)] = Orders; - return dict; - } - set - { - base.Data = value; - size = value[nameof(size)].Default>(); - Surface = value[nameof(Surface)].Default(); - Atmosphere = value[nameof(Atmosphere)].Default(); - ConditionsAmount = value[nameof(ConditionsAmount)].Default(); - ModID = value[nameof(ModID)].Default(); - ResourceValue = value[nameof(ResourceValue)].Default(new ResourceQuantity()); - Colony = value[nameof(Colony)].Default(); - Orders = value[nameof(Orders)].Default(new List()); - } - } - - [DoNotSerialize] - public IDictionary, ISet>> DijkstraMap - { - get; - set; - } - - public int Evasion - { - get - { - return - Mod.Current.Settings.PlanetEvasion - + this.GetAbilityValue("Combat To Hit Defense Plus").ToInt() - - this.GetAbilityValue("Combat To Hit Defense Minus").ToInt() - + (Owner == null || Owner.Culture == null ? 0 : Owner.Culture.SpaceCombat) - + Sector.GetEmpireAbilityValue(Owner, "Combat Modifier - Sector").ToInt() - + StarSystem.GetEmpireAbilityValue(Owner, "Combat Modifier - System").ToInt() - + Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); - } - } - - public Progress FacilityFill - { - get - { - var facils = 0; - if (Colony != null) - facils = Colony.Facilities.Count; - return new Progress(facils, MaxFacilities); - } - } - - /// - /// The resource income from this planet, not taking into account presence or lack of a spaceport. - /// - public ResourceQuantity GrossIncomeIgnoringSpaceport - { - get - { - if (Colony == null) - return new ResourceQuantity(); // no colony? no income! - - // TODO - solar resource generation (maybe even other resources than min/org/rad?) - - return this.StandardIncome() + this.RawResourceIncome(); - } - } - - public bool HasColony => Colony != null; - - public bool HasSpaceYard => this.HasAbility("Space Yard"); - - public int HitChance => 1; - - [DoNotSerialize] - public int Hitpoints - { - get - { - if (Colony == null) - return 0; - return Cargo.Hitpoints + Colony.Facilities.Sum(f => f.Hitpoints) + (int)AllPopulation.Sum(kvp => kvp.Value * Mod.Current.Settings.PopulationHitpoints); - } - set - { - // can't set HP of planet! - } - } - - public int HullHitpoints - { - get { return Colony == null ? 0 : (Colony.Facilities.Sum(f => f.Hitpoints) + (int)(Colony.Population.Sum(kvp => kvp.Value) * Mod.Current.Settings.PopulationHitpoints) + Cargo.HullHitpoints); } - } - - public override Image Icon - { - get - { - var icon = (Image)base.Icon.Clone(); - DrawPopulationBars(icon); - return icon; - } - } - - public int IntelligenceIncome => this.GrossIncome()[Resource.Intelligence]; - - IEnumerable IAbilityObject.IntrinsicAbilities => IntrinsicAbilities; - - public bool IsAlive => Colony != null; - - /// - /// Planets can't be destroyed in combat. - /// - public bool IsDestroyed => false; - - /// - /// Is this planet domed? Domed planets usually have less space for population, facilities, and cargo. - /// - public bool IsDomed => Colony?.Population.Any(kvp => kvp.Key.NativeAtmosphere != Atmosphere) ?? false; - - public override bool IsIdle => Colony?.ConstructionQueue?.IsIdle ?? false; - - /// - /// Planets currently cost nothing to maintain. - /// TODO - moddable unit/population/facility maintenance - /// - public ResourceQuantity MaintenanceCost => new ResourceQuantity(); - - public int MaxArmorHitpoints => Cargo?.MaxArmorHitpoints ?? 0; - - public int MaxCargo => IsDomed ? Size.MaxCargoDomed : Size.MaxCargo; - - public int MaxFacilities => IsDomed ? Size.MaxFacilitiesDomed : Size.MaxFacilities; - - public int MaxHitpoints - { - get - { - if (Colony == null) - return 0; - return Cargo.MaxHitpoints + Colony.Facilities.Sum(f => f.MaxHitpoints); - } - } - - public int MaxHullHitpoints - { - get { return Colony == null ? 0 : (Colony.Facilities.Sum(f => f.MaxHitpoints) + (int)(Colony.Population.Sum(kvp => kvp.Value) * Mod.Current.Settings.PopulationHitpoints) + Cargo.MaxHullHitpoints); } - } - - public int MaxNormalShields - { - get - { - if (Colony == null) - return 0; - var shields = MaxUnmodifiedNormalShields; - var modifiers = ShieldModifiers; - if (modifiers >= 0) - return shields; // positive modifiers go to phased shields - else - return Math.Max(0, shields + modifiers); // negative modifiers go to normal shields first - } - } - - public int MaxPhasedShields - { - get - { - if (Colony == null) - return 0; - var shields = MaxUnmodifiedPhasedShields; - var modifiers = ShieldModifiers; - if (modifiers >= 0) - return shields + modifiers; // positive modifiers go to phased shields - else - return Math.Max(0, shields + modifiers + MaxUnmodifiedNormalShields); // negative modifiers go to normal shields first - } - } - - public long MaxPopulation => IsDomed ? Size.MaxPopulationDomed : Size.MaxPopulation; - - public int MaxShieldHitpoints - { - get { return MaxNormalShields + MaxPhasedShields; } - } - - public int MaxTargets => int.MaxValue; - - public int MaxUnmodifiedNormalShields - { - get - { - if (Colony == null) - return 0; - return - Colony.Facilities.GetAbilityValue("Shield Generation", this).ToInt() - + Colony.Facilities.GetAbilityValue("Planet - Shield Generation", this).ToInt(); - } - } - - public int MaxUnmodifiedPhasedShields - { - get - { - if (Colony == null) - return 0; - return Colony.Facilities.GetAbilityValue("Phased Shield Generation", this).ToInt(); - } - } - - public double MerchantsRatio - { - get - { - var totalpop = AllPopulation.Sum(x => x.Value); - return AllPopulation.Sum(x => (double)x.Value / (double)totalpop * (x.Key.HasAbility("No Spaceports") ? 1d : 0d)); - } - } - - public int MineralsIncome => this.GrossIncome()[Resource.Minerals]; - - public double MineralsValue => ResourceValue[Resource.Minerals]; - - public int MovementRemaining { get; set; } - - public int NormalShields { get; set; } - - public IList Orders { get; private set; } - - IEnumerable IOrderable.Orders - => Orders; - - public int OrganicsIncome => this.GrossIncome()[Resource.Organics]; - - public double OrganicsValue => ResourceValue[Resource.Organics]; - - /// - /// The empire which has a colony on this planet, if any. - /// - public Empire Owner - { - get => Colony?.Owner; - set - { - if (Colony == null && value != null) - Colony = new Colony { Owner = value }; - else if (Colony != null && value == null) - { - // TODO - unowned colonies? - Colony.Dispose(); - Colony = null; - } - else if (Colony != null && value != null) - Colony.Owner = value; - } - } - - public override IEnumerable Parents - { - get - { - if (Sector != null) - yield return Sector; - if (Owner != null) - yield return Owner; - } - } - - public int PhasedShields { get; set; } - - /// - /// Expected population change for the upcoming turn due to reproduction, cloning, and plagues. - /// - public long PopulationChangePerTurn => PopulationChangePerTurnPerRace.Sum(kvp => kvp.Value); - - /// - /// Expected population change for the upcoming turn due to reproduction, cloning, and plagues. - /// - public IDictionary PopulationChangePerTurnPerRace - { - get - { - var deltapop = new Dictionary(); - - if (Colony == null) - return deltapop; - - foreach (var race in Colony.Population.Keys) - { - // TODO - plagued planets should not reproduce, and should lose population each turn - var sys = this.FindStarSystem(); - var sysModifier = sys == null ? 0 : sys.GetEmpireAbilityValue(Owner, "Modify Reproduction - System").ToInt(); - var planetModifier = this.GetAbilityValue("Modify Reproduction - Planet").ToInt(); - var moodModifier = Mod.Current.Settings.MoodReproductionModifiers[Colony.Moods[race]]; - var conditionsModifier = Mod.Current.Settings.ConditionsReproductionModifiers[Conditions]; - var reproduction = - (Mod.Current.Settings.Reproduction + (race.Aptitudes["Reproduction"] - 100) - + sysModifier + planetModifier + moodModifier + conditionsModifier) - * Mod.Current.Settings.ReproductionMultiplier - / 100d; - if (reproduction < 0) - reproduction = 0; - deltapop[race] = (long)(Colony.Population[race] * reproduction); - - // TODO - allow cloning of populations over the max of a 32 bit int? - var sysCloning = sys == null ? 0 : sys.GetEmpireAbilityValue(Owner, "Change Population - System").ToInt(); - var planetCloning = this.GetAbilityValue("Change Population - Planet").ToInt(); - deltapop[race] += (sysCloning + planetCloning) * Mod.Current.Settings.PopulationFactor / Colony.Population.Count; // split cloning across races - } - - return deltapop; - } - } - - public Progress PopulationFill - { - get - { - var pop = 0L; - if (Colony != null) - pop = Colony.Population.Sum(kvp => kvp.Value); - return new Progress(pop, MaxPopulation); - } - } - - public long PopulationStorageFree => MaxPopulation - (Colony?.Population.Sum(kvp => kvp.Value) ?? 0); - - public int RadioactivesIncome => this.GrossIncome()[Resource.Radioactives]; - - public double RadioactivesValue => ResourceValue[Resource.Radioactives]; - - public ResourceQuantity RemoteMiningIncomePercentages => Colony?.RemoteMiningIncomePercentages ?? new ResourceQuantity(); - - public int ResearchIncome => this.GrossIncome()[Resource.Research]; - - /// - /// Base resource generation, not taking into account value. - /// - public ResourceQuantity ResourceGeneration - { - get - { - if (Colony == null) - return new ResourceQuantity(); - - var sys = StarSystem; - if (sys.HasAbility("Spaceport", Owner)) - return GrossIncomeIgnoringSpaceport; - else - return GrossIncomeIgnoringSpaceport * Colony.MerchantsRatio; - } - } - - /// - /// The resource value of this planet, in %. - /// - public ResourceQuantity ResourceValue { get; set; } - - [DoNotSerialize(false)] - public override Sector Sector - { - get - { - return base.Sector; - } - set - { - base.Sector = value; - /*if (Cargo != null) - { - foreach (var v in Cargo.Units.OfType().ToArray()) - v.Sector = value; - }*/ - } - } - - public int ShieldHitpoints => NormalShields + PhasedShields; - - public int ShieldModifiers - { - get - { - return - -Sector.GetAbilityValue("Sector - Shield Disruption").ToInt() - + Sector.GetEmpireAbilityValue(Owner, "Shield Modifier - Sector").ToInt() - + StarSystem.GetEmpireAbilityValue(Owner, "Shield Modifier - System").ToInt() - + Owner.GetAbilityValue("Shield Modifier - Empire").ToInt(); - } - } - - /// - /// The PlanetSize.txt entry for this asteroid field's size. - /// - [DoNotSerialize] - public StellarObjectSize Size { get => size; set => size = value; } - - int ICombatant.Size => int.MaxValue; - - public ResourceQuantity StandardIncomePercentages => Colony?.StandardIncomePercentages ?? new ResourceQuantity(); - - /// - /// TODO - planetary engines? but how would we do engines per move? - /// - public int StrategicSpeed => 0; - - public int SupplyRemaining - { - get - { - return 0; - } - set - { - // HACK - can't throw an exception, it breaks cloning objects, so just do nothing - } - } - - /// - /// The surface composition (e.g. rock, ice, gas) of this planet. - /// - public string Surface { get; set; } - - /// - /// Planets can't currently move, but they can execute orders at the end of the turn. - /// - public double TimePerMove => 1; - - /// - /// Fractional turns until the planet has saved up another move point. - /// - public double TimeToNextMove { get; set; } - - public IEnumerable Weapons - { - get - { - if (Cargo == null) - return Enumerable.Empty(); - return Cargo.Units.OfType().SelectMany(wp => wp.Weapons).Where(x => !x.IsDestroyed); - } - } - - public WeaponTargets WeaponTargetType => WeaponTargets.Planet; - - /// - /// Used for naming. - /// - [DoNotSerialize] - internal Planet MoonOf { get; set; } - - private ModReference size { get; set; } - - public void AddOrder(IOrder order) - { - if (!(order is IOrder)) - throw new Exception("Can't add a " + order.GetType() + " to a planet's orders."); - Orders.Add((IOrder)order); - } - - public long AddPopulation(Race race, long amount) - { - // make sure planet has a colony - if (Colony == null) - return amount; // can't add population with no colony - - // put population in planetary population storage - var canPop = Math.Min(amount, PopulationStorageFree); - amount -= canPop; - Colony.Population[race] += canPop; - - // don't put population in planetary cargo storage, that's just confusing - /*var canCargo = Math.Min(amount, (long)(this.CargoStorageFree() / Mod.Current.Settings.PopulationSize)); - amount -= canCargo; - Colony.Cargo.Population[race] += canCargo;*/ - - // apply anger to population - if (!Colony.Anger.ContainsKey(race)) - Colony.Anger[race] = Mod.Current.Settings.StartPopulationAnger; - - // return leftover population - return amount; - } - - public bool AddUnit(IUnit unit) - { - if (this.CargoStorageFree() >= unit.Design.Hull.Size) - { - Colony.Cargo.Units.Add(unit); - return true; - } - return false; - } - - /// - /// Planets don't have to worry about supplies. - /// - public void BurnMovementSupplies() - { - // do nothing - } - - public bool CanTarget(ITargetable target) => Cargo?.Units.OfType().Any(wp => wp.CanTarget(target)) ?? false; - - /// - /// Deletes this planet and spawns an asteroid field with the same name, sector, size, and value as this planet. - /// If there are no appropriate asteroid field templates in the mod, simply deletes the planet. - /// - public void ConvertToAsteroidField() - { - var sector = Sector; - var size = Size; - var value = ResourceValue; - var name = Name; - - var astTemplates = Mod.Current.StellarObjectTemplates.OfType().Where(a => a.Size == size); - if (astTemplates.Any()) - { - var astTemplate = astTemplates.PickRandom(); - var ast = astTemplate.Instantiate(); - ast.Sector = Sector; - ast.ResourceValue = value; - ast.Name = name; - ast.UpdateEmpireMemories(); - } - - Dispose(); - } - - public override void Dispose() - { - if (IsDisposed) - return; - var sys = this.FindStarSystem(); - if (sys != null) - sys.Remove(this); - if (Cargo != null) - { - foreach (var u in Cargo.Units) - u.Dispose(); - } - if (Colony != null) - Colony.Dispose(); - Galaxy.Current.UnassignID(this); - if (!IsMemory) - this.UpdateEmpireMemories(); - IsDisposed = true; - } - - /// - /// Draws "population bars" on an image of the planet. - /// Make sure not to draw on an original; make a copy first! - /// - /// - public void DrawPopulationBars(Image img, int? expectedSize = null) - { - if (Colony != null) - { - // draw population bar - var g = Graphics.FromImage(img); - double scaleFactor = 1; - if (expectedSize != null) - scaleFactor = (double)expectedSize / Math.Max(img.Width, img.Height); - var rect = new Rectangle((int)(img.Width - 21 / scaleFactor), (int)(1 / scaleFactor), (int)(20 / scaleFactor), (int)(8 / scaleFactor)); - var pen = new Pen(Colony.Owner.Color, 1 / (float)scaleFactor); - g.FillRectangle(Brushes.Black, rect); - g.DrawRectangle(pen, rect); - var brush = new SolidBrush(Colony.Owner.Color); - var pop = Colony.Population.Sum(kvp => kvp.Value); - rect.Width = (int)(5 / scaleFactor); - rect.X += (int)(1 /scaleFactor); - rect.Y += (int)(2 / scaleFactor); - rect.Height -= (int)(3 / scaleFactor); - rect.X += (int)(1 / scaleFactor); - if (pop > 0) - g.FillRectangle(brush, rect); - rect.X += (int)(6 /scaleFactor); - if (pop > MaxPopulation / 3) - g.FillRectangle(brush, rect); - rect.X += (int)(6 / scaleFactor); - if (pop > MaxPopulation * 2 / 3) - g.FillRectangle(brush, rect); - } - } - - /// - /// Draws this planet's status icons on a picture. - /// If the planet has special abilities (such as ruins), a ruins icon will be drawn. - /// If the planet is uncolonized but colonizable with the current empire's technology, a colonizability circle will also be drawn: - /// * Green for planets that and breathable by the current empire's primary race. - /// * Yellow for planets that and breathable by any subjugated population. - /// * Red for other colonizable planets. - /// - /// - public void DrawStatusIcons(Image pic) - { - var g = Graphics.FromImage(pic); - var sizeFactor = 1f / 4f; - var leftovers = 1f - sizeFactor; - if (IntrinsicAbilities.Any()) - { - // draw ruins icon - var path = Path.Combine("Pictures", "UI", "Map", "ruins"); - var img = Pictures.GetModImage(path); - if (img == null) - throw new FileNotFoundException("Could not load ruins icon: " + Path.GetFullPath(path) + "."); - g.DrawImage(img, 0, 0, pic.Width * sizeFactor, pic.Height * sizeFactor); - } - if (Colony == null && Empire.Current != null && Empire.Current.UnlockedItems.OfType().Where(c => c.HasAbility(ColonizationAbilityName)).Any()) - { - Brush brush; - if (Atmosphere == Empire.Current.PrimaryRace.NativeAtmosphere) - brush = Brushes.Green; - else if ( - Empire.Current.ColonizedPlanets.Any(p => p.Colony.Population.Any(kvp => kvp.Key.NativeAtmosphere == Atmosphere)) || - Empire.Current.OwnedSpaceObjects.OfType().Any(cc => cc.Cargo.Population.Any(kvp => kvp.Key.NativeAtmosphere == Atmosphere)) - ) - brush = Brushes.Yellow; - else - brush = Brushes.Red; - g.DrawEllipse(new Pen(brush), pic.Width * leftovers - 1, 0, pic.Width * sizeFactor, pic.Height * sizeFactor); - g.FillEllipse(brush, pic.Width * (leftovers + sizeFactor / 4f) - 1, pic.Width * sizeFactor / 4f, pic.Width * sizeFactor / 2f, pic.Height * sizeFactor / 2f); - } - } - - public bool ExecuteOrders() => this.ExecuteMobileSpaceObjectOrders(); - - /// - /// Just copy the planet's data. - /// - /// A copy of the planet. - public Planet Instantiate() - { - var result = this.CopyAndAssignNewID(); - result.ModID = null; - return result; - } - - public override bool IsHostileTo(Empire emp) => Owner?.IsEnemyOf(emp, StarSystem) ?? false; - - /*/// - /// The planet's gross income, taking into presence presence or lack of a spaceport. - /// - public override ResourceQuantity GrossIncome - { - get - { - if (Colony == null) - return new ResourceQuantity(); - - var sys = StarSystem; - if (sys.HasAbility("Spaceport", Owner)) - return GrossIncomeIgnoringSpaceport; - else - return GrossIncomeIgnoringSpaceport * Colony.MerchantsRatio; - } - }*/ - - public void RearrangeOrder(IOrder order, int delta) - { - if (!(order is IOrder)) - throw new Exception("Can't rearrange a " + order.GetType() + " in a planet's orders."); - var o = (IOrder)order; - var newpos = Orders.IndexOf(o) + delta; - if (newpos < 0) - newpos = 0; - Orders.Remove(o); - if (newpos >= Orders.Count) - Orders.Add(o); - else - Orders.Insert(newpos, o); - } - - public override void Redact(Empire emp) - { - base.Redact(emp); - - var vis = CheckVisibility(emp); - - MoonOf = null; // in case we allow moons to have different visibility than their parent planets - - if (Colony != null && Colony.CheckVisibility(emp) < Visibility.Fogged) - Colony = null; - - if (vis < Visibility.Owned) - { - // TODO - espionage? - Orders.Clear(); - AreOrdersOnHold = false; - AreRepeatOrdersEnabled = false; - } - } - - public void RemoveOrder(IOrder order) - { - if (order != null && !(order is IOrder)) - return; // order can't exist here anyway - Orders.Remove((IOrder)order); - } - - public long RemovePopulation(Race race, long amount) - { - if (Colony == null) - return amount; // can't remove population with no colony - var canCargo = Math.Min(amount, Colony.Cargo.Population[race]); - amount -= canCargo; - Colony.Cargo.Population[race] -= canCargo; - var canPop = Math.Min(amount, Colony.Population[race]); - amount -= canPop; - Colony.Population[race] -= canPop; - return amount; - } - - public bool RemoveUnit(IUnit unit) - { - if (Colony.Cargo.Units.Contains(unit)) - { - Colony.Cargo.Units.Remove(unit); - return true; - } - return false; - } - - /// - /// Passes repair on to cargo. - /// - /// - /// - public int? Repair(int? amount = null) - { - if (Cargo != null) - { - return Cargo.Repair(amount); - } - - // nothing to repair - if (amount == null) - return amount; - return amount.Value; - } - - public void ReplenishShields(int? amount = null) - { - if (amount == null) - { - NormalShields = MaxNormalShields; - PhasedShields = MaxPhasedShields; - } - else - { - PhasedShields += amount.Value; - if (PhasedShields > MaxPhasedShields) - { - var overflow = PhasedShields - MaxPhasedShields; - PhasedShields = MaxPhasedShields; - NormalShields += overflow; - if (NormalShields > MaxNormalShields) - NormalShields = MaxNormalShields; - } - } - } - - /// - /// When a planet spends time, all its space units in cargo spend time too. - /// TODO - It should also perform construction here... - /// - /// - public void SpendTime(double timeElapsed) - { - TimeToNextMove += timeElapsed; - if (Cargo != null) - { - foreach (var u in Cargo.Units.OfType()) - u.SpendTime(timeElapsed); - } - } - - public int TakeDamage(Hit hit, PRNG dice = null) - { - var damage = hit.NominalDamage; - - if (Colony == null) - return damage; // uninhabited planets can't take damage - - // let shields mitigate incoming damage - damage = this.TakeShieldDamage(hit, damage, dice); - - // TODO - to-hit chances not just based on HP? - // TODO - per-race population HP? - var popHP = (int)Math.Ceiling(Colony.Population.Sum(kvp => kvp.Value) * Mod.Current.Settings.PopulationHitpoints); - var cargoHP = Colony.Cargo.MaxHitpoints; - var facilHP = Colony.Facilities.Sum(f => f.MaxHitpoints); - var order = new int[] { 0, 1, 2 }.Shuffle(dice); - foreach (var num in order) - { - if (num == 0) - damage = TakePopulationDamage(hit, dice); - else if (num == 1) - damage = Cargo.TakeDamage(hit, dice); - else if (num == 2) - damage = TakeFacilityDamage(hit, dice); - hit = new Hit(hit.Shot, this, damage); - if (hit.NominalDamage <= 0) - break; - } - - // if planet was completely glassed, remove the colony - if (!Colony.Population.Any(p => p.Value > 0) && !Cargo.Units.Any() && !Cargo.Population.Any(p => p.Value > 0) && !Colony.Facilities.Any()) - { - if (Colony.IsHomeworld) - Colony.Owner.TriggerHappinessChange(hm => hm.OurHomeworldLost); - Colony.Owner.TriggerHappinessChange(hm => hm.OurPlanetLost); - Colony.Dispose(); - } - - // update memory sight - if (!IsMemory) - this.UpdateEmpireMemories(); - - return damage; - } - - public void TakePopulationDamage(int popFactorsKilled, PRNG dice = null) - { - if (Colony == null) - return; - long popKilled = popFactorsKilled * Mod.Current.Settings.PopulationFactor; - long totalPop = Colony.Population.Sum(kvp => kvp.Value); - long dead = 0; - foreach (var race in Colony.Population.Keys) - { - long ourDead = popKilled / totalPop; - Colony.Population[race] -= ourDead; - dead += ourDead; - } - for (long i = 0; i < popKilled - dead; i++) - { - // leftover deaths get allocated randomly - var race = Colony.Population.PickWeighted(dice); - Colony.Population[race]--; - } - } - - private int TakeFacilityDamage(Hit hit, PRNG dice = null) - { - if (Colony == null) - return hit.NominalDamage; - int damage = hit.NominalDamage; - // TODO - take into account damage types, and make sure we have facilities that are not immune to the damage type so we don't get stuck in an infinite loop - while (damage > 0 && Colony.Facilities.Any()) - { - var facil = Colony.Facilities.Where(f => - { - // skip facilities that are completely pierced by this hit - var hit2 = new Hit(hit.Shot, f, damage); - return hit2.Shot.DamageType.ComponentPiercing.Evaluate(hit2) < 100; - }).ToDictionary(f => f, f => f.HitChance).PickWeighted(dice); - if (facil == null) - break; // no more facilities to hit - var facilhit = new Hit(hit.Shot, facil, damage); - damage = facil.TakeDamage(facilhit, dice); - } - return damage; - } - - private int TakePopulationDamage(Hit hit, PRNG dice = null) - { - if (Colony == null) - return hit.NominalDamage; - int damage = hit.NominalDamage; - int inflicted = 0; - long totalPopKilled = 0; - for (int i = 0; i < damage; i++) - { - // pick a race and kill some population - var race = Colony.Population.PickWeighted(dice); - if (race == null) - break; // no more population - double popHPPerPerson = Mod.Current.Settings.PopulationHitpoints; - // TODO - don't ceiling the popKilled, just stack it up - int popKilled = (int)Math.Ceiling(hit.Shot.DamageType.PopulationDamage.Evaluate(hit.Shot) / 100 / popHPPerPerson); - totalPopKilled += popKilled; - Colony.Population[race] -= popKilled; - if (Colony.Population[race] < 0) - Colony.Population[race] = 0; - inflicted += 1; - } - Colony.TriggerHappinessChange(hm => (int)(hm.OneMillionPopulationKilled * totalPopKilled / 1_000_000)); - // clear population that was emptied out - foreach (var race in Colony.Population.Where(kvp => kvp.Value <= 0).Select(kvp => kvp.Key).ToArray()) - Colony.Population.Remove(race); - return damage - inflicted; - } - - public Progress AngerProgress => new Progress(Colony?.AverageAnger ?? 0, Mod.Current.Settings.MaxAnger); - - public IEnumerable Components => Cargo.Units.OfType().SelectMany(q => q.Components); - - public bool FillsCombatTile => true; - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Modding.Templates; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; + +namespace FrEee.Objects.Space +{ + /// + /// A planet. Planets can be colonized or mined. + /// + [Serializable] + public class Planet : StellarObject, ITemplate, IOrderable, ICombatSpaceObject, ICargoTransferrer, IReferrable, IMobileSpaceObject, IMineableSpaceObject, IIncomeProducer, IDataObject, ITransferrable, ITargetable, IConstructor + { + public Planet() + { + ResourceValue = new ResourceQuantity(); + Orders = new List(); + } + + public override AbilityTargets AbilityTarget => AbilityTargets.Planet; + + public int Accuracy + { + get => + Mod.Current.Settings.PlanetAccuracy + + this.GetAbilityValue("Combat To Hit Offense Plus").ToInt() + - this.GetAbilityValue("Combat To Hit Offense Minus").ToInt() + + (Owner == null || Owner.Culture == null ? 0 : Owner.Culture.SpaceCombat) + + Sector.GetEmpireAbilityValue(Owner, "Combat Modifier - Sector").ToInt() + + StarSystem.GetEmpireAbilityValue(Owner, "Combat Modifier - System").ToInt() + + Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); + } + + public IDictionary AllPopulation + { + get + { + var dict = new SafeDictionary(); + if (Colony != null) + { + foreach (var kvp in Colony.Population) + dict[kvp.Key] += kvp.Value; + foreach (var kvp in Colony.Cargo.Population) + dict[kvp.Key] += kvp.Value; + } + return dict; + } + } + + public IEnumerable AllUnits => Cargo?.Units ?? Enumerable.Empty(); + + /// + /// Are this object's orders on hold? + /// + public bool AreOrdersOnHold { get; set; } + + /// + /// Should this object's orders repeat once they are completed? + /// + public bool AreRepeatOrdersEnabled { get; set; } + + /// + /// TODO - planetary "armor" facilities that soak damage first? + /// + public int ArmorHitpoints => Cargo?.ArmorHitpoints ?? 0; + + /// + /// The atmospheric composition (e.g. methane, oxygen, carbon dioxide) of this planet. + /// + public string Atmosphere { get; set; } + + public override bool CanBeInFleet => false; + + public override bool CanBeObscured => true; + + /// + /// If planets had engines, they could warp... + /// (Sure, why not?) + /// + public override bool CanWarp => !Owner?.IsMinorEmpire ?? true; + + public Cargo Cargo => Colony?.Cargo; + + public Progress CargoFill => new Progress(Colony?.Cargo.Size ?? 0, MaxCargo); + + /// + /// Planets get cargo storage both from facilities and intrinsically. + /// + public int CargoStorage => MaxCargo + this.GetAbilityValue("Cargo Storage").ToInt(); + + public override IEnumerable Children + { + get + { + if (Colony != null) + yield return Colony; + } + } + + /// + /// The environmental conditions of this planet. Affects reproduction rate of populations. + /// + public Conditions Conditions => Mod.Current.Settings.ConditionsThresholds.Where(x => x.Value <= ConditionsAmount).WithMax(x => x.Value).Single().Key; + + public Progress ConditionsProgress => new Progress(ConditionsAmount, Mod.Current.Settings.MaxConditions); + + /// + /// Numeric representation of plantery conditions. + /// + public int ConditionsAmount { get; set; } + + public string ColonizationAbilityName => "Colonize Planet - " + Surface; + + /// + /// The colony on this planet, if any. + /// + public Colony Colony { get; set; } + + public double CombatSpeed => 0; + + public override ConstructionQueue ConstructionQueue => Colony?.ConstructionQueue; + + public Fleet Container { get; set; } + + public override SafeDictionary Data + { + get + { + var dict = base.Data; + dict[nameof(size)] = size; + dict[nameof(Surface)] = Surface; + dict[nameof(Atmosphere)] = Atmosphere; + dict[nameof(ConditionsAmount)] = ConditionsAmount; + dict[nameof(ResourceValue)] = ResourceValue; + dict[nameof(Colony)] = Colony; + dict[nameof(Orders)] = Orders; + return dict; + } + set + { + base.Data = value; + size = value[nameof(size)].Default>(); + Surface = value[nameof(Surface)].Default(); + Atmosphere = value[nameof(Atmosphere)].Default(); + ConditionsAmount = value[nameof(ConditionsAmount)].Default(); + ModID = value[nameof(ModID)].Default(); + ResourceValue = value[nameof(ResourceValue)].Default(new ResourceQuantity()); + Colony = value[nameof(Colony)].Default(); + Orders = value[nameof(Orders)].Default(new List()); + } + } + + [DoNotSerialize] + public IDictionary, ISet>> DijkstraMap + { + get; + set; + } + + public int Evasion + { + get + { + return + Mod.Current.Settings.PlanetEvasion + + this.GetAbilityValue("Combat To Hit Defense Plus").ToInt() + - this.GetAbilityValue("Combat To Hit Defense Minus").ToInt() + + (Owner == null || Owner.Culture == null ? 0 : Owner.Culture.SpaceCombat) + + Sector.GetEmpireAbilityValue(Owner, "Combat Modifier - Sector").ToInt() + + StarSystem.GetEmpireAbilityValue(Owner, "Combat Modifier - System").ToInt() + + Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); + } + } + + public Progress FacilityFill + { + get + { + var facils = 0; + if (Colony != null) + facils = Colony.Facilities.Count; + return new Progress(facils, MaxFacilities); + } + } + + /// + /// The resource income from this planet, not taking into account presence or lack of a spaceport. + /// + public ResourceQuantity GrossIncomeIgnoringSpaceport + { + get + { + if (Colony == null) + return new ResourceQuantity(); // no colony? no income! + + // TODO - solar resource generation (maybe even other resources than min/org/rad?) + + return this.StandardIncome() + this.RawResourceIncome(); + } + } + + public bool HasColony => Colony != null; + + public bool HasSpaceYard => this.HasAbility("Space Yard"); + + public int HitChance => 1; + + [DoNotSerialize] + public int Hitpoints + { + get + { + if (Colony == null) + return 0; + return Cargo.Hitpoints + Colony.Facilities.Sum(f => f.Hitpoints) + (int)AllPopulation.Sum(kvp => kvp.Value * Mod.Current.Settings.PopulationHitpoints); + } + set + { + // can't set HP of planet! + } + } + + public int HullHitpoints + { + get { return Colony == null ? 0 : (Colony.Facilities.Sum(f => f.Hitpoints) + (int)(Colony.Population.Sum(kvp => kvp.Value) * Mod.Current.Settings.PopulationHitpoints) + Cargo.HullHitpoints); } + } + + public override Image Icon + { + get + { + var icon = (Image)base.Icon.Clone(); + DrawPopulationBars(icon); + return icon; + } + } + + public int IntelligenceIncome => this.GrossIncome()[Resource.Intelligence]; + + IEnumerable IAbilityObject.IntrinsicAbilities => IntrinsicAbilities; + + public bool IsAlive => Colony != null; + + /// + /// Planets can't be destroyed in combat. + /// + public bool IsDestroyed => false; + + /// + /// Is this planet domed? Domed planets usually have less space for population, facilities, and cargo. + /// + public bool IsDomed => Colony?.Population.Any(kvp => kvp.Key.NativeAtmosphere != Atmosphere) ?? false; + + public override bool IsIdle => Colony?.ConstructionQueue?.IsIdle ?? false; + + /// + /// Planets currently cost nothing to maintain. + /// TODO - moddable unit/population/facility maintenance + /// + public ResourceQuantity MaintenanceCost => new ResourceQuantity(); + + public int MaxArmorHitpoints => Cargo?.MaxArmorHitpoints ?? 0; + + public int MaxCargo => IsDomed ? Size.MaxCargoDomed : Size.MaxCargo; + + public int MaxFacilities => IsDomed ? Size.MaxFacilitiesDomed : Size.MaxFacilities; + + public int MaxHitpoints + { + get + { + if (Colony == null) + return 0; + return Cargo.MaxHitpoints + Colony.Facilities.Sum(f => f.MaxHitpoints); + } + } + + public int MaxHullHitpoints + { + get { return Colony == null ? 0 : (Colony.Facilities.Sum(f => f.MaxHitpoints) + (int)(Colony.Population.Sum(kvp => kvp.Value) * Mod.Current.Settings.PopulationHitpoints) + Cargo.MaxHullHitpoints); } + } + + public int MaxNormalShields + { + get + { + if (Colony == null) + return 0; + var shields = MaxUnmodifiedNormalShields; + var modifiers = ShieldModifiers; + if (modifiers >= 0) + return shields; // positive modifiers go to phased shields + else + return Math.Max(0, shields + modifiers); // negative modifiers go to normal shields first + } + } + + public int MaxPhasedShields + { + get + { + if (Colony == null) + return 0; + var shields = MaxUnmodifiedPhasedShields; + var modifiers = ShieldModifiers; + if (modifiers >= 0) + return shields + modifiers; // positive modifiers go to phased shields + else + return Math.Max(0, shields + modifiers + MaxUnmodifiedNormalShields); // negative modifiers go to normal shields first + } + } + + public long MaxPopulation => IsDomed ? Size.MaxPopulationDomed : Size.MaxPopulation; + + public int MaxShieldHitpoints + { + get { return MaxNormalShields + MaxPhasedShields; } + } + + public int MaxTargets => int.MaxValue; + + public int MaxUnmodifiedNormalShields + { + get + { + if (Colony == null) + return 0; + return + Colony.Facilities.GetAbilityValue("Shield Generation", this).ToInt() + + Colony.Facilities.GetAbilityValue("Planet - Shield Generation", this).ToInt(); + } + } + + public int MaxUnmodifiedPhasedShields + { + get + { + if (Colony == null) + return 0; + return Colony.Facilities.GetAbilityValue("Phased Shield Generation", this).ToInt(); + } + } + + public double MerchantsRatio + { + get + { + var totalpop = AllPopulation.Sum(x => x.Value); + return AllPopulation.Sum(x => (double)x.Value / (double)totalpop * (x.Key.HasAbility("No Spaceports") ? 1d : 0d)); + } + } + + public int MineralsIncome => this.GrossIncome()[Resource.Minerals]; + + public double MineralsValue => ResourceValue[Resource.Minerals]; + + public int MovementRemaining { get; set; } + + public int NormalShields { get; set; } + + public IList Orders { get; private set; } + + IEnumerable IOrderable.Orders + => Orders; + + public int OrganicsIncome => this.GrossIncome()[Resource.Organics]; + + public double OrganicsValue => ResourceValue[Resource.Organics]; + + /// + /// The empire which has a colony on this planet, if any. + /// + public Empire Owner + { + get => Colony?.Owner; + set + { + if (Colony == null && value != null) + Colony = new Colony { Owner = value }; + else if (Colony != null && value == null) + { + // TODO - unowned colonies? + Colony.Dispose(); + Colony = null; + } + else if (Colony != null && value != null) + Colony.Owner = value; + } + } + + public override IEnumerable Parents + { + get + { + if (Sector != null) + yield return Sector; + if (Owner != null) + yield return Owner; + } + } + + public int PhasedShields { get; set; } + + /// + /// Expected population change for the upcoming turn due to reproduction, cloning, and plagues. + /// + public long PopulationChangePerTurn => PopulationChangePerTurnPerRace.Sum(kvp => kvp.Value); + + /// + /// Expected population change for the upcoming turn due to reproduction, cloning, and plagues. + /// + public IDictionary PopulationChangePerTurnPerRace + { + get + { + var deltapop = new Dictionary(); + + if (Colony == null) + return deltapop; + + foreach (var race in Colony.Population.Keys) + { + // TODO - plagued planets should not reproduce, and should lose population each turn + var sys = this.FindStarSystem(); + var sysModifier = sys == null ? 0 : sys.GetEmpireAbilityValue(Owner, "Modify Reproduction - System").ToInt(); + var planetModifier = this.GetAbilityValue("Modify Reproduction - Planet").ToInt(); + var moodModifier = Mod.Current.Settings.MoodReproductionModifiers[Colony.Moods[race]]; + var conditionsModifier = Mod.Current.Settings.ConditionsReproductionModifiers[Conditions]; + var reproduction = + (Mod.Current.Settings.Reproduction + (race.Aptitudes["Reproduction"] - 100) + + sysModifier + planetModifier + moodModifier + conditionsModifier) + * Mod.Current.Settings.ReproductionMultiplier + / 100d; + if (reproduction < 0) + reproduction = 0; + deltapop[race] = (long)(Colony.Population[race] * reproduction); + + // TODO - allow cloning of populations over the max of a 32 bit int? + var sysCloning = sys == null ? 0 : sys.GetEmpireAbilityValue(Owner, "Change Population - System").ToInt(); + var planetCloning = this.GetAbilityValue("Change Population - Planet").ToInt(); + deltapop[race] += (sysCloning + planetCloning) * Mod.Current.Settings.PopulationFactor / Colony.Population.Count; // split cloning across races + } + + return deltapop; + } + } + + public Progress PopulationFill + { + get + { + var pop = 0L; + if (Colony != null) + pop = Colony.Population.Sum(kvp => kvp.Value); + return new Progress(pop, MaxPopulation); + } + } + + public long PopulationStorageFree => MaxPopulation - (Colony?.Population.Sum(kvp => kvp.Value) ?? 0); + + public int RadioactivesIncome => this.GrossIncome()[Resource.Radioactives]; + + public double RadioactivesValue => ResourceValue[Resource.Radioactives]; + + public ResourceQuantity RemoteMiningIncomePercentages => Colony?.RemoteMiningIncomePercentages ?? new ResourceQuantity(); + + public int ResearchIncome => this.GrossIncome()[Resource.Research]; + + /// + /// Base resource generation, not taking into account value. + /// + public ResourceQuantity ResourceGeneration + { + get + { + if (Colony == null) + return new ResourceQuantity(); + + var sys = StarSystem; + if (sys.HasAbility("Spaceport", Owner)) + return GrossIncomeIgnoringSpaceport; + else + return GrossIncomeIgnoringSpaceport * Colony.MerchantsRatio; + } + } + + /// + /// The resource value of this planet, in %. + /// + public ResourceQuantity ResourceValue { get; set; } + + [DoNotSerialize(false)] + public override Sector Sector + { + get + { + return base.Sector; + } + set + { + base.Sector = value; + /*if (Cargo != null) + { + foreach (var v in Cargo.Units.OfType().ToArray()) + v.Sector = value; + }*/ + } + } + + public int ShieldHitpoints => NormalShields + PhasedShields; + + public int ShieldModifiers + { + get + { + return + -Sector.GetAbilityValue("Sector - Shield Disruption").ToInt() + + Sector.GetEmpireAbilityValue(Owner, "Shield Modifier - Sector").ToInt() + + StarSystem.GetEmpireAbilityValue(Owner, "Shield Modifier - System").ToInt() + + Owner.GetAbilityValue("Shield Modifier - Empire").ToInt(); + } + } + + /// + /// The PlanetSize.txt entry for this asteroid field's size. + /// + [DoNotSerialize] + public StellarObjectSize Size { get => size; set => size = value; } + + int ICombatant.Size => int.MaxValue; + + public ResourceQuantity StandardIncomePercentages => Colony?.StandardIncomePercentages ?? new ResourceQuantity(); + + /// + /// TODO - planetary engines? but how would we do engines per move? + /// + public int StrategicSpeed => 0; + + public int SupplyRemaining + { + get + { + return 0; + } + set + { + // HACK - can't throw an exception, it breaks cloning objects, so just do nothing + } + } + + /// + /// The surface composition (e.g. rock, ice, gas) of this planet. + /// + public string Surface { get; set; } + + /// + /// Planets can't currently move, but they can execute orders at the end of the turn. + /// + public double TimePerMove => 1; + + /// + /// Fractional turns until the planet has saved up another move point. + /// + public double TimeToNextMove { get; set; } + + public IEnumerable Weapons + { + get + { + if (Cargo == null) + return Enumerable.Empty(); + return Cargo.Units.OfType().SelectMany(wp => wp.Weapons).Where(x => !x.IsDestroyed); + } + } + + public WeaponTargets WeaponTargetType => WeaponTargets.Planet; + + /// + /// Used for naming. + /// + [DoNotSerialize] + internal Planet MoonOf { get; set; } + + private ModReference size { get; set; } + + public void AddOrder(IOrder order) + { + if (!(order is IOrder)) + throw new Exception("Can't add a " + order.GetType() + " to a planet's orders."); + Orders.Add((IOrder)order); + } + + public long AddPopulation(Race race, long amount) + { + // make sure planet has a colony + if (Colony == null) + return amount; // can't add population with no colony + + // put population in planetary population storage + var canPop = Math.Min(amount, PopulationStorageFree); + amount -= canPop; + Colony.Population[race] += canPop; + + // don't put population in planetary cargo storage, that's just confusing + /*var canCargo = Math.Min(amount, (long)(this.CargoStorageFree() / Mod.Current.Settings.PopulationSize)); + amount -= canCargo; + Colony.Cargo.Population[race] += canCargo;*/ + + // apply anger to population + if (!Colony.Anger.ContainsKey(race)) + Colony.Anger[race] = Mod.Current.Settings.StartPopulationAnger; + + // return leftover population + return amount; + } + + public bool AddUnit(IUnit unit) + { + if (this.CargoStorageFree() >= unit.Design.Hull.Size) + { + Colony.Cargo.Units.Add(unit); + return true; + } + return false; + } + + /// + /// Planets don't have to worry about supplies. + /// + public void BurnMovementSupplies() + { + // do nothing + } + + public bool CanTarget(ITargetable target) => Cargo?.Units.OfType().Any(wp => wp.CanTarget(target)) ?? false; + + /// + /// Deletes this planet and spawns an asteroid field with the same name, sector, size, and value as this planet. + /// If there are no appropriate asteroid field templates in the mod, simply deletes the planet. + /// + public void ConvertToAsteroidField() + { + var sector = Sector; + var size = Size; + var value = ResourceValue; + var name = Name; + + var astTemplates = Mod.Current.StellarObjectTemplates.OfType().Where(a => a.Size == size); + if (astTemplates.Any()) + { + var astTemplate = astTemplates.PickRandom(); + var ast = astTemplate.Instantiate(); + ast.Sector = Sector; + ast.ResourceValue = value; + ast.Name = name; + ast.UpdateEmpireMemories(); + } + + Dispose(); + } + + public override void Dispose() + { + if (IsDisposed) + return; + var sys = this.FindStarSystem(); + if (sys != null) + sys.Remove(this); + if (Cargo != null) + { + foreach (var u in Cargo.Units) + u.Dispose(); + } + if (Colony != null) + Colony.Dispose(); + Galaxy.Current.UnassignID(this); + if (!IsMemory) + this.UpdateEmpireMemories(); + IsDisposed = true; + } + + /// + /// Draws "population bars" on an image of the planet. + /// Make sure not to draw on an original; make a copy first! + /// + /// + public void DrawPopulationBars(Image img, int? expectedSize = null) + { + if (Colony != null) + { + // draw population bar + var g = Graphics.FromImage(img); + double scaleFactor = 1; + if (expectedSize != null) + scaleFactor = (double)expectedSize / Math.Max(img.Width, img.Height); + var rect = new Rectangle((int)(img.Width - 21 / scaleFactor), (int)(1 / scaleFactor), (int)(20 / scaleFactor), (int)(8 / scaleFactor)); + var pen = new Pen(Colony.Owner.Color, 1 / (float)scaleFactor); + g.FillRectangle(Brushes.Black, rect); + g.DrawRectangle(pen, rect); + var brush = new SolidBrush(Colony.Owner.Color); + var pop = Colony.Population.Sum(kvp => kvp.Value); + rect.Width = (int)(5 / scaleFactor); + rect.X += (int)(1 /scaleFactor); + rect.Y += (int)(2 / scaleFactor); + rect.Height -= (int)(3 / scaleFactor); + rect.X += (int)(1 / scaleFactor); + if (pop > 0) + g.FillRectangle(brush, rect); + rect.X += (int)(6 /scaleFactor); + if (pop > MaxPopulation / 3) + g.FillRectangle(brush, rect); + rect.X += (int)(6 / scaleFactor); + if (pop > MaxPopulation * 2 / 3) + g.FillRectangle(brush, rect); + } + } + + /// + /// Draws this planet's status icons on a picture. + /// If the planet has special abilities (such as ruins), a ruins icon will be drawn. + /// If the planet is uncolonized but colonizable with the current empire's technology, a colonizability circle will also be drawn: + /// * Green for planets that and breathable by the current empire's primary race. + /// * Yellow for planets that and breathable by any subjugated population. + /// * Red for other colonizable planets. + /// + /// + public void DrawStatusIcons(Image pic) + { + var g = Graphics.FromImage(pic); + var sizeFactor = 1f / 4f; + var leftovers = 1f - sizeFactor; + if (IntrinsicAbilities.Any()) + { + // draw ruins icon + var path = Path.Combine("Pictures", "UI", "Map", "ruins"); + var img = Pictures.GetModImage(path); + if (img == null) + throw new FileNotFoundException("Could not load ruins icon: " + Path.GetFullPath(path) + "."); + g.DrawImage(img, 0, 0, pic.Width * sizeFactor, pic.Height * sizeFactor); + } + if (Colony == null && Empire.Current != null && Empire.Current.UnlockedItems.OfType().Where(c => c.HasAbility(ColonizationAbilityName)).Any()) + { + Brush brush; + if (Atmosphere == Empire.Current.PrimaryRace.NativeAtmosphere) + brush = Brushes.Green; + else if ( + Empire.Current.ColonizedPlanets.Any(p => p.Colony.Population.Any(kvp => kvp.Key.NativeAtmosphere == Atmosphere)) || + Empire.Current.OwnedSpaceObjects.OfType().Any(cc => cc.Cargo.Population.Any(kvp => kvp.Key.NativeAtmosphere == Atmosphere)) + ) + brush = Brushes.Yellow; + else + brush = Brushes.Red; + g.DrawEllipse(new Pen(brush), pic.Width * leftovers - 1, 0, pic.Width * sizeFactor, pic.Height * sizeFactor); + g.FillEllipse(brush, pic.Width * (leftovers + sizeFactor / 4f) - 1, pic.Width * sizeFactor / 4f, pic.Width * sizeFactor / 2f, pic.Height * sizeFactor / 2f); + } + } + + public bool ExecuteOrders() => this.ExecuteMobileSpaceObjectOrders(); + + /// + /// Just copy the planet's data. + /// + /// A copy of the planet. + public Planet Instantiate() + { + var result = this.CopyAndAssignNewID(); + result.ModID = null; + return result; + } + + public override bool IsHostileTo(Empire emp) => Owner?.IsEnemyOf(emp, StarSystem) ?? false; + + /*/// + /// The planet's gross income, taking into presence presence or lack of a spaceport. + /// + public override ResourceQuantity GrossIncome + { + get + { + if (Colony == null) + return new ResourceQuantity(); + + var sys = StarSystem; + if (sys.HasAbility("Spaceport", Owner)) + return GrossIncomeIgnoringSpaceport; + else + return GrossIncomeIgnoringSpaceport * Colony.MerchantsRatio; + } + }*/ + + public void RearrangeOrder(IOrder order, int delta) + { + if (!(order is IOrder)) + throw new Exception("Can't rearrange a " + order.GetType() + " in a planet's orders."); + var o = (IOrder)order; + var newpos = Orders.IndexOf(o) + delta; + if (newpos < 0) + newpos = 0; + Orders.Remove(o); + if (newpos >= Orders.Count) + Orders.Add(o); + else + Orders.Insert(newpos, o); + } + + public override void Redact(Empire emp) + { + base.Redact(emp); + + var vis = CheckVisibility(emp); + + MoonOf = null; // in case we allow moons to have different visibility than their parent planets + + if (Colony != null && Colony.CheckVisibility(emp) < Visibility.Fogged) + Colony = null; + + if (vis < Visibility.Owned) + { + // TODO - espionage? + Orders.Clear(); + AreOrdersOnHold = false; + AreRepeatOrdersEnabled = false; + } + } + + public void RemoveOrder(IOrder order) + { + if (order != null && !(order is IOrder)) + return; // order can't exist here anyway + Orders.Remove((IOrder)order); + } + + public long RemovePopulation(Race race, long amount) + { + if (Colony == null) + return amount; // can't remove population with no colony + var canCargo = Math.Min(amount, Colony.Cargo.Population[race]); + amount -= canCargo; + Colony.Cargo.Population[race] -= canCargo; + var canPop = Math.Min(amount, Colony.Population[race]); + amount -= canPop; + Colony.Population[race] -= canPop; + return amount; + } + + public bool RemoveUnit(IUnit unit) + { + if (Colony.Cargo.Units.Contains(unit)) + { + Colony.Cargo.Units.Remove(unit); + return true; + } + return false; + } + + /// + /// Passes repair on to cargo. + /// + /// + /// + public int? Repair(int? amount = null) + { + if (Cargo != null) + { + return Cargo.Repair(amount); + } + + // nothing to repair + if (amount == null) + return amount; + return amount.Value; + } + + public void ReplenishShields(int? amount = null) + { + if (amount == null) + { + NormalShields = MaxNormalShields; + PhasedShields = MaxPhasedShields; + } + else + { + PhasedShields += amount.Value; + if (PhasedShields > MaxPhasedShields) + { + var overflow = PhasedShields - MaxPhasedShields; + PhasedShields = MaxPhasedShields; + NormalShields += overflow; + if (NormalShields > MaxNormalShields) + NormalShields = MaxNormalShields; + } + } + } + + /// + /// When a planet spends time, all its space units in cargo spend time too. + /// TODO - It should also perform construction here... + /// + /// + public void SpendTime(double timeElapsed) + { + TimeToNextMove += timeElapsed; + if (Cargo != null) + { + foreach (var u in Cargo.Units.OfType()) + u.SpendTime(timeElapsed); + } + } + + public int TakeDamage(Hit hit, PRNG dice = null) + { + var damage = hit.NominalDamage; + + if (Colony == null) + return damage; // uninhabited planets can't take damage + + // let shields mitigate incoming damage + damage = this.TakeShieldDamage(hit, damage, dice); + + // TODO - to-hit chances not just based on HP? + // TODO - per-race population HP? + var popHP = (int)Math.Ceiling(Colony.Population.Sum(kvp => kvp.Value) * Mod.Current.Settings.PopulationHitpoints); + var cargoHP = Colony.Cargo.MaxHitpoints; + var facilHP = Colony.Facilities.Sum(f => f.MaxHitpoints); + var order = new int[] { 0, 1, 2 }.Shuffle(dice); + foreach (var num in order) + { + if (num == 0) + damage = TakePopulationDamage(hit, dice); + else if (num == 1) + damage = Cargo.TakeDamage(hit, dice); + else if (num == 2) + damage = TakeFacilityDamage(hit, dice); + hit = new Hit(hit.Shot, this, damage); + if (hit.NominalDamage <= 0) + break; + } + + // if planet was completely glassed, remove the colony + if (!Colony.Population.Any(p => p.Value > 0) && !Cargo.Units.Any() && !Cargo.Population.Any(p => p.Value > 0) && !Colony.Facilities.Any()) + { + if (Colony.IsHomeworld) + Colony.Owner.TriggerHappinessChange(hm => hm.OurHomeworldLost); + Colony.Owner.TriggerHappinessChange(hm => hm.OurPlanetLost); + Colony.Dispose(); + } + + // update memory sight + if (!IsMemory) + this.UpdateEmpireMemories(); + + return damage; + } + + public void TakePopulationDamage(int popFactorsKilled, PRNG dice = null) + { + if (Colony == null) + return; + long popKilled = popFactorsKilled * Mod.Current.Settings.PopulationFactor; + long totalPop = Colony.Population.Sum(kvp => kvp.Value); + long dead = 0; + foreach (var race in Colony.Population.Keys) + { + long ourDead = popKilled / totalPop; + Colony.Population[race] -= ourDead; + dead += ourDead; + } + for (long i = 0; i < popKilled - dead; i++) + { + // leftover deaths get allocated randomly + var race = Colony.Population.PickWeighted(dice); + Colony.Population[race]--; + } + } + + private int TakeFacilityDamage(Hit hit, PRNG dice = null) + { + if (Colony == null) + return hit.NominalDamage; + int damage = hit.NominalDamage; + // TODO - take into account damage types, and make sure we have facilities that are not immune to the damage type so we don't get stuck in an infinite loop + while (damage > 0 && Colony.Facilities.Any()) + { + var facil = Colony.Facilities.Where(f => + { + // skip facilities that are completely pierced by this hit + var hit2 = new Hit(hit.Shot, f, damage); + return hit2.Shot.DamageType.ComponentPiercing.Evaluate(hit2) < 100; + }).ToDictionary(f => f, f => f.HitChance).PickWeighted(dice); + if (facil == null) + break; // no more facilities to hit + var facilhit = new Hit(hit.Shot, facil, damage); + damage = facil.TakeDamage(facilhit, dice); + } + return damage; + } + + private int TakePopulationDamage(Hit hit, PRNG dice = null) + { + if (Colony == null) + return hit.NominalDamage; + int damage = hit.NominalDamage; + int inflicted = 0; + long totalPopKilled = 0; + for (int i = 0; i < damage; i++) + { + // pick a race and kill some population + var race = Colony.Population.PickWeighted(dice); + if (race == null) + break; // no more population + double popHPPerPerson = Mod.Current.Settings.PopulationHitpoints; + // TODO - don't ceiling the popKilled, just stack it up + int popKilled = (int)Math.Ceiling(hit.Shot.DamageType.PopulationDamage.Evaluate(hit.Shot) / 100 / popHPPerPerson); + totalPopKilled += popKilled; + Colony.Population[race] -= popKilled; + if (Colony.Population[race] < 0) + Colony.Population[race] = 0; + inflicted += 1; + } + Colony.TriggerHappinessChange(hm => (int)(hm.OneMillionPopulationKilled * totalPopKilled / 1_000_000)); + // clear population that was emptied out + foreach (var race in Colony.Population.Where(kvp => kvp.Value <= 0).Select(kvp => kvp.Key).ToArray()) + Colony.Population.Remove(race); + return damage - inflicted; + } + + public Progress AngerProgress => new Progress(Colony?.AverageAnger ?? 0, Mod.Current.Settings.MaxAnger); + + public IEnumerable Components => Cargo.Units.OfType().SelectMany(q => q.Components); + + public bool FillsCombatTile => true; + } +} diff --git a/FrEee/Game/Objects/Space/Sector.cs b/FrEee/Objects/Space/Sector.cs similarity index 93% rename from FrEee/Game/Objects/Space/Sector.cs rename to FrEee/Objects/Space/Sector.cs index 9ce854711..171d8d74b 100644 --- a/FrEee/Game/Objects/Space/Sector.cs +++ b/FrEee/Objects/Space/Sector.cs @@ -1,347 +1,347 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Text.RegularExpressions; - -namespace FrEee.Game.Objects.Space -{ - /// - /// A sector in a star system. - /// - [Serializable] - public class Sector : IPromotable, ICargoContainer, ICommonAbilityObject, IOwnable - { - public Sector(StarSystem starSystem, Point coordinates) - { - StarSystem = starSystem; - Coordinates = coordinates; - } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.Sector; } - } - - /// - /// Sectors don't contain population. (They kind of die in space...) - /// - public IDictionary AllPopulation - { - get { return new Dictionary(); } - } - - public IEnumerable AllUnits - { - get { return StarSystem.SpaceObjectLocations.Where(l => l.Location == Coordinates).Select(l => l.Item).OfType().ToList(); } - } - - public Cargo Cargo - { - get - { - // TODO - implement sector cargo once we have unit groups - return new Cargo(); - } - } - - /// - /// Sectors can contain practically infinite cargo. - /// - public int CargoStorage - { - get { return int.MaxValue; } - } - - public IEnumerable Children - { - get { return SpaceObjects; } - } - - public Point Coordinates { get; set; } - - public Image Icon - { - get - { - return SpaceObjects.Largest()?.Icon ?? StarSystem?.Icon; - } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return SpaceObjects.Largest()?.IconPaths ?? StarSystem?.IconPaths; - } - } - - public IEnumerable IntrinsicAbilities - { - get { yield break; } - } - - public bool IsContested - { - get - { - return SpaceObjects.Select(sobj => sobj.Owner).Distinct().ExceptSingle((Empire)null).Count() > 1; - } - } - - public string Name - { - get - { - if (StarSystem == null) - return "(Unexplored)"; - return StarSystem + " (" + Coordinates.X + ", " + Coordinates.Y + ")"; - } - } - - public Empire Owner - { - get - { - var owned = SpaceObjects.Where(sobj => sobj.Owner != null); - if (!owned.Any()) - return null; - return owned.Largest().Owner; - } - } - - public IEnumerable Parents - { - get - { - yield return StarSystem; - } - } - - public long PopulationStorageFree - { - get { return 0; } - } - - public Image Portrait - { - get - { - return SpaceObjects.Largest()?.Portrait ?? StarSystem?.Portrait; - } - } - - public IEnumerable PortraitPaths - { - get - { - return SpaceObjects.Largest()?.PortraitPaths ?? StarSystem?.PortraitPaths; - } - } - - [DoNotSerialize(false)] - Sector ILocated.Sector - { - get { return this; } - set { throw new NotSupportedException("Cannot set the sector of a sector."); } - } - - public IEnumerable SpaceObjects - { - get - { - if (StarSystem == null) - return Enumerable.Empty(); - var result = StarSystem.SpaceObjectLocations.Where(l => l.Location == Coordinates).Select(l => l.Item).ExceptSingle(null).Where(sobj => !(sobj is IContainable) || ((IContainable)sobj).Container == null); - - // on the server we don't want to count memories as physical space objects - if (Empire.Current == null) - result = result.Where(x => !x.IsMemory); - - return result.ToArray(); - } - } - - [DoNotSerialize] - public StarSystem StarSystem { get { return starSystem; } set { starSystem = value; } } - - private GalaxyReference starSystem { get; set; } - - public static bool operator !=(Sector s1, Sector s2) - { - return !(s1 == s2); - } - - public static bool operator ==(Sector s1, Sector s2) - { - if (s1.IsNull() && s2.IsNull()) - return true; - if (s1.IsNull() || s2.IsNull()) - return false; - return s1.starSystem == s2.starSystem && s1.Coordinates == s2.Coordinates; - } - - public long AddPopulation(Race race, long amount) - { - // population jettisoned into space just disappears without a trace... - return 0; - } - - public bool AddUnit(IUnit unit) - { - // can't place a unit that can't move about in space, in space! - if (!(unit is IMobileSpaceObject)) - return false; - - // TODO - limit number of units in space per empire as specified in Settings.txt - - // place this unit in a fleet with other similar units - var fleet = this.SpaceObjects.OfType().SelectMany(f => f.SubfleetsWithNonFleetChildren()).Where( - f => f.Vehicles.OfType().Where(u => u.Design == unit.Design).Any()).FirstOrDefault(); - var v = (IMobileSpaceObject)unit; - if (fleet == null) - { - // create a new fleet, there's no fleet with similar units - fleet = new Fleet(); - fleet.Name = unit.Design.Name + " Group"; - Place(fleet); - } - Place(v); - fleet.Vehicles.Add(v); - return true; - } - - public Visibility CheckVisibility(Empire emp) - { - throw new NotImplementedException(); - } - - public override bool Equals(object obj) - { - // TODO - upgrade equals to use "as" operator - if (obj is Sector) - return this == (Sector)obj; - return false; - } - - public IEnumerable GetContainedAbilityObjects(Empire emp) - { - return SpaceObjects.Where(sobj => sobj?.Owner == emp).OfType(); - } - - public override int GetHashCode() - { - return HashCodeMasher.Mash(starSystem, Coordinates); - } - - /// - /// Has this sector's star system been explored by an empire? - /// - /// - /// - public bool IsExploredBy(Empire emp) - { - if (StarSystem == null) - return false; - return StarSystem.ExploredByEmpires.Contains(emp); - } - - public void Place(ISpaceObject sobj, bool removeFromFleet = true) - { - if (removeFromFleet) - { - // remove from fleet - if (sobj is IMobileSpaceObject) - { - var v = (IMobileSpaceObject)sobj; - if (v.Container != null) - v.Container.Vehicles.Remove(v); - } - } - - // remove from cargo - if (sobj is IUnit) - { - var u = (IUnit)sobj; - u.Container?.RemoveUnit(u); - } - - // place in space if it's actually in space - if (StarSystem != null) - StarSystem.Place(sobj, Coordinates); - } - - public void Remove(ISpaceObject sobj) - { - // remove from fleet if necessary - if (sobj is IMobileSpaceObject v) - { - if (v.Container != null) - v.Container.Vehicles.Remove(v); - } - - // remove from cargo - if (sobj is IUnit) - { - var u = (IUnit)sobj; - if (!u.Container.Equals(this)) - u.Container.RemoveUnit(u); - } - - if (SpaceObjects.Contains(sobj)) - StarSystem.Remove(sobj); - } - - public long RemovePopulation(Race race, long amount) - { - // population cannot be recovered from space! - return amount; - } - - public bool RemoveUnit(IUnit unit) - { - if (unit is IMobileSpaceObject) - { - Remove((IMobileSpaceObject)unit); - } - return false; - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - starSystem.ReplaceClientIDs(idmap, done); - } - } - - public override string ToString() - { - var largestObject = SpaceObjects.Largest(); - - // If sector doesn't have space objects, or the star system is unexplored, early return just the sector name - if (largestObject == null || StarSystem == null) - return Name; - - // From here on, largestObject and StarSystem are defined - - // Don't display the star system name, if the space object's name contains it, to avoid repetition - bool objectNameContainsStarName = Regex.IsMatch(largestObject.Name, string.Format(@"\b{0}\b", Regex.Escape(StarSystem.Name ?? "(unexplored)"))); - if (objectNameContainsStarName) - return largestObject + " (" + Coordinates.X + ", " + Coordinates.Y + ")"; - else - return largestObject + " at " + Name; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text.RegularExpressions; + +namespace FrEee.Objects.Space +{ + /// + /// A sector in a star system. + /// + [Serializable] + public class Sector : IPromotable, ICargoContainer, ICommonAbilityObject, IOwnable + { + public Sector(StarSystem starSystem, Point coordinates) + { + StarSystem = starSystem; + Coordinates = coordinates; + } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.Sector; } + } + + /// + /// Sectors don't contain population. (They kind of die in space...) + /// + public IDictionary AllPopulation + { + get { return new Dictionary(); } + } + + public IEnumerable AllUnits + { + get { return StarSystem.SpaceObjectLocations.Where(l => l.Location == Coordinates).Select(l => l.Item).OfType().ToList(); } + } + + public Cargo Cargo + { + get + { + // TODO - implement sector cargo once we have unit groups + return new Cargo(); + } + } + + /// + /// Sectors can contain practically infinite cargo. + /// + public int CargoStorage + { + get { return int.MaxValue; } + } + + public IEnumerable Children + { + get { return SpaceObjects; } + } + + public Point Coordinates { get; set; } + + public Image Icon + { + get + { + return SpaceObjects.Largest()?.Icon ?? StarSystem?.Icon; + } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return SpaceObjects.Largest()?.IconPaths ?? StarSystem?.IconPaths; + } + } + + public IEnumerable IntrinsicAbilities + { + get { yield break; } + } + + public bool IsContested + { + get + { + return SpaceObjects.Select(sobj => sobj.Owner).Distinct().ExceptSingle((Empire)null).Count() > 1; + } + } + + public string Name + { + get + { + if (StarSystem == null) + return "(Unexplored)"; + return StarSystem + " (" + Coordinates.X + ", " + Coordinates.Y + ")"; + } + } + + public Empire Owner + { + get + { + var owned = SpaceObjects.Where(sobj => sobj.Owner != null); + if (!owned.Any()) + return null; + return owned.Largest().Owner; + } + } + + public IEnumerable Parents + { + get + { + yield return StarSystem; + } + } + + public long PopulationStorageFree + { + get { return 0; } + } + + public Image Portrait + { + get + { + return SpaceObjects.Largest()?.Portrait ?? StarSystem?.Portrait; + } + } + + public IEnumerable PortraitPaths + { + get + { + return SpaceObjects.Largest()?.PortraitPaths ?? StarSystem?.PortraitPaths; + } + } + + [DoNotSerialize(false)] + Sector ILocated.Sector + { + get { return this; } + set { throw new NotSupportedException("Cannot set the sector of a sector."); } + } + + public IEnumerable SpaceObjects + { + get + { + if (StarSystem == null) + return Enumerable.Empty(); + var result = StarSystem.SpaceObjectLocations.Where(l => l.Location == Coordinates).Select(l => l.Item).ExceptSingle(null).Where(sobj => !(sobj is IContainable) || ((IContainable)sobj).Container == null); + + // on the server we don't want to count memories as physical space objects + if (Empire.Current == null) + result = result.Where(x => !x.IsMemory); + + return result.ToArray(); + } + } + + [DoNotSerialize] + public StarSystem StarSystem { get { return starSystem; } set { starSystem = value; } } + + private GalaxyReference starSystem { get; set; } + + public static bool operator !=(Sector s1, Sector s2) + { + return !(s1 == s2); + } + + public static bool operator ==(Sector s1, Sector s2) + { + if (s1.IsNull() && s2.IsNull()) + return true; + if (s1.IsNull() || s2.IsNull()) + return false; + return s1.starSystem == s2.starSystem && s1.Coordinates == s2.Coordinates; + } + + public long AddPopulation(Race race, long amount) + { + // population jettisoned into space just disappears without a trace... + return 0; + } + + public bool AddUnit(IUnit unit) + { + // can't place a unit that can't move about in space, in space! + if (!(unit is IMobileSpaceObject)) + return false; + + // TODO - limit number of units in space per empire as specified in Settings.txt + + // place this unit in a fleet with other similar units + var fleet = this.SpaceObjects.OfType().SelectMany(f => f.SubfleetsWithNonFleetChildren()).Where( + f => f.Vehicles.OfType().Where(u => u.Design == unit.Design).Any()).FirstOrDefault(); + var v = (IMobileSpaceObject)unit; + if (fleet == null) + { + // create a new fleet, there's no fleet with similar units + fleet = new Fleet(); + fleet.Name = unit.Design.Name + " Group"; + Place(fleet); + } + Place(v); + fleet.Vehicles.Add(v); + return true; + } + + public Visibility CheckVisibility(Empire emp) + { + throw new NotImplementedException(); + } + + public override bool Equals(object obj) + { + // TODO - upgrade equals to use "as" operator + if (obj is Sector) + return this == (Sector)obj; + return false; + } + + public IEnumerable GetContainedAbilityObjects(Empire emp) + { + return SpaceObjects.Where(sobj => sobj?.Owner == emp).OfType(); + } + + public override int GetHashCode() + { + return HashCodeMasher.Mash(starSystem, Coordinates); + } + + /// + /// Has this sector's star system been explored by an empire? + /// + /// + /// + public bool IsExploredBy(Empire emp) + { + if (StarSystem == null) + return false; + return StarSystem.ExploredByEmpires.Contains(emp); + } + + public void Place(ISpaceObject sobj, bool removeFromFleet = true) + { + if (removeFromFleet) + { + // remove from fleet + if (sobj is IMobileSpaceObject) + { + var v = (IMobileSpaceObject)sobj; + if (v.Container != null) + v.Container.Vehicles.Remove(v); + } + } + + // remove from cargo + if (sobj is IUnit) + { + var u = (IUnit)sobj; + u.Container?.RemoveUnit(u); + } + + // place in space if it's actually in space + if (StarSystem != null) + StarSystem.Place(sobj, Coordinates); + } + + public void Remove(ISpaceObject sobj) + { + // remove from fleet if necessary + if (sobj is IMobileSpaceObject v) + { + if (v.Container != null) + v.Container.Vehicles.Remove(v); + } + + // remove from cargo + if (sobj is IUnit) + { + var u = (IUnit)sobj; + if (!u.Container.Equals(this)) + u.Container.RemoveUnit(u); + } + + if (SpaceObjects.Contains(sobj)) + StarSystem.Remove(sobj); + } + + public long RemovePopulation(Race race, long amount) + { + // population cannot be recovered from space! + return amount; + } + + public bool RemoveUnit(IUnit unit) + { + if (unit is IMobileSpaceObject) + { + Remove((IMobileSpaceObject)unit); + } + return false; + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + starSystem.ReplaceClientIDs(idmap, done); + } + } + + public override string ToString() + { + var largestObject = SpaceObjects.Largest(); + + // If sector doesn't have space objects, or the star system is unexplored, early return just the sector name + if (largestObject == null || StarSystem == null) + return Name; + + // From here on, largestObject and StarSystem are defined + + // Don't display the star system name, if the space object's name contains it, to avoid repetition + bool objectNameContainsStarName = Regex.IsMatch(largestObject.Name, string.Format(@"\b{0}\b", Regex.Escape(StarSystem.Name ?? "(unexplored)"))); + if (objectNameContainsStarName) + return largestObject + " (" + Coordinates.X + ", " + Coordinates.Y + ")"; + else + return largestObject + " at " + Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Space/Star.cs b/FrEee/Objects/Space/Star.cs similarity index 88% rename from FrEee/Game/Objects/Space/Star.cs rename to FrEee/Objects/Space/Star.cs index 7e140ca1d..7dc19753d 100644 --- a/FrEee/Game/Objects/Space/Star.cs +++ b/FrEee/Objects/Space/Star.cs @@ -1,98 +1,98 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Objects.Space -{ - /// - /// A star. Normally found at the center of a star system. - /// - [Serializable] - public class Star : StellarObject, ITemplate, IDataObject - { - // TODO - do stars in SE4 have a size property? - - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.Star; } - } - - /// - /// The age of this star. (For flavor) - /// - public string Age { get; set; } - - /// - /// The brightness of this star. (For flavor) - /// - public string Brightness { get; set; } - - public override bool CanBeObscured => false; - - /// - /// The color of this star. (For flavor) - /// - public string Color { get; set; } - - public override SafeDictionary Data - { - get - { - var dict = base.Data; - dict[nameof(Brightness)] = Brightness; - dict[nameof(Color)] = Color; - dict[nameof(Age)] = Age; - dict[nameof(IsDestroyed)] = IsDestroyed; - return dict; - } - set - { - base.Data = value; - Brightness = value[nameof(Brightness)].Default(); - Color = value[nameof(Color)].Default(); - Age = value[nameof(Age)].Default(); - IsDestroyed = value[nameof(IsDestroyed)].Default(); - } - } - - /// - /// Is this a destroyed star? - /// TODO - make sure destroyed stars don't provide supplies or resources from solar generation - /// - public bool IsDestroyed { get; set; } - - public Empire Owner - { - get - { - return null; - } - } - - /// - /// Detonates this star. All space vehicles in the system will be destroyed and all planets will be converted to asteroid fields. - /// - public void Detonate() - { - foreach (var p in StarSystem.FindSpaceObjects()) - p.ConvertToAsteroidField(); - foreach (var v in StarSystem.FindSpaceObjects()) - v.Dispose(); - Dispose(); - } - - /// - /// Just copy the star's data. - /// - /// A copy of the star. - public Star Instantiate() - { - var result = this.CopyAndAssignNewID(); - result.ModID = null; - return result; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; + +namespace FrEee.Objects.Space +{ + /// + /// A star. Normally found at the center of a star system. + /// + [Serializable] + public class Star : StellarObject, ITemplate, IDataObject + { + // TODO - do stars in SE4 have a size property? + + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.Star; } + } + + /// + /// The age of this star. (For flavor) + /// + public string Age { get; set; } + + /// + /// The brightness of this star. (For flavor) + /// + public string Brightness { get; set; } + + public override bool CanBeObscured => false; + + /// + /// The color of this star. (For flavor) + /// + public string Color { get; set; } + + public override SafeDictionary Data + { + get + { + var dict = base.Data; + dict[nameof(Brightness)] = Brightness; + dict[nameof(Color)] = Color; + dict[nameof(Age)] = Age; + dict[nameof(IsDestroyed)] = IsDestroyed; + return dict; + } + set + { + base.Data = value; + Brightness = value[nameof(Brightness)].Default(); + Color = value[nameof(Color)].Default(); + Age = value[nameof(Age)].Default(); + IsDestroyed = value[nameof(IsDestroyed)].Default(); + } + } + + /// + /// Is this a destroyed star? + /// TODO - make sure destroyed stars don't provide supplies or resources from solar generation + /// + public bool IsDestroyed { get; set; } + + public Empire Owner + { + get + { + return null; + } + } + + /// + /// Detonates this star. All space vehicles in the system will be destroyed and all planets will be converted to asteroid fields. + /// + public void Detonate() + { + foreach (var p in StarSystem.FindSpaceObjects()) + p.ConvertToAsteroidField(); + foreach (var v in StarSystem.FindSpaceObjects()) + v.Dispose(); + Dispose(); + } + + /// + /// Just copy the star's data. + /// + /// A copy of the star. + public Star Instantiate() + { + var result = this.CopyAndAssignNewID(); + result.ModID = null; + return result; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Space/StarSystem.cs b/FrEee/Objects/Space/StarSystem.cs similarity index 94% rename from FrEee/Game/Objects/Space/StarSystem.cs rename to FrEee/Objects/Space/StarSystem.cs index 4db84221e..63d207d59 100644 --- a/FrEee/Game/Objects/Space/StarSystem.cs +++ b/FrEee/Objects/Space/StarSystem.cs @@ -1,410 +1,410 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Reflection; -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Modding; -using FrEee.Modding.Templates; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Space -{ - /// - /// A star system containing a grid of sectors. - /// Is always square and always has an odd number of sectors across. - /// - [Serializable] - public class StarSystem : IReferrable, IPictorial, IFoggable, ICommonAbilityObject, IAbilityContainer - { - /// - /// Creates a star system. - /// - /// The number of sectors counting outward from the center to the edge. - public StarSystem(int radius) - { - Radius = radius; - Abilities = new List(); - SpaceObjectLocations = new HashSet>(); - ExploredByEmpires = new HashSet(); - } - - /// - /// Any special abilities possessed by this star system. - /// - public IList Abilities { get; private set; } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.StarSystem; } - } - - public Image BackgroundImage - { - get - { - if (BackgroundImagePath == null) - return null; - return Pictures.GetModImage( - Path.Combine("Pictures", "Systems", "1024x768", BackgroundImagePath), - Path.Combine("Pictures", "Systems", "800x600", BackgroundImagePath), - Path.Combine("Pictures", "Systems", BackgroundImagePath) - ); - } - } - - /// - /// The path to the background image, relative to Pictures/Systems. - /// - public string BackgroundImagePath { get; set; } - - public IEnumerable Children - { - get - { - foreach (var l in SpaceObjectLocations) - yield return l.Item; - } - } - - public Point Coordinates - { - get - { - return Location.Location; - } - } - - /// - /// The description of this star system. - /// - public string Description { get; set; } - - /// - /// The number of sectors across the star system. - /// - public int Diameter - { - get { return Math.Max(0, Radius * 2 + 1); } - } - - /// - /// If true, empire homeworlds can be located in this system. - /// - public bool EmpiresCanStartIn { get; set; } - - /// - /// Empires which have explored this star system. - /// - public ICollection ExploredByEmpires { get; private set; } - - public Image Icon - { - get { return BackgroundImage; } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return PortraitPaths; - } - } - - public long ID - { - get; - set; - } - - public IEnumerable IntrinsicAbilities - { - get { return Abilities; } - } - - public bool IsDisposed { get; set; } - - public bool IsMemory - { - get; - set; - } - - public ObjectLocation Location - { - get - { - try - { - return Galaxy.Current.StarSystemLocations.Single(l => l.Item == this); - } - catch (InvalidOperationException ex) - { - throw new InvalidOperationException(this + " does not appear to be located anywhere on the galaxy map, or it has multiple locations.", ex); - } - } - } - - /// - /// The name of this star system. - /// - public string Name { get; set; } - - /// - /// If true, the background image for this system will be centered, not tiled, in combat. - /// - public bool NonTiledCenterCombatImage { get; set; } - - /// - /// Star systems are not owned, per se. - /// - public Empire Owner - { - get { return null; } - } - - public IEnumerable Parents - { - get - { - yield return Galaxy.Current; - } - } - - public Image Portrait - { - get { return BackgroundImage; } - } - - public IEnumerable PortraitPaths - { - get - { - yield return Path.Combine("Systems", BackgroundImagePath); - } - } - - /// - /// The number of sectors counting outward from the center to the edge. - /// - public int Radius { get; private set; } - - public IEnumerable Sectors - { - get - { - for (var x = -Radius; x <= Radius; x++) - { - for (var y = -Radius; y <= Radius; y++) - { - yield return new Sector(this, new Point(x, y)); - } - } - } - } - - /// - /// The space objects contained in this star system. - /// - public ICollection> SpaceObjectLocations { get; private set; } - - public IEnumerable SpaceObjects { get { return FindSpaceObjects(); } } - - public double Timestamp { get; set; } - - /// - /// Abilities for random warp points that appear in this system. - /// - [DoNotSerialize] - public RandomAbilityTemplate WarpPointAbilities { get { return warpPointAbilities; } set { warpPointAbilities = value; } } - - private ModReference warpPointAbilities { get; set; } - - public bool AreCoordsInBounds(int x, int y) - { - return x >= -Radius && x <= Radius && y >= -Radius && y <= Radius; - } - - public bool AreCoordsInBounds(Point p) - { - return AreCoordsInBounds(p.X, p.Y); - } - - public Visibility CheckVisibility(Empire emp) - { - if (FindSpaceObjects(sobj => sobj.Owner == emp && !sobj.IsMemory).Any()) - return Visibility.Visible; - else if (emp.ExploredStarSystems.Contains(this)) - return Visibility.Fogged; - return Visibility.Unknown; - } - - public bool Contains(ISpaceObject sobj) - { - return SpaceObjectLocations.Any(l => l.Item == sobj); - } - - public void Dispose() - { - if (IsDisposed) - return; - if (IsDisposed) - return; - Galaxy.Current.UnassignID(this); - if (!IsMemory) - this.UpdateEmpireMemories(); - } - - /// - /// Do any of the empire's space objects in a sector have an ability? - /// - /// - /// - /// - /// - /// - public bool DoesSectorHaveAbility(Point coords, Empire emp, string name, int index = 1, Func filter = null) - { - var sobjs = FindSpaceObjects().Where(o => o.Owner == emp && o.FindCoordinates() == coords); - return sobjs.SelectMany(o => o.UnstackedAbilities(true)).Where(a => a.Rule.Matches(name) && (filter == null || filter(a))).Any(); - } - - public Point FindCoordinates(ISpaceObject sobj) - { - try - { - return SpaceObjectLocations.Single(l => l.Item == sobj).Location; - } - catch (Exception ex) - { - throw new Exception("Can't find coordinates of " + sobj + " in " + this + ".", ex); - } - } - - /// - /// Searches for space objects matching criteria. - /// - /// The type of space object. - /// The criteria. - /// The matching space objects. - public IEnumerable FindSpaceObjects(Func criteria = null) - { - return SpaceObjectLocations.Select(l => l.Item).OfType().Where(l => criteria == null || criteria(l)); - } - - public IEnumerable GetContainedAbilityObjects(Empire emp) - { - return SpaceObjectLocations.Select(l => l.Item).Where(sobj => sobj?.Owner == emp).OfType(); - } - - public Sector GetSector(int x, int y) - { - return GetSector(new Point(x, y)); - } - - public Sector GetSector(Point p) - { - if (!AreCoordsInBounds(p)) - throw new Exception("Sector coordinates (" + p.X + ", " + p.Y + ") are out of bounds for star system of radius " + Radius + "."); - return new Sector(this, p); - } - - /// - /// Do any of the empire's space objects in this system have an ability? - /// - /// - /// - /// - /// - /// - public bool HasAbility(Empire emp, string name, int index = 1, Func filter = null) - { - return FindSpaceObjects(o => o.Owner == emp).SelectMany(o => o.UnstackedAbilities(true)).Where(a => a.Rule.Matches(name) && (filter == null || filter(a))).Any(); - } - - public bool IsObsoleteMemory(Empire emp) - { - return CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; - } - - public Sector PickRandomSector(PRNG prng = null) - { - return new Sector(this, new Point(RandomHelper.Range(-Radius, Radius, prng), RandomHelper.Range(-Radius, Radius, prng))); - } - - public void Place(ISpaceObject sobj, Point coords) - { - var sys = sobj.FindStarSystem(); - if (sys != null) - { - sys.Remove(sobj); - sobj.Sector = null; - } - else - sobj.Sector = new Sector(this, coords); - - SpaceObjectLocations.Add(new ObjectLocation(sobj, coords)); - - MarkAsExploredBy(sobj.Owner); - - // see if we got hit by a minefield - if (!Serializer.IsDeserializing) - sobj.DealWithMines(); - } - - /// - /// Removes any space objects, etc. that the current empire cannot see. - /// - /// The galaxy, for context. - public void Redact(Empire emp) - { - // hide explored-by empires - foreach (var e in ExploredByEmpires.Where(e => e != emp).ToArray()) - ExploredByEmpires.Remove(e); - - // hide background image and description (so player can't see what kind of system it is) and name and abilities - if (!ExploredByEmpires.Contains(emp)) - { - BackgroundImagePath = null; - Name = "(Unexplored)"; - Description = "An unexplored star system. Who knows what lies in wait here?"; - Abilities.Clear(); - } - } - - public void Remove(ISpaceObject sobj) - { - foreach (var l in SpaceObjectLocations.ToArray()) - { - if (l.Item == sobj) - SpaceObjectLocations.Remove(l); - } - } - - public override string ToString() - { - return Name; - } - - /// - /// Marks this system as explored by a particular empire and adds an appropriate log entry for the player. - /// Does nothing if already explored by that player. - /// - /// - public void MarkAsExploredBy(Empire e) - { - if (e != null && !ExploredByEmpires.Contains(e)) - { - ExploredByEmpires.Add(e); - e.RecordLog(this, $"We have explored the {Name} system.", LogMessages.LogMessageType.Generic); - } - } - } +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Reflection; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Modding; +using FrEee.Modding.Templates; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Space +{ + /// + /// A star system containing a grid of sectors. + /// Is always square and always has an odd number of sectors across. + /// + [Serializable] + public class StarSystem : IReferrable, IPictorial, IFoggable, ICommonAbilityObject, IAbilityContainer + { + /// + /// Creates a star system. + /// + /// The number of sectors counting outward from the center to the edge. + public StarSystem(int radius) + { + Radius = radius; + Abilities = new List(); + SpaceObjectLocations = new HashSet>(); + ExploredByEmpires = new HashSet(); + } + + /// + /// Any special abilities possessed by this star system. + /// + public IList Abilities { get; private set; } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.StarSystem; } + } + + public Image BackgroundImage + { + get + { + if (BackgroundImagePath == null) + return null; + return Pictures.GetModImage( + Path.Combine("Pictures", "Systems", "1024x768", BackgroundImagePath), + Path.Combine("Pictures", "Systems", "800x600", BackgroundImagePath), + Path.Combine("Pictures", "Systems", BackgroundImagePath) + ); + } + } + + /// + /// The path to the background image, relative to Pictures/Systems. + /// + public string BackgroundImagePath { get; set; } + + public IEnumerable Children + { + get + { + foreach (var l in SpaceObjectLocations) + yield return l.Item; + } + } + + public Point Coordinates + { + get + { + return Location.Location; + } + } + + /// + /// The description of this star system. + /// + public string Description { get; set; } + + /// + /// The number of sectors across the star system. + /// + public int Diameter + { + get { return Math.Max(0, Radius * 2 + 1); } + } + + /// + /// If true, empire homeworlds can be located in this system. + /// + public bool EmpiresCanStartIn { get; set; } + + /// + /// Empires which have explored this star system. + /// + public ICollection ExploredByEmpires { get; private set; } + + public Image Icon + { + get { return BackgroundImage; } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return PortraitPaths; + } + } + + public long ID + { + get; + set; + } + + public IEnumerable IntrinsicAbilities + { + get { return Abilities; } + } + + public bool IsDisposed { get; set; } + + public bool IsMemory + { + get; + set; + } + + public ObjectLocation Location + { + get + { + try + { + return Galaxy.Current.StarSystemLocations.Single(l => l.Item == this); + } + catch (InvalidOperationException ex) + { + throw new InvalidOperationException(this + " does not appear to be located anywhere on the galaxy map, or it has multiple locations.", ex); + } + } + } + + /// + /// The name of this star system. + /// + public string Name { get; set; } + + /// + /// If true, the background image for this system will be centered, not tiled, in combat. + /// + public bool NonTiledCenterCombatImage { get; set; } + + /// + /// Star systems are not owned, per se. + /// + public Empire Owner + { + get { return null; } + } + + public IEnumerable Parents + { + get + { + yield return Galaxy.Current; + } + } + + public Image Portrait + { + get { return BackgroundImage; } + } + + public IEnumerable PortraitPaths + { + get + { + yield return Path.Combine("Systems", BackgroundImagePath); + } + } + + /// + /// The number of sectors counting outward from the center to the edge. + /// + public int Radius { get; private set; } + + public IEnumerable Sectors + { + get + { + for (var x = -Radius; x <= Radius; x++) + { + for (var y = -Radius; y <= Radius; y++) + { + yield return new Sector(this, new Point(x, y)); + } + } + } + } + + /// + /// The space objects contained in this star system. + /// + public ICollection> SpaceObjectLocations { get; private set; } + + public IEnumerable SpaceObjects { get { return FindSpaceObjects(); } } + + public double Timestamp { get; set; } + + /// + /// Abilities for random warp points that appear in this system. + /// + [DoNotSerialize] + public RandomAbilityTemplate WarpPointAbilities { get { return warpPointAbilities; } set { warpPointAbilities = value; } } + + private ModReference warpPointAbilities { get; set; } + + public bool AreCoordsInBounds(int x, int y) + { + return x >= -Radius && x <= Radius && y >= -Radius && y <= Radius; + } + + public bool AreCoordsInBounds(Point p) + { + return AreCoordsInBounds(p.X, p.Y); + } + + public Visibility CheckVisibility(Empire emp) + { + if (FindSpaceObjects(sobj => sobj.Owner == emp && !sobj.IsMemory).Any()) + return Visibility.Visible; + else if (emp.ExploredStarSystems.Contains(this)) + return Visibility.Fogged; + return Visibility.Unknown; + } + + public bool Contains(ISpaceObject sobj) + { + return SpaceObjectLocations.Any(l => l.Item == sobj); + } + + public void Dispose() + { + if (IsDisposed) + return; + if (IsDisposed) + return; + Galaxy.Current.UnassignID(this); + if (!IsMemory) + this.UpdateEmpireMemories(); + } + + /// + /// Do any of the empire's space objects in a sector have an ability? + /// + /// + /// + /// + /// + /// + public bool DoesSectorHaveAbility(Point coords, Empire emp, string name, int index = 1, Func filter = null) + { + var sobjs = FindSpaceObjects().Where(o => o.Owner == emp && o.FindCoordinates() == coords); + return sobjs.SelectMany(o => o.UnstackedAbilities(true)).Where(a => a.Rule.Matches(name) && (filter == null || filter(a))).Any(); + } + + public Point FindCoordinates(ISpaceObject sobj) + { + try + { + return SpaceObjectLocations.Single(l => l.Item == sobj).Location; + } + catch (Exception ex) + { + throw new Exception("Can't find coordinates of " + sobj + " in " + this + ".", ex); + } + } + + /// + /// Searches for space objects matching criteria. + /// + /// The type of space object. + /// The criteria. + /// The matching space objects. + public IEnumerable FindSpaceObjects(Func criteria = null) + { + return SpaceObjectLocations.Select(l => l.Item).OfType().Where(l => criteria == null || criteria(l)); + } + + public IEnumerable GetContainedAbilityObjects(Empire emp) + { + return SpaceObjectLocations.Select(l => l.Item).Where(sobj => sobj?.Owner == emp).OfType(); + } + + public Sector GetSector(int x, int y) + { + return GetSector(new Point(x, y)); + } + + public Sector GetSector(Point p) + { + if (!AreCoordsInBounds(p)) + throw new Exception("Sector coordinates (" + p.X + ", " + p.Y + ") are out of bounds for star system of radius " + Radius + "."); + return new Sector(this, p); + } + + /// + /// Do any of the empire's space objects in this system have an ability? + /// + /// + /// + /// + /// + /// + public bool HasAbility(Empire emp, string name, int index = 1, Func filter = null) + { + return FindSpaceObjects(o => o.Owner == emp).SelectMany(o => o.UnstackedAbilities(true)).Where(a => a.Rule.Matches(name) && (filter == null || filter(a))).Any(); + } + + public bool IsObsoleteMemory(Empire emp) + { + return CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; + } + + public Sector PickRandomSector(PRNG prng = null) + { + return new Sector(this, new Point(RandomHelper.Range(-Radius, Radius, prng), RandomHelper.Range(-Radius, Radius, prng))); + } + + public void Place(ISpaceObject sobj, Point coords) + { + var sys = sobj.FindStarSystem(); + if (sys != null) + { + sys.Remove(sobj); + sobj.Sector = null; + } + else + sobj.Sector = new Sector(this, coords); + + SpaceObjectLocations.Add(new ObjectLocation(sobj, coords)); + + MarkAsExploredBy(sobj.Owner); + + // see if we got hit by a minefield + if (!Serializer.IsDeserializing) + sobj.DealWithMines(); + } + + /// + /// Removes any space objects, etc. that the current empire cannot see. + /// + /// The galaxy, for context. + public void Redact(Empire emp) + { + // hide explored-by empires + foreach (var e in ExploredByEmpires.Where(e => e != emp).ToArray()) + ExploredByEmpires.Remove(e); + + // hide background image and description (so player can't see what kind of system it is) and name and abilities + if (!ExploredByEmpires.Contains(emp)) + { + BackgroundImagePath = null; + Name = "(Unexplored)"; + Description = "An unexplored star system. Who knows what lies in wait here?"; + Abilities.Clear(); + } + } + + public void Remove(ISpaceObject sobj) + { + foreach (var l in SpaceObjectLocations.ToArray()) + { + if (l.Item == sobj) + SpaceObjectLocations.Remove(l); + } + } + + public override string ToString() + { + return Name; + } + + /// + /// Marks this system as explored by a particular empire and adds an appropriate log entry for the player. + /// Does nothing if already explored by that player. + /// + /// + public void MarkAsExploredBy(Empire e) + { + if (e != null && !ExploredByEmpires.Contains(e)) + { + ExploredByEmpires.Add(e); + e.RecordLog(this, $"We have explored the {Name} system.", LogMessages.LogMessageType.Generic); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Space/StellarObject.cs b/FrEee/Objects/Space/StellarObject.cs similarity index 92% rename from FrEee/Game/Objects/Space/StellarObject.cs rename to FrEee/Objects/Space/StellarObject.cs index dd48913c9..c4f363718 100644 --- a/FrEee/Game/Objects/Space/StellarObject.cs +++ b/FrEee/Objects/Space/StellarObject.cs @@ -1,323 +1,323 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; - -namespace FrEee.Game.Objects.Space -{ - /// - /// A (typically) naturally occurring, large, immobile space object. - /// - [Serializable] - public abstract class StellarObject : IStellarObject, IAbstractDataObject - { - public StellarObject() - { - IntrinsicAbilities = new List(); - StoredResources = new ResourceQuantity(); - } - - // TODO - rename to IntrinsicAbilities in IAbilityContainer and remove DoNotSerialize - [DoNotSerialize] - public IList Abilities - { - get - { - return IntrinsicAbilities; - } - set - { - IntrinsicAbilities = value; - } - } - - public abstract AbilityTargets AbilityTarget { get; } - - public virtual bool CanBeInFleet - { - get { return false; } - } - - public abstract bool CanBeObscured { get; } - - /// - /// Stellar objects can't normally warp. - /// - public virtual bool CanWarp { get { return false; } } - - public virtual IEnumerable Children - { - get { yield break; } - } - - public virtual ConstructionQueue ConstructionQueue - { - get { return null; } - } - - public virtual SafeDictionary Data - { - get - { - var dict = new SafeDictionary(); - dict[nameof(Index)] = Index; - dict[nameof(IsUnique)] = IsUnique; - dict[nameof(Name)] = Name; - dict[nameof(Description)] = Description; - dict[nameof(PictureName)] = PictureName; - dict[nameof(IntrinsicAbilities)] = IntrinsicAbilities; - dict[nameof(StellarSize)] = StellarSize; - dict[nameof(ID)] = ID; - dict[nameof(IsMemory)] = IsMemory; - dict[nameof(Timestamp)] = Timestamp; - dict[nameof(ModID)] = ModID; - dict[nameof(StoredResources)] = StoredResources; - return dict; - } - set - { - Index = value[nameof(Index)].Default(); - IsUnique = value[nameof(IsUnique)].Default(); - Name = value[nameof(Name)].Default(); - Description = value[nameof(Description)].Default(); - PictureName = value[nameof(PictureName)].Default(); - IntrinsicAbilities = value[nameof(IntrinsicAbilities)].Default(new List()); - StellarSize = value[nameof(StellarSize)].Default(); - ID = value[nameof(ID)].Default(); - IsMemory = value[nameof(IsMemory)].Default(); - Timestamp = value[nameof(Timestamp)].Default(); - ModID = value[nameof(ModID)].Default(); - StoredResources = value[nameof(StoredResources)].Default(new ResourceQuantity()); - } - } - - /// - /// A description of this stellar object. - /// - public string Description { get; set; } - - public bool HasInfiniteSupplies - { - get { return this.HasAbility("Quantum Reactor"); } - } - - public virtual Image Icon - { - get { return Pictures.GetIcon(this); } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return PortraitPaths; - } - } - - public long ID { get; set; } - - /// - /// Used for naming. - /// - public int Index { get; set; } - - /// - /// Abilities intrinsic to this stellar object. - /// - public IList IntrinsicAbilities { get; private set; } - - IEnumerable IAbilityObject.IntrinsicAbilities - { - get { return IntrinsicAbilities; } - } - - public bool IsDisposed { get; set; } - - /// - /// Stellar objects by default can't be idle, because they can't take orders or build stuff to begin with. - /// - public virtual bool IsIdle - { - get { return false; } - } - - public bool IsMemory - { - get; - set; - } - - /// - /// Used for naming. - /// - public bool IsUnique { get; set; } - - public string ModID - { - get; - set; - } - - /// - /// The name of this stellar object. - /// - public string Name { get; set; } - - Empire IOwnable.Owner - { - get - { - return null; - } - } - - public virtual IEnumerable Parents - { - get - { - if (Sector != null) - yield return Sector; - } - } - - /// - /// Name of the picture used to represent this stellar object, excluding the file extension. - /// PNG files will be searched first, then BMP. - /// - public string PictureName { get; set; } - - [DoNotSerialize] - public Image Portrait - { - get { return Pictures.GetPortrait(this); } - } - - public IEnumerable PortraitPaths - { - get - { - if (Mod.Current.RootPath != null) - yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Planets", PictureName); - yield return Path.Combine("Pictures", "Planets", PictureName); - } - } - - [DoNotCopy(false)] - public virtual Sector Sector - { - get - { - if (sector == null) - sector = this.FindSector(); - return sector; - } - set - { - var oldsector = sector; - sector = value; - if (value == null) - { - if (oldsector != null) - oldsector.Remove(this); - } - else - { - if (oldsector != value) - value.Place(this); - } - } - } - - public StarSystem StarSystem - { - get { return Sector?.StarSystem; } - } - - public StellarSize StellarSize - { - get; - set; - } - - /// - /// Resources stored on this stellar object. - /// - public ResourceQuantity StoredResources { get; private set; } - - public int SupplyStorage - { - get { return this.GetAbilityValue("Supply Storage").ToInt(); } - } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - public double Timestamp { get; set; } - private Sector sector; - - public Visibility CheckVisibility(Empire emp) - { - if ((Sector == null || StarSystem == null) && Mod.Current.StellarObjectTemplates.Contains(this)) - return Visibility.Scanned; // can always see the mod - - return this.CheckSpaceObjectVisibility(emp); - } - - public virtual void Dispose() - { - if (IsDisposed) - return; - var sys = this.FindStarSystem(); - if (sys != null) - sys.Remove(this); - Galaxy.Current.UnassignID(this); - if (!IsMemory) - this.UpdateEmpireMemories(); - } - - /// - /// Stellar objects don't typically have owners, so they can't usually be hostile. - /// - /// - /// - public virtual bool IsHostileTo(Empire emp) - { - return false; - } - - public bool IsObsoleteMemory(Empire emp) - { - if (StarSystem == null) - return Timestamp < Galaxy.Current.Timestamp - 1; - return StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; - } - - /// - /// Removes any data from this stellar object that the specified empire should not see. - /// Disposes of the stellar object if it is invisible to the empire. - /// - /// - public virtual void Redact(Empire emp) - { - var vis = CheckVisibility(emp); - if (vis < Visibility.Fogged || vis < Visibility.Visible && !IsMemory) - Dispose(); - } - - public override string ToString() - { - return Name; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; + +namespace FrEee.Objects.Space +{ + /// + /// A (typically) naturally occurring, large, immobile space object. + /// + [Serializable] + public abstract class StellarObject : IStellarObject, IAbstractDataObject + { + public StellarObject() + { + IntrinsicAbilities = new List(); + StoredResources = new ResourceQuantity(); + } + + // TODO - rename to IntrinsicAbilities in IAbilityContainer and remove DoNotSerialize + [DoNotSerialize] + public IList Abilities + { + get + { + return IntrinsicAbilities; + } + set + { + IntrinsicAbilities = value; + } + } + + public abstract AbilityTargets AbilityTarget { get; } + + public virtual bool CanBeInFleet + { + get { return false; } + } + + public abstract bool CanBeObscured { get; } + + /// + /// Stellar objects can't normally warp. + /// + public virtual bool CanWarp { get { return false; } } + + public virtual IEnumerable Children + { + get { yield break; } + } + + public virtual ConstructionQueue ConstructionQueue + { + get { return null; } + } + + public virtual SafeDictionary Data + { + get + { + var dict = new SafeDictionary(); + dict[nameof(Index)] = Index; + dict[nameof(IsUnique)] = IsUnique; + dict[nameof(Name)] = Name; + dict[nameof(Description)] = Description; + dict[nameof(PictureName)] = PictureName; + dict[nameof(IntrinsicAbilities)] = IntrinsicAbilities; + dict[nameof(StellarSize)] = StellarSize; + dict[nameof(ID)] = ID; + dict[nameof(IsMemory)] = IsMemory; + dict[nameof(Timestamp)] = Timestamp; + dict[nameof(ModID)] = ModID; + dict[nameof(StoredResources)] = StoredResources; + return dict; + } + set + { + Index = value[nameof(Index)].Default(); + IsUnique = value[nameof(IsUnique)].Default(); + Name = value[nameof(Name)].Default(); + Description = value[nameof(Description)].Default(); + PictureName = value[nameof(PictureName)].Default(); + IntrinsicAbilities = value[nameof(IntrinsicAbilities)].Default(new List()); + StellarSize = value[nameof(StellarSize)].Default(); + ID = value[nameof(ID)].Default(); + IsMemory = value[nameof(IsMemory)].Default(); + Timestamp = value[nameof(Timestamp)].Default(); + ModID = value[nameof(ModID)].Default(); + StoredResources = value[nameof(StoredResources)].Default(new ResourceQuantity()); + } + } + + /// + /// A description of this stellar object. + /// + public string Description { get; set; } + + public bool HasInfiniteSupplies + { + get { return this.HasAbility("Quantum Reactor"); } + } + + public virtual Image Icon + { + get { return Pictures.GetIcon(this); } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return PortraitPaths; + } + } + + public long ID { get; set; } + + /// + /// Used for naming. + /// + public int Index { get; set; } + + /// + /// Abilities intrinsic to this stellar object. + /// + public IList IntrinsicAbilities { get; private set; } + + IEnumerable IAbilityObject.IntrinsicAbilities + { + get { return IntrinsicAbilities; } + } + + public bool IsDisposed { get; set; } + + /// + /// Stellar objects by default can't be idle, because they can't take orders or build stuff to begin with. + /// + public virtual bool IsIdle + { + get { return false; } + } + + public bool IsMemory + { + get; + set; + } + + /// + /// Used for naming. + /// + public bool IsUnique { get; set; } + + public string ModID + { + get; + set; + } + + /// + /// The name of this stellar object. + /// + public string Name { get; set; } + + Empire IOwnable.Owner + { + get + { + return null; + } + } + + public virtual IEnumerable Parents + { + get + { + if (Sector != null) + yield return Sector; + } + } + + /// + /// Name of the picture used to represent this stellar object, excluding the file extension. + /// PNG files will be searched first, then BMP. + /// + public string PictureName { get; set; } + + [DoNotSerialize] + public Image Portrait + { + get { return Pictures.GetPortrait(this); } + } + + public IEnumerable PortraitPaths + { + get + { + if (Mod.Current.RootPath != null) + yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Planets", PictureName); + yield return Path.Combine("Pictures", "Planets", PictureName); + } + } + + [DoNotCopy(false)] + public virtual Sector Sector + { + get + { + if (sector == null) + sector = this.FindSector(); + return sector; + } + set + { + var oldsector = sector; + sector = value; + if (value == null) + { + if (oldsector != null) + oldsector.Remove(this); + } + else + { + if (oldsector != value) + value.Place(this); + } + } + } + + public StarSystem StarSystem + { + get { return Sector?.StarSystem; } + } + + public StellarSize StellarSize + { + get; + set; + } + + /// + /// Resources stored on this stellar object. + /// + public ResourceQuantity StoredResources { get; private set; } + + public int SupplyStorage + { + get { return this.GetAbilityValue("Supply Storage").ToInt(); } + } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + public double Timestamp { get; set; } + private Sector sector; + + public Visibility CheckVisibility(Empire emp) + { + if ((Sector == null || StarSystem == null) && Mod.Current.StellarObjectTemplates.Contains(this)) + return Visibility.Scanned; // can always see the mod + + return this.CheckSpaceObjectVisibility(emp); + } + + public virtual void Dispose() + { + if (IsDisposed) + return; + var sys = this.FindStarSystem(); + if (sys != null) + sys.Remove(this); + Galaxy.Current.UnassignID(this); + if (!IsMemory) + this.UpdateEmpireMemories(); + } + + /// + /// Stellar objects don't typically have owners, so they can't usually be hostile. + /// + /// + /// + public virtual bool IsHostileTo(Empire emp) + { + return false; + } + + public bool IsObsoleteMemory(Empire emp) + { + if (StarSystem == null) + return Timestamp < Galaxy.Current.Timestamp - 1; + return StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; + } + + /// + /// Removes any data from this stellar object that the specified empire should not see. + /// Disposes of the stellar object if it is invisible to the empire. + /// + /// + public virtual void Redact(Empire emp) + { + var vis = CheckVisibility(emp); + if (vis < Visibility.Fogged || vis < Visibility.Visible && !IsMemory) + Dispose(); + } + + public override string ToString() + { + return Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Space/Storm.cs b/FrEee/Objects/Space/Storm.cs similarity index 80% rename from FrEee/Game/Objects/Space/Storm.cs rename to FrEee/Objects/Space/Storm.cs index f9928376d..77a1ab3dc 100644 --- a/FrEee/Game/Objects/Space/Storm.cs +++ b/FrEee/Objects/Space/Storm.cs @@ -1,62 +1,62 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Objects.Space -{ - /// - /// A space storm. - /// - [Serializable] - public class Storm : StellarObject, ITemplate, IDataObject - { - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.Storm; } - } - - public override bool CanBeObscured => false; - - /// - /// Some sort of combat image? Where are these stored anyway? - /// - public string CombatTile { get; set; } - - public override SafeDictionary Data - { - get - { - var dict = base.Data; - dict[nameof(CombatTile)] = CombatTile; - return dict; - } - set - { - base.Data = value; - CombatTile = value[nameof(CombatTile)].Default(); - } - } - - public Empire Owner - { - get - { - return null; - } - } - - /// - /// Just copy the storm's data. - /// - /// A copy of the storm. - public Storm Instantiate() - { - var result = this.CopyAndAssignNewID(); - result.ModID = null; - return result; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; + +namespace FrEee.Objects.Space +{ + /// + /// A space storm. + /// + [Serializable] + public class Storm : StellarObject, ITemplate, IDataObject + { + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.Storm; } + } + + public override bool CanBeObscured => false; + + /// + /// Some sort of combat image? Where are these stored anyway? + /// + public string CombatTile { get; set; } + + public override SafeDictionary Data + { + get + { + var dict = base.Data; + dict[nameof(CombatTile)] = CombatTile; + return dict; + } + set + { + base.Data = value; + CombatTile = value[nameof(CombatTile)].Default(); + } + } + + public Empire Owner + { + get + { + return null; + } + } + + /// + /// Just copy the storm's data. + /// + /// A copy of the storm. + public Storm Instantiate() + { + var result = this.CopyAndAssignNewID(); + result.ModID = null; + return result; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Space/WarpPoint.cs b/FrEee/Objects/Space/WarpPoint.cs similarity index 89% rename from FrEee/Game/Objects/Space/WarpPoint.cs rename to FrEee/Objects/Space/WarpPoint.cs index a880ece95..d5973edbb 100644 --- a/FrEee/Game/Objects/Space/WarpPoint.cs +++ b/FrEee/Objects/Space/WarpPoint.cs @@ -1,128 +1,128 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Linq; - -namespace FrEee.Game.Objects.Space -{ - /// - /// A warp point connecting two sectors. - /// - [Serializable] - public class WarpPoint : StellarObject, ITemplate, IReferrable, IDataObject - { - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.WarpPoint; } - } - - public override bool CanBeObscured => false; - - public override SafeDictionary Data - { - get - { - var dict = base.Data; - dict[nameof(Target)] = Target; - dict[nameof(IsUnusual)] = IsUnusual; - return dict; - } - set - { - base.Data = value; - Target = value[nameof(Target)].Default(); - IsUnusual = value[nameof(IsUnusual)].Default(); - } - } - - /// - /// Should this warp point be one-way, or should it have a return connection? - /// - [DoNotSerialize] - public bool IsOneWay { get; set; } - - /// - /// Does this warp point have special abilities? - /// - public bool IsUnusual { get; set; } - - public Empire Owner - { - get - { - return null; - } - } - - /// - /// The sector that ships will appear in when they go through this warp point. - /// If null, the warp point is still unexplored by the current empire. - /// - public Sector Target { get; set; } - - /// - /// The star system that ships will appear in when they go through this warp point. - /// - public ObjectLocation TargetStarSystemLocation - { - get - { - if (Target == null) - return null; - return Galaxy.Current.StarSystemLocations.SingleOrDefault(ssl => ssl.Item == Target.StarSystem); - } - } - - public void Close(bool closeBothWays = true) - { - if (closeBothWays) - { - var wps = Target.SpaceObjects.OfType().Where(q => q.Target == Sector); - foreach (var wp in wps) - wp.Dispose(); - } - Dispose(); - } - - /// - /// Just copy the warp point's data. - /// - /// A copy of the warp point. - public WarpPoint Instantiate() - { - var result = this.CopyAndAssignNewID(); - result.ModID = null; - return result; - } - - public override void Redact(Empire emp) - { - base.Redact(emp); - - // Don't let players see the target sector coordinates or star system name if it's not explored yet - if (Target != null) - { - var sys = Target.StarSystem; - if (sys != null) - { - if (!sys.ExploredByEmpires.Contains(emp)) - { - Name = "Warp Point"; - Target = null; - } - } - else - { - Name = "Warp Point"; - } - } - else - { - Name = "Warp Point"; - } - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Linq; + +namespace FrEee.Objects.Space +{ + /// + /// A warp point connecting two sectors. + /// + [Serializable] + public class WarpPoint : StellarObject, ITemplate, IReferrable, IDataObject + { + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.WarpPoint; } + } + + public override bool CanBeObscured => false; + + public override SafeDictionary Data + { + get + { + var dict = base.Data; + dict[nameof(Target)] = Target; + dict[nameof(IsUnusual)] = IsUnusual; + return dict; + } + set + { + base.Data = value; + Target = value[nameof(Target)].Default(); + IsUnusual = value[nameof(IsUnusual)].Default(); + } + } + + /// + /// Should this warp point be one-way, or should it have a return connection? + /// + [DoNotSerialize] + public bool IsOneWay { get; set; } + + /// + /// Does this warp point have special abilities? + /// + public bool IsUnusual { get; set; } + + public Empire Owner + { + get + { + return null; + } + } + + /// + /// The sector that ships will appear in when they go through this warp point. + /// If null, the warp point is still unexplored by the current empire. + /// + public Sector Target { get; set; } + + /// + /// The star system that ships will appear in when they go through this warp point. + /// + public ObjectLocation TargetStarSystemLocation + { + get + { + if (Target == null) + return null; + return Galaxy.Current.StarSystemLocations.SingleOrDefault(ssl => ssl.Item == Target.StarSystem); + } + } + + public void Close(bool closeBothWays = true) + { + if (closeBothWays) + { + var wps = Target.SpaceObjects.OfType().Where(q => q.Target == Sector); + foreach (var wp in wps) + wp.Dispose(); + } + Dispose(); + } + + /// + /// Just copy the warp point's data. + /// + /// A copy of the warp point. + public WarpPoint Instantiate() + { + var result = this.CopyAndAssignNewID(); + result.ModID = null; + return result; + } + + public override void Redact(Empire emp) + { + base.Redact(emp); + + // Don't let players see the target sector coordinates or star system name if it's not explored yet + if (Target != null) + { + var sys = Target.StarSystem; + if (sys != null) + { + if (!sys.ExploredByEmpires.Contains(emp)) + { + Name = "Warp Point"; + Target = null; + } + } + else + { + Name = "Warp Point"; + } + } + else + { + Name = "Warp Point"; + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Technology/Component.cs b/FrEee/Objects/Technology/Component.cs similarity index 92% rename from FrEee/Game/Objects/Technology/Component.cs rename to FrEee/Objects/Technology/Component.cs index 73af2caa0..0df7da23a 100644 --- a/FrEee/Game/Objects/Technology/Component.cs +++ b/FrEee/Objects/Technology/Component.cs @@ -1,402 +1,402 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Objects.Technology -{ - /// - /// A component of a vehicle. - /// TODO - should Component implement IOwnable like Facility does? - /// - [Serializable] - public class Component : IAbilityObject, INamed, IPictorial, IDamageable, IContainable, IFormulaHost, IUpgradeable - { - public Component(IVehicle container, MountedComponentTemplate template) - { - Container = container; - Template = template; - Hitpoints = template.Durability; - } - - public IEnumerable Abilities - { - get - { - if (IsDestroyed) - return Enumerable.Empty(); - else - return Template.Abilities; - } - } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.Component; } - } - - public int ArmorHitpoints - { - get - { - return this.HasAbility("Armor") ? Hitpoints : 0; - } - } - - public IEnumerable Children - { - get - { - // The mounted component template might seem like a descendant, but it can't be, - // because its abilities shouldn't be passed up when the component is destroyed. - yield break; - } - } - - [DoNotSerialize] - public IVehicle Container - { - get - { - if (container == null) - container = Galaxy.Current.FindSpaceObjects().SingleOrDefault(q => q.Components.Contains(this)).ReferViaGalaxy(); - return container?.Value; - } - set - { - container = value.ReferViaGalaxy(); - } - } - - /// - /// Component hit chances are normally determined by their maximum hitpoints. - /// This is what makes leaky armor work. - /// - public int HitChance - { - // TODO - moddable hit chance - get { return MaxHitpoints; } - } - - /// - /// The current hitpoints of this component. - /// - public int Hitpoints { get; set; } - - public int HullHitpoints - { - get - { - return this.HasAbility("Armor") ? 0 : Hitpoints; - } - } - - public Image Icon - { - get { return Template.Icon; } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return Template.IconPaths; - } - } - - public IEnumerable IntrinsicAbilities - { - get - { - // Need to treat the template's abilities as intrinsic because they can be switched on or off - // based on the damage state of the component. - return Abilities; - } - } - - /// - /// Is this component out of commission? - /// - public bool IsDestroyed { get { return Hitpoints <= 0; } } - - public bool IsObsolescent - { - get { return Template.IsObsolescent; } - } - - /// - /// Is this component obsolete (can be upgraded to a newer component)? - /// - public bool IsObsolete - { - get - { - return Template.IsObsolete; - } - } - - public Component LatestVersion - { - get - { - if (IsObsolescent) - return Template.LatestVersion.Instantiate(); - else - return this; - } - } - - public int MaxArmorHitpoints - { - get - { - return this.HasAbility("Armor") ? MaxHitpoints : 0; - } - } - - public int MaxHitpoints - { - get { return Template.Durability; } - } - - public int MaxHullHitpoints - { - get - { - return this.HasAbility("Armor") ? 0 : MaxHitpoints; - } - } - - public int MaxNormalShields - { - get { return 0; } - } - - public int MaxPhasedShields - { - get { return 0; } - } - - public int MaxShieldHitpoints - { - get { return MaxNormalShields + MaxPhasedShields; } - } - - public string Name { get { return Template.Name; } } - - public IEnumerable NewerVersions - { - get { return Galaxy.Current.FindSpaceObjects().SelectMany(v => v.Components).Where(c => Template.UpgradesTo(c.Template)); } - } - - /// - /// Components don't actually have shields; they just generate them for the vehicle. - /// - [DoNotSerialize(false)] - public int NormalShields - { - get - { - return 0; - } - set - { - throw new NotSupportedException("Components don't actually have shields; they just generate them for the vehicle."); - } - } - - public IEnumerable OlderVersions - { - get { return Galaxy.Current.FindSpaceObjects().SelectMany(v => v.Components).Where(c => c.Template.UpgradesTo(Template)); } - } - - public Empire Owner - { - get { return Container == null ? null : Container.Owner; } - } - - public IEnumerable Parents - { - get - { - if (Container != null) - yield return Container; - } - } - - /// - /// Components don't actually have shields; they just generate them for the vehicle. - /// - [DoNotSerialize(false)] - public int PhasedShields - { - get - { - return 0; - } - set - { - throw new NotSupportedException("Components don't actually have shields; they just generate them for the vehicle."); - } - } - - public System.Drawing.Image Portrait - { - get { return Template.Portrait; } - } - - public IEnumerable PortraitPaths - { - get - { - return Template.PortraitPaths; - } - } - - public int ShieldHitpoints - { - get { return NormalShields + PhasedShields; } - } - - /// - /// The template for this component. - /// Specifies the basic stats of the component and its abilities. - /// - public MountedComponentTemplate Template { get; private set; } - - public IEnumerable UnstackedAbilities - { - get { return Abilities; } - } - - public IDictionary Variables - { - get - { - return new Dictionary - { - {"component", Template.ComponentTemplate}, - {"mount", Template.Mount}, - {"vehicle", Container}, - {"design", Container.Design}, - {"empire", Container.Owner} - }; - } - } - - [DoNotCopy] - private GalaxyReference container { get; set; } - - /// - /// If this is a weapon, returns true if this weapon can target an object at a particular range. - /// If not a weapon, always returns false. - /// - /// - /// - public bool CanTarget(ITargetable target) - { - if (IsDestroyed) - return false; // damaged weapons can't fire! - if (Template.ComponentTemplate.WeaponInfo == null) - return false; // not a weapon! - return Template.ComponentTemplate.WeaponInfo.Targets.HasFlag(target.WeaponTargetType); - } - - /*/// - /// If this is a weapon, attempts to attack the target. - /// If not a weapon, does nothing. - /// - /// - public void Attack(ICombatant defender, int range, Battle battle) - { - if (!CanTarget(defender)) - return; - - // TODO - check range too - var tohit = Mod.Current.Settings.WeaponAccuracyPointBlank + Template.WeaponAccuracy + Container.Accuracy - defender.Evasion; - // TODO - moddable min/max hit chances with per-weapon overrides - if (tohit > 99) - tohit = 99; - if (tohit < 1) - tohit = 1; - var hit = RandomHelper.Range(0, 99) < tohit; - battle.LogShot(this, hit); - if (hit) - { - var shot = new Shot(this, defender, range); - defender.TakeDamage(Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, null); - if (defender.MaxNormalShields < defender.NormalShields) - defender.NormalShields = defender.MaxNormalShields; - if (defender.MaxPhasedShields < defender.PhasedShields) - defender.PhasedShields = defender.MaxPhasedShields; - if (defender.IsDestroyed) - battle.LogTargetDeath(defender); - } - }*/ - - public void Dispose() - { - Hitpoints = 0; - } - - public int? Repair(int? amount = null) - { - if (this.HasAbility("Component Destroyed On Use") || this.HasAbility("Space Object Destroyed On Use")) - { - // if component is destroyed on use, it can only be repaired at a friendly colony - // SE4 said a friendly spaceyard, but that's still exploitable by using mobile SY ships - if (!Container.Sector.SpaceObjects.OfType().Any(p => p.Owner == Owner)) - return amount; - } - - if (amount == null) - { - Hitpoints = MaxHitpoints; - return amount; - } - else - { - var actual = Math.Min(MaxHitpoints - Hitpoints, amount.Value); - Hitpoints += actual; - return amount.Value - actual; - } - } - - public void ReplenishShields(int? amount = null) - { - // nothing to do - } - - public int TakeDamage(Hit hit, PRNG dice = null) - { - int damage = hit.NominalDamage; - var realhit = new Hit(hit.Shot, this, damage); - var dt = realhit.Shot?.DamageType ?? DamageType.Normal; - var df = dt.ComponentDamage.Evaluate(realhit); - var dp = dt.ComponentPiercing.Evaluate(realhit); - var factoredDmg = df.PercentOfRounded(damage); - var piercing = dp.PercentOfRounded(damage); - var realdmg = Math.Min(Hitpoints, factoredDmg); - var nominalDamageSpent = realdmg / ((df + dp) / 100); - Hitpoints -= realdmg; - return damage - nominalDamageSpent; - } - - public override string ToString() - { - return Name; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace FrEee.Objects.Technology +{ + /// + /// A component of a vehicle. + /// TODO - should Component implement IOwnable like Facility does? + /// + [Serializable] + public class Component : IAbilityObject, INamed, IPictorial, IDamageable, IContainable, IFormulaHost, IUpgradeable + { + public Component(IVehicle container, MountedComponentTemplate template) + { + Container = container; + Template = template; + Hitpoints = template.Durability; + } + + public IEnumerable Abilities + { + get + { + if (IsDestroyed) + return Enumerable.Empty(); + else + return Template.Abilities; + } + } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.Component; } + } + + public int ArmorHitpoints + { + get + { + return this.HasAbility("Armor") ? Hitpoints : 0; + } + } + + public IEnumerable Children + { + get + { + // The mounted component template might seem like a descendant, but it can't be, + // because its abilities shouldn't be passed up when the component is destroyed. + yield break; + } + } + + [DoNotSerialize] + public IVehicle Container + { + get + { + if (container == null) + container = Galaxy.Current.FindSpaceObjects().SingleOrDefault(q => q.Components.Contains(this)).ReferViaGalaxy(); + return container?.Value; + } + set + { + container = value.ReferViaGalaxy(); + } + } + + /// + /// Component hit chances are normally determined by their maximum hitpoints. + /// This is what makes leaky armor work. + /// + public int HitChance + { + // TODO - moddable hit chance + get { return MaxHitpoints; } + } + + /// + /// The current hitpoints of this component. + /// + public int Hitpoints { get; set; } + + public int HullHitpoints + { + get + { + return this.HasAbility("Armor") ? 0 : Hitpoints; + } + } + + public Image Icon + { + get { return Template.Icon; } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return Template.IconPaths; + } + } + + public IEnumerable IntrinsicAbilities + { + get + { + // Need to treat the template's abilities as intrinsic because they can be switched on or off + // based on the damage state of the component. + return Abilities; + } + } + + /// + /// Is this component out of commission? + /// + public bool IsDestroyed { get { return Hitpoints <= 0; } } + + public bool IsObsolescent + { + get { return Template.IsObsolescent; } + } + + /// + /// Is this component obsolete (can be upgraded to a newer component)? + /// + public bool IsObsolete + { + get + { + return Template.IsObsolete; + } + } + + public Component LatestVersion + { + get + { + if (IsObsolescent) + return Template.LatestVersion.Instantiate(); + else + return this; + } + } + + public int MaxArmorHitpoints + { + get + { + return this.HasAbility("Armor") ? MaxHitpoints : 0; + } + } + + public int MaxHitpoints + { + get { return Template.Durability; } + } + + public int MaxHullHitpoints + { + get + { + return this.HasAbility("Armor") ? 0 : MaxHitpoints; + } + } + + public int MaxNormalShields + { + get { return 0; } + } + + public int MaxPhasedShields + { + get { return 0; } + } + + public int MaxShieldHitpoints + { + get { return MaxNormalShields + MaxPhasedShields; } + } + + public string Name { get { return Template.Name; } } + + public IEnumerable NewerVersions + { + get { return Galaxy.Current.FindSpaceObjects().SelectMany(v => v.Components).Where(c => Template.UpgradesTo(c.Template)); } + } + + /// + /// Components don't actually have shields; they just generate them for the vehicle. + /// + [DoNotSerialize(false)] + public int NormalShields + { + get + { + return 0; + } + set + { + throw new NotSupportedException("Components don't actually have shields; they just generate them for the vehicle."); + } + } + + public IEnumerable OlderVersions + { + get { return Galaxy.Current.FindSpaceObjects().SelectMany(v => v.Components).Where(c => c.Template.UpgradesTo(Template)); } + } + + public Empire Owner + { + get { return Container == null ? null : Container.Owner; } + } + + public IEnumerable Parents + { + get + { + if (Container != null) + yield return Container; + } + } + + /// + /// Components don't actually have shields; they just generate them for the vehicle. + /// + [DoNotSerialize(false)] + public int PhasedShields + { + get + { + return 0; + } + set + { + throw new NotSupportedException("Components don't actually have shields; they just generate them for the vehicle."); + } + } + + public System.Drawing.Image Portrait + { + get { return Template.Portrait; } + } + + public IEnumerable PortraitPaths + { + get + { + return Template.PortraitPaths; + } + } + + public int ShieldHitpoints + { + get { return NormalShields + PhasedShields; } + } + + /// + /// The template for this component. + /// Specifies the basic stats of the component and its abilities. + /// + public MountedComponentTemplate Template { get; private set; } + + public IEnumerable UnstackedAbilities + { + get { return Abilities; } + } + + public IDictionary Variables + { + get + { + return new Dictionary + { + {"component", Template.ComponentTemplate}, + {"mount", Template.Mount}, + {"vehicle", Container}, + {"design", Container.Design}, + {"empire", Container.Owner} + }; + } + } + + [DoNotCopy] + private GalaxyReference container { get; set; } + + /// + /// If this is a weapon, returns true if this weapon can target an object at a particular range. + /// If not a weapon, always returns false. + /// + /// + /// + public bool CanTarget(ITargetable target) + { + if (IsDestroyed) + return false; // damaged weapons can't fire! + if (Template.ComponentTemplate.WeaponInfo == null) + return false; // not a weapon! + return Template.ComponentTemplate.WeaponInfo.Targets.HasFlag(target.WeaponTargetType); + } + + /*/// + /// If this is a weapon, attempts to attack the target. + /// If not a weapon, does nothing. + /// + /// + public void Attack(ICombatant defender, int range, Battle battle) + { + if (!CanTarget(defender)) + return; + + // TODO - check range too + var tohit = Mod.Current.Settings.WeaponAccuracyPointBlank + Template.WeaponAccuracy + Container.Accuracy - defender.Evasion; + // TODO - moddable min/max hit chances with per-weapon overrides + if (tohit > 99) + tohit = 99; + if (tohit < 1) + tohit = 1; + var hit = RandomHelper.Range(0, 99) < tohit; + battle.LogShot(this, hit); + if (hit) + { + var shot = new Shot(this, defender, range); + defender.TakeDamage(Template.ComponentTemplate.WeaponInfo.DamageType, shot.Damage, null); + if (defender.MaxNormalShields < defender.NormalShields) + defender.NormalShields = defender.MaxNormalShields; + if (defender.MaxPhasedShields < defender.PhasedShields) + defender.PhasedShields = defender.MaxPhasedShields; + if (defender.IsDestroyed) + battle.LogTargetDeath(defender); + } + }*/ + + public void Dispose() + { + Hitpoints = 0; + } + + public int? Repair(int? amount = null) + { + if (this.HasAbility("Component Destroyed On Use") || this.HasAbility("Space Object Destroyed On Use")) + { + // if component is destroyed on use, it can only be repaired at a friendly colony + // SE4 said a friendly spaceyard, but that's still exploitable by using mobile SY ships + if (!Container.Sector.SpaceObjects.OfType().Any(p => p.Owner == Owner)) + return amount; + } + + if (amount == null) + { + Hitpoints = MaxHitpoints; + return amount; + } + else + { + var actual = Math.Min(MaxHitpoints - Hitpoints, amount.Value); + Hitpoints += actual; + return amount.Value - actual; + } + } + + public void ReplenishShields(int? amount = null) + { + // nothing to do + } + + public int TakeDamage(Hit hit, PRNG dice = null) + { + int damage = hit.NominalDamage; + var realhit = new Hit(hit.Shot, this, damage); + var dt = realhit.Shot?.DamageType ?? DamageType.Normal; + var df = dt.ComponentDamage.Evaluate(realhit); + var dp = dt.ComponentPiercing.Evaluate(realhit); + var factoredDmg = df.PercentOfRounded(damage); + var piercing = dp.PercentOfRounded(damage); + var realdmg = Math.Min(Hitpoints, factoredDmg); + var nominalDamageSpent = realdmg / ((df + dp) / 100); + Hitpoints -= realdmg; + return damage - nominalDamageSpent; + } + + public override string ToString() + { + return Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Technology/ComponentReference.cs b/FrEee/Objects/Technology/ComponentReference.cs similarity index 87% rename from FrEee/Game/Objects/Technology/ComponentReference.cs rename to FrEee/Objects/Technology/ComponentReference.cs index 7129003c1..8ed179f22 100644 --- a/FrEee/Game/Objects/Technology/ComponentReference.cs +++ b/FrEee/Objects/Technology/ComponentReference.cs @@ -1,53 +1,53 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using FrEee.Game.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Technology -{ - /// - /// A reference to a component on a vehicle. - /// - /// TODO - implement client side cache (see GalaxyReference) - public class ComponentReference : IReference<(long, int), Component> - { - public ComponentReference(long vehicleID, int componentIndex) - { - vehicle = new GalaxyReference(vehicleID); - ComponentIndex = ComponentIndex; - } - - public ComponentReference(Component c) - { - Vehicle = c.Container; - ComponentIndex = Vehicle.Components.IndexOf(c); - } - - /// - /// First value is the vehicle ID, second value is the index of the component on the vehicle's component list. - /// - public (long, int) ID => (vehicle.ID, ComponentIndex); - public bool HasValue => Value != null; - public Component Value => Vehicle?.Components?[ComponentIndex]; - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - - } - - private GalaxyReference vehicle { get; set; } - - [DoNotSerialize(false)] - public IVehicle Vehicle - { - get => vehicle.Value; - set => vehicle = value.ReferViaGalaxy(); - } - - public int ComponentIndex { get; set; } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using FrEee.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Technology +{ + /// + /// A reference to a component on a vehicle. + /// + /// TODO - implement client side cache (see GalaxyReference) + public class ComponentReference : IReference<(long, int), Component> + { + public ComponentReference(long vehicleID, int componentIndex) + { + vehicle = new GalaxyReference(vehicleID); + ComponentIndex = ComponentIndex; + } + + public ComponentReference(Component c) + { + Vehicle = c.Container; + ComponentIndex = Vehicle.Components.IndexOf(c); + } + + /// + /// First value is the vehicle ID, second value is the index of the component on the vehicle's component list. + /// + public (long, int) ID => (vehicle.ID, ComponentIndex); + public bool HasValue => Value != null; + public Component Value => Vehicle?.Components?[ComponentIndex]; + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + + } + + private GalaxyReference vehicle { get; set; } + + [DoNotSerialize(false)] + public IVehicle Vehicle + { + get => vehicle.Value; + set => vehicle = value.ReferViaGalaxy(); + } + + public int ComponentIndex { get; set; } + } +} diff --git a/FrEee/Game/Objects/Technology/DirectFireWeaponInfo.cs b/FrEee/Objects/Technology/DirectFireWeaponInfo.cs similarity index 88% rename from FrEee/Game/Objects/Technology/DirectFireWeaponInfo.cs rename to FrEee/Objects/Technology/DirectFireWeaponInfo.cs index 58d83571e..8579a1aff 100644 --- a/FrEee/Game/Objects/Technology/DirectFireWeaponInfo.cs +++ b/FrEee/Objects/Technology/DirectFireWeaponInfo.cs @@ -1,25 +1,25 @@ -using FrEee.Modding; -using System; - -namespace FrEee.Game.Objects.Technology -{ - [Serializable] - public class DirectFireWeaponInfo : WeaponInfo - { - /// - /// Accuracy bonus or penalty for this weapon. - /// - public Formula AccuracyModifier { get; set; } - - public override Enumerations.WeaponTypes WeaponType - { - get - { - if (IsPointDefense) - return Enumerations.WeaponTypes.DirectFirePointDefense; - else - return Enumerations.WeaponTypes.DirectFire; - } - } - } +using FrEee.Modding; +using System; + +namespace FrEee.Objects.Technology +{ + [Serializable] + public class DirectFireWeaponInfo : WeaponInfo + { + /// + /// Accuracy bonus or penalty for this weapon. + /// + public Formula AccuracyModifier { get; set; } + + public override Enumerations.WeaponTypes WeaponType + { + get + { + if (IsPointDefense) + return Enumerations.WeaponTypes.DirectFirePointDefense; + else + return Enumerations.WeaponTypes.DirectFire; + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Technology/Facility.cs b/FrEee/Objects/Technology/Facility.cs similarity index 92% rename from FrEee/Game/Objects/Technology/Facility.cs rename to FrEee/Objects/Technology/Facility.cs index 193fefcd9..d10b5ee0f 100644 --- a/FrEee/Game/Objects/Technology/Facility.cs +++ b/FrEee/Objects/Technology/Facility.cs @@ -1,426 +1,426 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Objects.Technology -{ - /// - /// A large immobile installation on a colony. - /// - [Serializable] - public class Facility : IOwnableAbilityObject, IConstructable, IDamageable, IDisposable, IContainable, IFormulaHost, IRecyclable, IUpgradeable, IDataObject - { - public Facility(FacilityTemplate template) - { - Template = template; - ConstructionProgress = new ResourceQuantity(); - Hitpoints = MaxHitpoints; - } - - public IEnumerable Abilities - { - get { return Template.Abilities; } - } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.Facility; } - } - - /// - /// TODO - "armor" facilities that are hit before other facilities on a planet? - /// - public int ArmorHitpoints - { - get { return 0; } - } - - public IEnumerable Children - { - get { yield break; } - } - - public ResourceQuantity ConstructionProgress - { - get; - set; - } - - /// - /// Finds the planet which contains this facility. - /// - /// - public Planet Container - { - get - { - return Galaxy.Current.FindSpaceObjects().SingleOrDefault(p => p.Colony != null && p.Colony.Facilities.Contains(this)); - } - } - - public ResourceQuantity Cost - { - get { return Template.Cost.Evaluate(this); } - } - - public int HitChance - { - // TODO - moddable facility hit chance - get { return 1000; } - } - - public int Hitpoints - { - get; - set; - } - - public int HullHitpoints - { - get { return Hitpoints; } - } - - [DoNotSerialize] - public Image Icon - { - get { return Template.Icon; } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return Template.IconPaths; - } - } - - public long ID - { - get; - set; - } - - public IEnumerable IntrinsicAbilities - { - get { return Abilities; } - } - - public bool IsDestroyed - { - get { return Hitpoints <= 0; } - } - - public bool IsDisposed { get; set; } - - public bool IsObsolescent - { - get - { - return Template.IsObsolescent; - } - } - - /// - /// Facilities cannot be manually obsoleted; they are only obsoleted by unlocking new ones. - /// - public bool IsObsolete - { - get { return this.IsObsolescent; } - } - - public Facility LatestVersion - { - get - { - if (IsObsolescent) - return Template.Instantiate(); - else - return this; - } - } - - public int MaxArmorHitpoints - { - get { return 0; } - } - - public int MaxHitpoints - { - get - { - // TODO - moddable facility HP - return Cost.Sum(x => x.Value) / 10; - } - } - - public int MaxHullHitpoints - { - get { return MaxHitpoints; } - } - - public int MaxNormalShields - { - get { return 0; } - } - - public int MaxPhasedShields - { - get { return 0; } - } - - public int MaxShieldHitpoints - { - get { return 0; } - } - - public string Name { get { return Template.Name.Evaluate(this); } } - - public IEnumerable NewerVersions - { - get { return Galaxy.Current.FindSpaceObjects().Where(p => p.HasColony).SelectMany(p => p.Colony.Facilities).Where(f => Template.UpgradesTo(f.Template)); } - } - - /// - /// Facilities do not have shields, though they may provide them to colonies. - /// - [DoNotSerialize(false)] - public int NormalShields - { - get - { - return 0; - } - set - { - throw new NotSupportedException("Facilities do not have shields, though they may provide them to colonies."); - } - } - - public IEnumerable OlderVersions - { - get { return Galaxy.Current.FindSpaceObjects().Where(p => p.HasColony).SelectMany(p => p.Colony.Facilities).Where(f => f.Template.UpgradesTo(Template)); } - } - - [DoNotSerialize(false)] - public Empire Owner - { - get - { - return Container?.Owner; - } - set - { - // HACK - transfer ownership of entire colony since facilities can only belong to colony owner anyway - if (Container != null && Container.Colony != null) - Container.Colony.Owner = value; - } - } - - public IEnumerable Parents - { - get - { - if (Container != null) - yield return Container; - } - } - - /// - /// Facilities do not have shields, though they may provide them to colonies. - /// - [DoNotSerialize(false)] - public int PhasedShields - { - get - { - return 0; - } - set - { - throw new NotSupportedException("Facilities do not have shields, though they may provide them to colonies."); - } - } - - [DoNotSerialize] - public Image Portrait - { - get { return Template.Portrait; } - } - - public IEnumerable PortraitPaths - { - get - { - return Template.PortraitPaths; - } - } - - public IMobileSpaceObject RecycleContainer - { - get { return Container; } - } - - public ResourceQuantity ScrapValue - { - get { return Cost * Mod.Current.Settings.ScrapFacilityReturnRate / 100; } - } - - public int ShieldHitpoints - { - get { return 0; } - } - - /// - /// The template for this facility. - /// Specifies the basic stats of the facility and its abilities. - /// - [DoNotSerialize] - public FacilityTemplate Template { get { return template; } private set { template = value; } } - - IConstructionTemplate IConstructable.Template - { - get { return Template; } - } - - public IEnumerable UnstackedAbilities - { - get { return Abilities; } - } - - public IDictionary Variables - { - get - { - return new Dictionary - { - {"colony", Container.Colony}, - {"planet", Container}, - {"empire", Owner} - }; - } - } - - [SerializationPriority(1)] - private ModReference template { get; set; } - - public SafeDictionary Data - { - get - { - var dict = new SafeDictionary(); - if (ConstructionProgress != Cost) - dict.Add(nameof(ConstructionProgress), ConstructionProgress); - if (Hitpoints != MaxHitpoints) - dict.Add(nameof(Hitpoints), Hitpoints); - dict.Add(nameof(ID), ID); - dict.Add(nameof(template), template); - return dict; - } - set - { - template = (ModReference)value[nameof(template)]; // comes first because other properties depend on its data - ConstructionProgress = (ResourceQuantity)(value[nameof(ConstructionProgress)] ?? Cost); - Hitpoints = (int)(value[nameof(Hitpoints)] ?? MaxHitpoints); - ID = (long)value[nameof(ID)]; - } - } - - public void Dispose() - { - if (IsDisposed) - return; - if (Container != null) - { - var col = Container.Colony; - col.Facilities.Remove(this); - col.UpdateEmpireMemories(); - } - } - - /// - /// Places the facility. - /// - /// Must be a colonized planet. - public void Place(ISpaceObject sobj) - { - if (sobj is Planet) - { - var planet = (Planet)sobj; - if (planet.Colony == null) - throw new ArgumentException("Facilities can only be placed on colonized planets."); - if (planet.Colony.Facilities.Count >= planet.MaxFacilities) - planet.Colony.Owner.Log.Add(planet.CreateLogMessage(this + " cannot be constructed at " + planet + " because there is no more space available for facilities there.", LogMessages.LogMessageType.Warning)); - else - planet.Colony.Facilities.Add(this); - } - else - throw new ArgumentException("Facilities can only be placed on colonized planets."); - } - - // TODO - dynamic formula evaluation - public void Recycle(IRecycleBehavior behavior, bool didExecute = false) - { - // TODO - need to do more stuff to recycle? - if (!didExecute) - behavior.Execute(this, true); - } - - public int? Repair(int? amount = null) - { - if (amount == null) - { - Hitpoints = MaxHitpoints; - return amount; - } - else - { - var actual = Math.Min(MaxHitpoints - Hitpoints, amount.Value); - Hitpoints += actual; - return amount.Value - actual; - } - } - - public void ReplenishShields(int? amount = null) - { - // do nothing - } - - public int TakeDamage(Hit hit, PRNG dice = null) - { - // HACK - we reduced max HP of facilities - if (Hitpoints > MaxHitpoints) - Repair(); - - int damage = hit.NominalDamage; - var realhit = new Hit(hit.Shot, this, damage); - var df = realhit.Shot.DamageType.FacilityDamage.Evaluate(realhit); - var dp = realhit.Shot.DamageType.FacilityPiercing.Evaluate(realhit); - var factoredDmg = df.PercentOfRounded(damage); - var piercing = dp.PercentOfRounded(damage); - var realdmg = Math.Min(Hitpoints, factoredDmg); - var nominalDamageSpent = (int)(realdmg / ((df + dp) / 100d)); - Hitpoints -= realdmg; - if (IsDestroyed) - Dispose(); - return damage - nominalDamageSpent; - } - - public override string ToString() - { - return Name; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace FrEee.Objects.Technology +{ + /// + /// A large immobile installation on a colony. + /// + [Serializable] + public class Facility : IOwnableAbilityObject, IConstructable, IDamageable, IDisposable, IContainable, IFormulaHost, IRecyclable, IUpgradeable, IDataObject + { + public Facility(FacilityTemplate template) + { + Template = template; + ConstructionProgress = new ResourceQuantity(); + Hitpoints = MaxHitpoints; + } + + public IEnumerable Abilities + { + get { return Template.Abilities; } + } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.Facility; } + } + + /// + /// TODO - "armor" facilities that are hit before other facilities on a planet? + /// + public int ArmorHitpoints + { + get { return 0; } + } + + public IEnumerable Children + { + get { yield break; } + } + + public ResourceQuantity ConstructionProgress + { + get; + set; + } + + /// + /// Finds the planet which contains this facility. + /// + /// + public Planet Container + { + get + { + return Galaxy.Current.FindSpaceObjects().SingleOrDefault(p => p.Colony != null && p.Colony.Facilities.Contains(this)); + } + } + + public ResourceQuantity Cost + { + get { return Template.Cost.Evaluate(this); } + } + + public int HitChance + { + // TODO - moddable facility hit chance + get { return 1000; } + } + + public int Hitpoints + { + get; + set; + } + + public int HullHitpoints + { + get { return Hitpoints; } + } + + [DoNotSerialize] + public Image Icon + { + get { return Template.Icon; } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return Template.IconPaths; + } + } + + public long ID + { + get; + set; + } + + public IEnumerable IntrinsicAbilities + { + get { return Abilities; } + } + + public bool IsDestroyed + { + get { return Hitpoints <= 0; } + } + + public bool IsDisposed { get; set; } + + public bool IsObsolescent + { + get + { + return Template.IsObsolescent; + } + } + + /// + /// Facilities cannot be manually obsoleted; they are only obsoleted by unlocking new ones. + /// + public bool IsObsolete + { + get { return this.IsObsolescent; } + } + + public Facility LatestVersion + { + get + { + if (IsObsolescent) + return Template.Instantiate(); + else + return this; + } + } + + public int MaxArmorHitpoints + { + get { return 0; } + } + + public int MaxHitpoints + { + get + { + // TODO - moddable facility HP + return Cost.Sum(x => x.Value) / 10; + } + } + + public int MaxHullHitpoints + { + get { return MaxHitpoints; } + } + + public int MaxNormalShields + { + get { return 0; } + } + + public int MaxPhasedShields + { + get { return 0; } + } + + public int MaxShieldHitpoints + { + get { return 0; } + } + + public string Name { get { return Template.Name.Evaluate(this); } } + + public IEnumerable NewerVersions + { + get { return Galaxy.Current.FindSpaceObjects().Where(p => p.HasColony).SelectMany(p => p.Colony.Facilities).Where(f => Template.UpgradesTo(f.Template)); } + } + + /// + /// Facilities do not have shields, though they may provide them to colonies. + /// + [DoNotSerialize(false)] + public int NormalShields + { + get + { + return 0; + } + set + { + throw new NotSupportedException("Facilities do not have shields, though they may provide them to colonies."); + } + } + + public IEnumerable OlderVersions + { + get { return Galaxy.Current.FindSpaceObjects().Where(p => p.HasColony).SelectMany(p => p.Colony.Facilities).Where(f => f.Template.UpgradesTo(Template)); } + } + + [DoNotSerialize(false)] + public Empire Owner + { + get + { + return Container?.Owner; + } + set + { + // HACK - transfer ownership of entire colony since facilities can only belong to colony owner anyway + if (Container != null && Container.Colony != null) + Container.Colony.Owner = value; + } + } + + public IEnumerable Parents + { + get + { + if (Container != null) + yield return Container; + } + } + + /// + /// Facilities do not have shields, though they may provide them to colonies. + /// + [DoNotSerialize(false)] + public int PhasedShields + { + get + { + return 0; + } + set + { + throw new NotSupportedException("Facilities do not have shields, though they may provide them to colonies."); + } + } + + [DoNotSerialize] + public Image Portrait + { + get { return Template.Portrait; } + } + + public IEnumerable PortraitPaths + { + get + { + return Template.PortraitPaths; + } + } + + public IMobileSpaceObject RecycleContainer + { + get { return Container; } + } + + public ResourceQuantity ScrapValue + { + get { return Cost * Mod.Current.Settings.ScrapFacilityReturnRate / 100; } + } + + public int ShieldHitpoints + { + get { return 0; } + } + + /// + /// The template for this facility. + /// Specifies the basic stats of the facility and its abilities. + /// + [DoNotSerialize] + public FacilityTemplate Template { get { return template; } private set { template = value; } } + + IConstructionTemplate IConstructable.Template + { + get { return Template; } + } + + public IEnumerable UnstackedAbilities + { + get { return Abilities; } + } + + public IDictionary Variables + { + get + { + return new Dictionary + { + {"colony", Container.Colony}, + {"planet", Container}, + {"empire", Owner} + }; + } + } + + [SerializationPriority(1)] + private ModReference template { get; set; } + + public SafeDictionary Data + { + get + { + var dict = new SafeDictionary(); + if (ConstructionProgress != Cost) + dict.Add(nameof(ConstructionProgress), ConstructionProgress); + if (Hitpoints != MaxHitpoints) + dict.Add(nameof(Hitpoints), Hitpoints); + dict.Add(nameof(ID), ID); + dict.Add(nameof(template), template); + return dict; + } + set + { + template = (ModReference)value[nameof(template)]; // comes first because other properties depend on its data + ConstructionProgress = (ResourceQuantity)(value[nameof(ConstructionProgress)] ?? Cost); + Hitpoints = (int)(value[nameof(Hitpoints)] ?? MaxHitpoints); + ID = (long)value[nameof(ID)]; + } + } + + public void Dispose() + { + if (IsDisposed) + return; + if (Container != null) + { + var col = Container.Colony; + col.Facilities.Remove(this); + col.UpdateEmpireMemories(); + } + } + + /// + /// Places the facility. + /// + /// Must be a colonized planet. + public void Place(ISpaceObject sobj) + { + if (sobj is Planet) + { + var planet = (Planet)sobj; + if (planet.Colony == null) + throw new ArgumentException("Facilities can only be placed on colonized planets."); + if (planet.Colony.Facilities.Count >= planet.MaxFacilities) + planet.Colony.Owner.Log.Add(planet.CreateLogMessage(this + " cannot be constructed at " + planet + " because there is no more space available for facilities there.", LogMessages.LogMessageType.Warning)); + else + planet.Colony.Facilities.Add(this); + } + else + throw new ArgumentException("Facilities can only be placed on colonized planets."); + } + + // TODO - dynamic formula evaluation + public void Recycle(IRecycleBehavior behavior, bool didExecute = false) + { + // TODO - need to do more stuff to recycle? + if (!didExecute) + behavior.Execute(this, true); + } + + public int? Repair(int? amount = null) + { + if (amount == null) + { + Hitpoints = MaxHitpoints; + return amount; + } + else + { + var actual = Math.Min(MaxHitpoints - Hitpoints, amount.Value); + Hitpoints += actual; + return amount.Value - actual; + } + } + + public void ReplenishShields(int? amount = null) + { + // do nothing + } + + public int TakeDamage(Hit hit, PRNG dice = null) + { + // HACK - we reduced max HP of facilities + if (Hitpoints > MaxHitpoints) + Repair(); + + int damage = hit.NominalDamage; + var realhit = new Hit(hit.Shot, this, damage); + var df = realhit.Shot.DamageType.FacilityDamage.Evaluate(realhit); + var dp = realhit.Shot.DamageType.FacilityPiercing.Evaluate(realhit); + var factoredDmg = df.PercentOfRounded(damage); + var piercing = dp.PercentOfRounded(damage); + var realdmg = Math.Min(Hitpoints, factoredDmg); + var nominalDamageSpent = (int)(realdmg / ((df + dp) / 100d)); + Hitpoints -= realdmg; + if (IsDestroyed) + Dispose(); + return damage - nominalDamageSpent; + } + + public override string ToString() + { + return Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Technology/FacilityUpgrade.cs b/FrEee/Objects/Technology/FacilityUpgrade.cs similarity index 91% rename from FrEee/Game/Objects/Technology/FacilityUpgrade.cs rename to FrEee/Objects/Technology/FacilityUpgrade.cs index e1defe2e1..af96d69a6 100644 --- a/FrEee/Game/Objects/Technology/FacilityUpgrade.cs +++ b/FrEee/Objects/Technology/FacilityUpgrade.cs @@ -1,231 +1,231 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Technology -{ - public class FacilityUpgrade : IUpgradeable, IPromotable, INamed - { - public FacilityUpgrade(FacilityTemplate old, FacilityTemplate nu) - { - Old = old; - New = nu; - } - - public ResourceQuantity Cost => New.Cost.Value * Mod.Current.Settings.UpgradeFacilityPercentCost / 100; - - /// - /// The family of facility being upgraded. - /// - public string Family - { - get { return New.Family; } - } - - public bool IsObsolescent - { - get - { - return New.IsObsolescent; - } - } - - public bool IsObsolete - { - get - { - return New.IsObsolete; - } - } - - public FacilityUpgrade LatestVersion - { - get - { - if (IsObsolete) - return new FacilityUpgrade(Old, New.LatestVersion); - else - return this; - } - } - - public string Name - { - get - { - return "Upgrade " + Old + " to " + New; - } - } - - [DoNotSerialize] - public FacilityTemplate New { get { return nu; } private set { nu = value; } } - - public IEnumerable NewerVersions - { - get { return Galaxy.Current.FindSpaceObjects().Select(o => o.ConstructionQueue).ExceptSingle(null).SelectMany(q => q.Orders).Select(o => o.Item).OfType().Where(u => u.New.UpgradesTo(New)); } - } - - [DoNotSerialize] - public FacilityTemplate Old { get { return old; } private set { old = value; } } - - public IEnumerable OlderVersions - { - get { return Galaxy.Current.FindSpaceObjects().Select(o => o.ConstructionQueue).ExceptSingle(null).SelectMany(q => q.Orders).Select(o => o.Item).OfType().Where(u => New.UpgradesTo(u.New)); } - } - - private ModReference nu { get; set; } - private ModReference old { get; set; } - - public static bool operator !=(FacilityUpgrade x, FacilityUpgrade y) - { - return !(x == y); - } - - public static bool operator ==(FacilityUpgrade x, FacilityUpgrade y) - { - return x.SafeEquals(y); - } - - public override bool Equals(object obj) - { - var fu = obj as FacilityUpgrade; - if (fu == null) - return false; - return fu.Old == Old && fu.New == New; - } - - public override int GetHashCode() - { - return HashCodeMasher.Mash(Old, New); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - old.ReplaceClientIDs(idmap, done); - nu.ReplaceClientIDs(idmap, done); - } - } - - /*public bool RequiresColonyQueue - { - get - { - return true; - } - } - - public bool RequiresSpaceYardQueue - { - get - { - return false; - } - } - - public IList> UnlockRequirements - { - get - { - return New.UnlockRequirements; - } - } - - public string ResearchGroup - { - get - { - return New.ResearchGroup; - } - } - - public string Name - { - get - { - return "Upgrade to " + New; - } - } - - public Image Icon - { - get - { - return New.Icon; - } - } - - public Image Portrait - { - get - { - return New.Portrait; - } - } - - public bool IsMemory - { - get; set; - } - - public double Timestamp - { - get; set; - } - - public long ID - { - get; set; - } - - public bool IsDisposed - { - get; set; - } - - public Empire Owner - { - get; private set; - } - - public bool HasBeenUnlockedBy(Empire emp) - { - return New.HasBeenUnlockedBy(emp); - } - - /// - /// You can only see your own facility upgrades. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Owned; - return Visibility.Unknown; - } - - public void Redact(Empire emp) - { - // nothing to do, it's only visible if it's yours anyway - } - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - public void Dispose() - { - // nothing to dispose of - }*/ - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Technology +{ + public class FacilityUpgrade : IUpgradeable, IPromotable, INamed + { + public FacilityUpgrade(FacilityTemplate old, FacilityTemplate nu) + { + Old = old; + New = nu; + } + + public ResourceQuantity Cost => New.Cost.Value * Mod.Current.Settings.UpgradeFacilityPercentCost / 100; + + /// + /// The family of facility being upgraded. + /// + public string Family + { + get { return New.Family; } + } + + public bool IsObsolescent + { + get + { + return New.IsObsolescent; + } + } + + public bool IsObsolete + { + get + { + return New.IsObsolete; + } + } + + public FacilityUpgrade LatestVersion + { + get + { + if (IsObsolete) + return new FacilityUpgrade(Old, New.LatestVersion); + else + return this; + } + } + + public string Name + { + get + { + return "Upgrade " + Old + " to " + New; + } + } + + [DoNotSerialize] + public FacilityTemplate New { get { return nu; } private set { nu = value; } } + + public IEnumerable NewerVersions + { + get { return Galaxy.Current.FindSpaceObjects().Select(o => o.ConstructionQueue).ExceptSingle(null).SelectMany(q => q.Orders).Select(o => o.Item).OfType().Where(u => u.New.UpgradesTo(New)); } + } + + [DoNotSerialize] + public FacilityTemplate Old { get { return old; } private set { old = value; } } + + public IEnumerable OlderVersions + { + get { return Galaxy.Current.FindSpaceObjects().Select(o => o.ConstructionQueue).ExceptSingle(null).SelectMany(q => q.Orders).Select(o => o.Item).OfType().Where(u => New.UpgradesTo(u.New)); } + } + + private ModReference nu { get; set; } + private ModReference old { get; set; } + + public static bool operator !=(FacilityUpgrade x, FacilityUpgrade y) + { + return !(x == y); + } + + public static bool operator ==(FacilityUpgrade x, FacilityUpgrade y) + { + return x.SafeEquals(y); + } + + public override bool Equals(object obj) + { + var fu = obj as FacilityUpgrade; + if (fu == null) + return false; + return fu.Old == Old && fu.New == New; + } + + public override int GetHashCode() + { + return HashCodeMasher.Mash(Old, New); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + old.ReplaceClientIDs(idmap, done); + nu.ReplaceClientIDs(idmap, done); + } + } + + /*public bool RequiresColonyQueue + { + get + { + return true; + } + } + + public bool RequiresSpaceYardQueue + { + get + { + return false; + } + } + + public IList> UnlockRequirements + { + get + { + return New.UnlockRequirements; + } + } + + public string ResearchGroup + { + get + { + return New.ResearchGroup; + } + } + + public string Name + { + get + { + return "Upgrade to " + New; + } + } + + public Image Icon + { + get + { + return New.Icon; + } + } + + public Image Portrait + { + get + { + return New.Portrait; + } + } + + public bool IsMemory + { + get; set; + } + + public double Timestamp + { + get; set; + } + + public long ID + { + get; set; + } + + public bool IsDisposed + { + get; set; + } + + public Empire Owner + { + get; private set; + } + + public bool HasBeenUnlockedBy(Empire emp) + { + return New.HasBeenUnlockedBy(emp); + } + + /// + /// You can only see your own facility upgrades. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Owned; + return Visibility.Unknown; + } + + public void Redact(Empire emp) + { + // nothing to do, it's only visible if it's yours anyway + } + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + public void Dispose() + { + // nothing to dispose of + }*/ + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Technology/Hull.cs b/FrEee/Objects/Technology/Hull.cs similarity index 92% rename from FrEee/Game/Objects/Technology/Hull.cs rename to FrEee/Objects/Technology/Hull.cs index 1af1ac3f8..5d0427cdf 100644 --- a/FrEee/Game/Objects/Technology/Hull.cs +++ b/FrEee/Objects/Technology/Hull.cs @@ -1,423 +1,423 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; - -namespace FrEee.Game.Objects.Technology -{ - /// - /// A vehicle hull. - /// - /// The type of vehicle. - [Serializable] - public class Hull : IHull where T : IVehicle - { - public Hull() - { - PictureNames = new List(); - UnlockRequirements = new List>(); - Abilities = new List(); - Cost = new ResourceQuantity(); - } - - public IList Abilities { get; private set; } - - public AbilityTargets AbilityTarget - { - get - { - if (VehicleType == VehicleTypes.Base) - return AbilityTargets.Base; - if (VehicleType == VehicleTypes.Ship) - return AbilityTargets.Ship; - if (VehicleType == VehicleTypes.Fighter) - return AbilityTargets.Fighter; - if (VehicleType == VehicleTypes.Satellite) - return AbilityTargets.Satellite; - if (VehicleType == VehicleTypes.Mine) - return AbilityTargets.Mine; - if (VehicleType == VehicleTypes.Drone) - return AbilityTargets.Drone; - if (VehicleType == VehicleTypes.Troop) - return AbilityTargets.Troop; - if (VehicleType == VehicleTypes.WeaponPlatform) - return AbilityTargets.WeaponPlatform; - return AbilityTargets.Invalid; - } - } - - /// - /// Can this hull use components with the Ship Auxiliary Control ability? - /// - public bool CanUseAuxiliaryControl { get; set; } - - public IEnumerable Children - { - get { yield break; } - } - - /// - /// An abbeviation for the ship's name. - /// - public string Code { get; set; } - - /// - /// The cost to build this hull. - /// - public ResourceQuantity Cost { get; set; } - - /// - /// A description of the hull. - /// - public string Description { get; set; } - - [DoNotSerialize] - public Image Icon - { - get - { - if (Empire.Current == null) - return null; - return GetIcon(Empire.Current.ShipsetPath); - } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return GetPaths("Mini"); - } - } - - public IEnumerable IntrinsicAbilities - { - get { return Abilities; } - } - - public bool IsDisposed { get; set; } - - public bool IsMemory - { - get; - set; - } - - /// - /// Hulls cannot currently be obsoleted. - /// TODO - hull family field - /// - public bool IsObsolescent - { - get { return false; } - } - - /// - /// Hulls cannot manually be obsoleted. - /// - public bool IsObsolete - { - get { return false; } - } - - /// - /// Hulls cannot currently be obsoleted. - /// TODO - hull family field - /// - public IHull LatestVersion - { - get { return this; } - } - - IHull IUpgradeable.LatestVersion - { - get { return LatestVersion; } - } - - /// - /// Maximum number of engines allowed. - /// - public int MaxEngines { get; set; } - - /// - /// Required number of crew quarters components. - /// - public int MinCrewQuarters { get; set; } - - /// - /// Required number of life support components. - /// - public int MinLifeSupport { get; set; } - - /// - /// Minimum percentage of space required to be used for cargo-storage components. - /// - public int MinPercentCargoBays { get; set; } - - /// - /// Minimum percentage of space required to be used for colonizing components. - /// - public int MinPercentColonyModules { get; set; } - - /// - /// Minimum percentage of space required to be used for fighter-launching components. - /// - public int MinPercentFighterBays { get; set; } - - public string ModID { get; set; } - - /// - /// The name of the hull. - /// - public string Name { get; set; } - - /// - /// Does this hull need a component with the Ship Bridge ability? - /// - public bool NeedsBridge { get; set; } - - /// - /// Mounts cannot currently be obsoleted. - /// TODO - add family and roman numeral properties to mounts - /// - public IEnumerable> NewerVersions - { - get { yield break; } - } - - IEnumerable IUpgradeable.NewerVersions - { - get { return NewerVersions; } - } - - /// - /// Mounts cannot currently be obsoleted. - /// TODO - add family and roman numeral properties to mounts - /// - public IEnumerable> OlderVersions - { - get { yield break; } - } - - IEnumerable IUpgradeable.OlderVersions - { - get { return OlderVersions; } - } - - public Empire Owner - { - get { return null; } - } - - public IEnumerable Parents - { - get - { - yield break; - } - } - - /// - /// Names of pictures from the approrpriate shipset to use for the hull. - /// - public IList PictureNames { get; private set; } - - [DoNotSerialize] - public Image Portrait - { - get - { - if (Empire.Current == null) - return null; - return GetPortrait(Empire.Current.ShipsetPath); - } - } - - public IEnumerable PortraitPaths - { - get - { - return GetPaths("Portrait"); - } - } - - public string ResearchGroup - { - get { return "Hull"; } - } - - /// - /// A shorter name for use in some places. - /// - public string ShortName { get; set; } - - /// - /// The amount of space available for components. - /// - public int Size { get; set; } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - /// - /// The number of thrust points required to generate 1 movement point. - /// Also known as Engines Per Move, though technically engines can generate more than 1 thrust point. - /// - public int ThrustPerMove { get; set; } - - public double Timestamp - { - get; - set; - } - - /// - /// Requirements to unlock this hull. - /// - public IList> UnlockRequirements - { - get; - private set; - } - - public VehicleTypes VehicleType - { - get - { - if (typeof(T) == typeof(Ship)) - return VehicleTypes.Ship; - if (typeof(T) == typeof(Base)) - return VehicleTypes.Base; - if (typeof(T) == typeof(Fighter)) - return VehicleTypes.Fighter; - if (typeof(T) == typeof(Troop)) - return VehicleTypes.Troop; - if (typeof(T) == typeof(Satellite)) - return VehicleTypes.Satellite; - if (typeof(T) == typeof(Drone)) - return VehicleTypes.Drone; - if (typeof(T) == typeof(Mine)) - return VehicleTypes.Mine; - if (typeof(T) == typeof(WeaponPlatform)) - return VehicleTypes.WeaponPlatform; - return VehicleTypes.Invalid; - } - } - - public string VehicleTypeName - { - get - { - return VehicleType.ToSpacedString(); - } - } - - public bool CanUseMount(Mount m) - { - if (m == null) - return true; - if (m.MinimumVehicleSize != null && m.MinimumVehicleSize > Size) - return false; - if (m.MaximumVehicleSize != null && m.MaximumVehicleSize < Size) - return false; - if (!m.VehicleTypes.HasFlag(VehicleType)) - return false; - return true; - } - - /// - /// Mod objects are fully known to everyone. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - return Visibility.Scanned; - } - - public IDesign CreateDesign() - { - return new Design { Hull = this }; - } - - public void Dispose() - { - if (IsDisposed) - return; - if (Mod.Current != null) - { - var h = (IHull)this; - Mod.Current.Hulls.Remove(h); - } - } - - /// - /// The icon for this hull. - /// - public Image GetIcon(string shipsetPath) - { - if (shipsetPath == null) - return null; - return Pictures.GetIcon(this, shipsetPath); - } - - /// - /// The portrait for this hull. - /// - public Image GetPortrait(string shipsetPath) - { - if (shipsetPath == null) - return null; - return Pictures.GetPortrait(this, shipsetPath); - } - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - public void Redact(Empire emp) - { - // TODO - tech items that aren't visible until some requirements are met - } - - public override string ToString() - { - return Name; - } - - private IEnumerable GetPaths(string pathtype) - { - var paths = new List(); - - var shipsetPath = "Default"; - if (Empire.Current != null) - shipsetPath = Empire.Current.ShipsetPath; - - foreach (var s in PictureNames) - { - if (Mod.Current?.RootPath != null) - { - paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, pathtype + "_" + s)); - paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, shipsetPath + "_" + pathtype + "_" + s)); // for SE4 shipset compatibility - } - paths.Add(Path.Combine("Pictures", "Races", shipsetPath, pathtype + "_" + s)); - paths.Add(Path.Combine("Pictures", "Races", shipsetPath, shipsetPath + "_" + pathtype + "_" + s)); // for SE4 shipset compatibility - } - return paths; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; + +namespace FrEee.Objects.Technology +{ + /// + /// A vehicle hull. + /// + /// The type of vehicle. + [Serializable] + public class Hull : IHull where T : IVehicle + { + public Hull() + { + PictureNames = new List(); + UnlockRequirements = new List>(); + Abilities = new List(); + Cost = new ResourceQuantity(); + } + + public IList Abilities { get; private set; } + + public AbilityTargets AbilityTarget + { + get + { + if (VehicleType == VehicleTypes.Base) + return AbilityTargets.Base; + if (VehicleType == VehicleTypes.Ship) + return AbilityTargets.Ship; + if (VehicleType == VehicleTypes.Fighter) + return AbilityTargets.Fighter; + if (VehicleType == VehicleTypes.Satellite) + return AbilityTargets.Satellite; + if (VehicleType == VehicleTypes.Mine) + return AbilityTargets.Mine; + if (VehicleType == VehicleTypes.Drone) + return AbilityTargets.Drone; + if (VehicleType == VehicleTypes.Troop) + return AbilityTargets.Troop; + if (VehicleType == VehicleTypes.WeaponPlatform) + return AbilityTargets.WeaponPlatform; + return AbilityTargets.Invalid; + } + } + + /// + /// Can this hull use components with the Ship Auxiliary Control ability? + /// + public bool CanUseAuxiliaryControl { get; set; } + + public IEnumerable Children + { + get { yield break; } + } + + /// + /// An abbeviation for the ship's name. + /// + public string Code { get; set; } + + /// + /// The cost to build this hull. + /// + public ResourceQuantity Cost { get; set; } + + /// + /// A description of the hull. + /// + public string Description { get; set; } + + [DoNotSerialize] + public Image Icon + { + get + { + if (Empire.Current == null) + return null; + return GetIcon(Empire.Current.ShipsetPath); + } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return GetPaths("Mini"); + } + } + + public IEnumerable IntrinsicAbilities + { + get { return Abilities; } + } + + public bool IsDisposed { get; set; } + + public bool IsMemory + { + get; + set; + } + + /// + /// Hulls cannot currently be obsoleted. + /// TODO - hull family field + /// + public bool IsObsolescent + { + get { return false; } + } + + /// + /// Hulls cannot manually be obsoleted. + /// + public bool IsObsolete + { + get { return false; } + } + + /// + /// Hulls cannot currently be obsoleted. + /// TODO - hull family field + /// + public IHull LatestVersion + { + get { return this; } + } + + IHull IUpgradeable.LatestVersion + { + get { return LatestVersion; } + } + + /// + /// Maximum number of engines allowed. + /// + public int MaxEngines { get; set; } + + /// + /// Required number of crew quarters components. + /// + public int MinCrewQuarters { get; set; } + + /// + /// Required number of life support components. + /// + public int MinLifeSupport { get; set; } + + /// + /// Minimum percentage of space required to be used for cargo-storage components. + /// + public int MinPercentCargoBays { get; set; } + + /// + /// Minimum percentage of space required to be used for colonizing components. + /// + public int MinPercentColonyModules { get; set; } + + /// + /// Minimum percentage of space required to be used for fighter-launching components. + /// + public int MinPercentFighterBays { get; set; } + + public string ModID { get; set; } + + /// + /// The name of the hull. + /// + public string Name { get; set; } + + /// + /// Does this hull need a component with the Ship Bridge ability? + /// + public bool NeedsBridge { get; set; } + + /// + /// Mounts cannot currently be obsoleted. + /// TODO - add family and roman numeral properties to mounts + /// + public IEnumerable> NewerVersions + { + get { yield break; } + } + + IEnumerable IUpgradeable.NewerVersions + { + get { return NewerVersions; } + } + + /// + /// Mounts cannot currently be obsoleted. + /// TODO - add family and roman numeral properties to mounts + /// + public IEnumerable> OlderVersions + { + get { yield break; } + } + + IEnumerable IUpgradeable.OlderVersions + { + get { return OlderVersions; } + } + + public Empire Owner + { + get { return null; } + } + + public IEnumerable Parents + { + get + { + yield break; + } + } + + /// + /// Names of pictures from the approrpriate shipset to use for the hull. + /// + public IList PictureNames { get; private set; } + + [DoNotSerialize] + public Image Portrait + { + get + { + if (Empire.Current == null) + return null; + return GetPortrait(Empire.Current.ShipsetPath); + } + } + + public IEnumerable PortraitPaths + { + get + { + return GetPaths("Portrait"); + } + } + + public string ResearchGroup + { + get { return "Hull"; } + } + + /// + /// A shorter name for use in some places. + /// + public string ShortName { get; set; } + + /// + /// The amount of space available for components. + /// + public int Size { get; set; } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + /// + /// The number of thrust points required to generate 1 movement point. + /// Also known as Engines Per Move, though technically engines can generate more than 1 thrust point. + /// + public int ThrustPerMove { get; set; } + + public double Timestamp + { + get; + set; + } + + /// + /// Requirements to unlock this hull. + /// + public IList> UnlockRequirements + { + get; + private set; + } + + public VehicleTypes VehicleType + { + get + { + if (typeof(T) == typeof(Ship)) + return VehicleTypes.Ship; + if (typeof(T) == typeof(Base)) + return VehicleTypes.Base; + if (typeof(T) == typeof(Fighter)) + return VehicleTypes.Fighter; + if (typeof(T) == typeof(Troop)) + return VehicleTypes.Troop; + if (typeof(T) == typeof(Satellite)) + return VehicleTypes.Satellite; + if (typeof(T) == typeof(Drone)) + return VehicleTypes.Drone; + if (typeof(T) == typeof(Mine)) + return VehicleTypes.Mine; + if (typeof(T) == typeof(WeaponPlatform)) + return VehicleTypes.WeaponPlatform; + return VehicleTypes.Invalid; + } + } + + public string VehicleTypeName + { + get + { + return VehicleType.ToSpacedString(); + } + } + + public bool CanUseMount(Mount m) + { + if (m == null) + return true; + if (m.MinimumVehicleSize != null && m.MinimumVehicleSize > Size) + return false; + if (m.MaximumVehicleSize != null && m.MaximumVehicleSize < Size) + return false; + if (!m.VehicleTypes.HasFlag(VehicleType)) + return false; + return true; + } + + /// + /// Mod objects are fully known to everyone. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + return Visibility.Scanned; + } + + public IDesign CreateDesign() + { + return new Design { Hull = this }; + } + + public void Dispose() + { + if (IsDisposed) + return; + if (Mod.Current != null) + { + var h = (IHull)this; + Mod.Current.Hulls.Remove(h); + } + } + + /// + /// The icon for this hull. + /// + public Image GetIcon(string shipsetPath) + { + if (shipsetPath == null) + return null; + return Pictures.GetIcon(this, shipsetPath); + } + + /// + /// The portrait for this hull. + /// + public Image GetPortrait(string shipsetPath) + { + if (shipsetPath == null) + return null; + return Pictures.GetPortrait(this, shipsetPath); + } + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + public void Redact(Empire emp) + { + // TODO - tech items that aren't visible until some requirements are met + } + + public override string ToString() + { + return Name; + } + + private IEnumerable GetPaths(string pathtype) + { + var paths = new List(); + + var shipsetPath = "Default"; + if (Empire.Current != null) + shipsetPath = Empire.Current.ShipsetPath; + + foreach (var s in PictureNames) + { + if (Mod.Current?.RootPath != null) + { + paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, pathtype + "_" + s)); + paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, shipsetPath + "_" + pathtype + "_" + s)); // for SE4 shipset compatibility + } + paths.Add(Path.Combine("Pictures", "Races", shipsetPath, pathtype + "_" + s)); + paths.Add(Path.Combine("Pictures", "Races", shipsetPath, shipsetPath + "_" + pathtype + "_" + s)); // for SE4 shipset compatibility + } + return paths; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Technology/Mount.cs b/FrEee/Objects/Technology/Mount.cs similarity index 91% rename from FrEee/Game/Objects/Technology/Mount.cs rename to FrEee/Objects/Technology/Mount.cs index 46e2b7da7..ac951d5c4 100644 --- a/FrEee/Game/Objects/Technology/Mount.cs +++ b/FrEee/Objects/Technology/Mount.cs @@ -1,278 +1,278 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Drawing; -using System.IO; - -namespace FrEee.Game.Objects.Technology -{ - /// - /// A mount that can be applied to a component. - /// - public class Mount : IResearchable, IModObject, IUpgradeable - { - public Mount() - { - AbilityPercentages = new Dictionary>>(); - AbilityModifiers = new Dictionary>>(); - UnlockRequirements = new List>(); - } - - /// - /// Additive modifiers for abilities. - /// - public IDictionary>> AbilityModifiers - { - get; - set; - } - - /// - /// Percentage factors for abilities. - /// - public IDictionary>> AbilityPercentages - { - get; - set; - } - - /// - /// An abbreviation for this mount. - /// - public Formula Code { get; set; } - - /// - /// Percentage of normal component cost. - /// - public Formula CostPercent { get; set; } - - /// - /// A description of this mount. - /// - public Formula Description { get; set; } - - /// - /// Percentage of normal component hitpoints. - /// - public Formula DurabilityPercent { get; set; } - - public Image Icon - { - get { return Pictures.GetIcon(this); } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return PortraitPaths; - } - } - - public bool IsDisposed { get; set; } - - public bool IsMemory - { - get; - set; - } - - /// - /// Mounts cannot currently be obsoleted. - /// TODO - add family and roman numeral properties to mounts - /// - public bool IsObsolescent - { - get { return false; } - } - - /// - /// Mounts cannot currently be manually obsoleted. - /// - public bool IsObsolete - { - get { return false; } - } - - /// - /// Mounts cannot currently be obsoleted. - /// TODO - add family and roman numeral properties to mounts - /// - public Mount LatestVersion - { - get { return this; } - } - - /// - /// Maximum vehicle size to use this mount. Null means no restriction. - /// - public Formula MaximumVehicleSize { get; set; } - - /// - /// Minimum vehicle size to use this mount. Null means no restriction. - /// - public Formula MinimumVehicleSize { get; set; } - - public string ModID { get; set; } - - /// - /// The full name of this mount. - /// - public Formula Name { get; set; } - - string INamed.Name - { - get { return Name; } - } - - /// - /// Mounts cannot currently be obsoleted. - /// TODO - add family and roman numeral properties to mounts - /// - public IEnumerable NewerVersions - { - get { yield break; } - } - - /// - /// Mounts cannot currently be obsoleted. - /// TODO - add family and roman numeral properties to mounts - /// - public IEnumerable OlderVersions - { - get { yield break; } - } - - /// - /// The name of the picture to use for this mount. - /// - public Formula PictureName { get; set; } - - public System.Drawing.Image Portrait - { - get { return Pictures.GetPortrait(this); } - } - - public IEnumerable PortraitPaths - { - get - { - if (Mod.Current?.RootPath != null) - yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Mounts", PictureName); - yield return Path.Combine("Pictures", "Mounts", PictureName); - } - } - - /// - /// Required component families, comma delimited list. Null means no restriction. - /// - public Formula RequiredComponentFamily { get; set; } - - public string ResearchGroup - { - get { return "Mount"; } - } - - /// - /// A shorter name for this mount. - /// - public Formula ShortName { get; set; } - - /// - /// Percentage of normal component size. - /// - public Formula SizePercent { get; set; } - - /// - /// Percentage of normal component supply usage. - /// - public Formula SupplyUsagePercent { get; set; } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - public double Timestamp - { - get; - set; - } - - /// - /// Requirements to unlock this mount. - /// - public IList> UnlockRequirements - { - get; - set; - } - - /// - /// Vehicle types which can use this mount. - /// - public VehicleTypes VehicleTypes { get; set; } - - /// - /// Accuracy modifier for weapons. - /// - public Formula WeaponAccuracyModifier { get; set; } - - /// - /// Percentage of normal weapon damage. - /// - public Formula WeaponDamagePercent { get; set; } - - /// - /// Range modifier for weapons. - /// - public Formula WeaponRangeModifier { get; set; } - - /// - /// Weapon types which can use this mount. - /// - public Formula WeaponTypes { get; set; } - - /// - /// Mod objects are fully known to everyone. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - return Visibility.Scanned; - } - - public void Dispose() - { - if (IsDisposed) - return; - if (Mod.Current != null) - Mod.Current.Mounts.Remove(this); - } - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - public void Redact(Empire emp) - { - // TODO - tech items that aren't visible until some requirements are met - } - - public override string ToString() - { - return Name; - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Drawing; +using System.IO; + +namespace FrEee.Objects.Technology +{ + /// + /// A mount that can be applied to a component. + /// + public class Mount : IResearchable, IModObject, IUpgradeable + { + public Mount() + { + AbilityPercentages = new Dictionary>>(); + AbilityModifiers = new Dictionary>>(); + UnlockRequirements = new List>(); + } + + /// + /// Additive modifiers for abilities. + /// + public IDictionary>> AbilityModifiers + { + get; + set; + } + + /// + /// Percentage factors for abilities. + /// + public IDictionary>> AbilityPercentages + { + get; + set; + } + + /// + /// An abbreviation for this mount. + /// + public Formula Code { get; set; } + + /// + /// Percentage of normal component cost. + /// + public Formula CostPercent { get; set; } + + /// + /// A description of this mount. + /// + public Formula Description { get; set; } + + /// + /// Percentage of normal component hitpoints. + /// + public Formula DurabilityPercent { get; set; } + + public Image Icon + { + get { return Pictures.GetIcon(this); } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return PortraitPaths; + } + } + + public bool IsDisposed { get; set; } + + public bool IsMemory + { + get; + set; + } + + /// + /// Mounts cannot currently be obsoleted. + /// TODO - add family and roman numeral properties to mounts + /// + public bool IsObsolescent + { + get { return false; } + } + + /// + /// Mounts cannot currently be manually obsoleted. + /// + public bool IsObsolete + { + get { return false; } + } + + /// + /// Mounts cannot currently be obsoleted. + /// TODO - add family and roman numeral properties to mounts + /// + public Mount LatestVersion + { + get { return this; } + } + + /// + /// Maximum vehicle size to use this mount. Null means no restriction. + /// + public Formula MaximumVehicleSize { get; set; } + + /// + /// Minimum vehicle size to use this mount. Null means no restriction. + /// + public Formula MinimumVehicleSize { get; set; } + + public string ModID { get; set; } + + /// + /// The full name of this mount. + /// + public Formula Name { get; set; } + + string INamed.Name + { + get { return Name; } + } + + /// + /// Mounts cannot currently be obsoleted. + /// TODO - add family and roman numeral properties to mounts + /// + public IEnumerable NewerVersions + { + get { yield break; } + } + + /// + /// Mounts cannot currently be obsoleted. + /// TODO - add family and roman numeral properties to mounts + /// + public IEnumerable OlderVersions + { + get { yield break; } + } + + /// + /// The name of the picture to use for this mount. + /// + public Formula PictureName { get; set; } + + public System.Drawing.Image Portrait + { + get { return Pictures.GetPortrait(this); } + } + + public IEnumerable PortraitPaths + { + get + { + if (Mod.Current?.RootPath != null) + yield return Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Mounts", PictureName); + yield return Path.Combine("Pictures", "Mounts", PictureName); + } + } + + /// + /// Required component families, comma delimited list. Null means no restriction. + /// + public Formula RequiredComponentFamily { get; set; } + + public string ResearchGroup + { + get { return "Mount"; } + } + + /// + /// A shorter name for this mount. + /// + public Formula ShortName { get; set; } + + /// + /// Percentage of normal component size. + /// + public Formula SizePercent { get; set; } + + /// + /// Percentage of normal component supply usage. + /// + public Formula SupplyUsagePercent { get; set; } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + public double Timestamp + { + get; + set; + } + + /// + /// Requirements to unlock this mount. + /// + public IList> UnlockRequirements + { + get; + set; + } + + /// + /// Vehicle types which can use this mount. + /// + public VehicleTypes VehicleTypes { get; set; } + + /// + /// Accuracy modifier for weapons. + /// + public Formula WeaponAccuracyModifier { get; set; } + + /// + /// Percentage of normal weapon damage. + /// + public Formula WeaponDamagePercent { get; set; } + + /// + /// Range modifier for weapons. + /// + public Formula WeaponRangeModifier { get; set; } + + /// + /// Weapon types which can use this mount. + /// + public Formula WeaponTypes { get; set; } + + /// + /// Mod objects are fully known to everyone. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + return Visibility.Scanned; + } + + public void Dispose() + { + if (IsDisposed) + return; + if (Mod.Current != null) + Mod.Current.Mounts.Remove(this); + } + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + public void Redact(Empire emp) + { + // TODO - tech items that aren't visible until some requirements are met + } + + public override string ToString() + { + return Name; + } + } +} diff --git a/FrEee/Game/Objects/Technology/MountedComponentTemplate.cs b/FrEee/Objects/Technology/MountedComponentTemplate.cs similarity index 93% rename from FrEee/Game/Objects/Technology/MountedComponentTemplate.cs rename to FrEee/Objects/Technology/MountedComponentTemplate.cs index 4e502d7d3..50b90ae91 100644 --- a/FrEee/Game/Objects/Technology/MountedComponentTemplate.cs +++ b/FrEee/Objects/Technology/MountedComponentTemplate.cs @@ -1,419 +1,419 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Modding.Templates; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Objects.Technology -{ - /// - /// A combination of component template and mount. - /// - [Serializable] - public class MountedComponentTemplate : ITemplate, INamed, IAbilityObject, IPromotable, IContainable, IFormulaHost, IUpgradeable, IPictorial - { - public MountedComponentTemplate(IDesign container, ComponentTemplate ct, Mount mount = null) - { - Container = container; - ComponentTemplate = ct; - Mount = mount; - } - - public IEnumerable Abilities - { - get - { - if (abilities == null) - abilities = ComponentTemplate.Abilities.Select(a => ComputeAbility(a)).ToArray(); - return abilities; - } - } - - private Ability ComputeAbility(Ability a) - { - var dict = new Dictionary(Variables); - foreach (var kvp in a.Variables) - dict.Add(kvp.Key, kvp.Value); - string description; - if (a.Description is not null) - description = a.Description.Evaluate(dict); - else if (a.Rule.Description is not null) - description = a.Rule.Description.Evaluate(dict); - else - description = $"{a.Rule.Name}: {string.Join(",", a.Values.Select(q => q?.ToString()))}"; - var result = new Ability(this) - { - Rule = a.Rule, - Values = new List>(a.Values), - Description = description, - }; - if (Mount != null) - { - if (Mount.AbilityPercentages.ContainsKey(a.Rule)) - { - foreach (var p in Mount.AbilityPercentages[a.Rule]) - { - result.Values[p.Key] = (double.Parse(result.Values[p.Key].Evaluate(this)) * p.Value / 100).ToString(); - a.Description = null; // values have been modified, need to use generic description - } - } - if (Mount.AbilityModifiers.ContainsKey(a.Rule)) - { - foreach (var m in Mount.AbilityModifiers[a.Rule]) - { - result.Values[m.Key] = (double.Parse(result.Values[m.Key].Evaluate(this)) + m.Value).ToString(); - a.Description = null; // values have been modified, need to use generic description - } - } - } - return result; - } - - [DoNotSerialize(false)] - private Ability[] abilities { get; set; } - - public AbilityTargets AbilityTarget - { - get { return AbilityTargets.Component; } - } - - public IEnumerable Children - { - get { yield return ComponentTemplate; } - } - - /// - /// The component template used. - /// - [DoNotSerialize] - public ComponentTemplate ComponentTemplate { get { return componentTemplate; } set { componentTemplate = value; } } - - /// - /// The design which contains this mounted component template. - /// - [DoNotSerialize] - [Populate] - public IDesign Container { get; set; } - - public ResourceQuantity Cost - { - get - { - if (Mount == null) - return ComponentTemplate.Cost.Evaluate(this); - return ComponentTemplate.Cost.Evaluate(this) * Mount.CostPercent.Evaluate(this) / 100; - } - } - - public int Durability - { - get - { - if (Mount == null) - return ComponentTemplate.Durability.Evaluate(this); - return ComponentTemplate.Durability.Evaluate(this) * Mount.DurabilityPercent.Evaluate(this) / 100; - } - } - - [DoNotSerialize] - public Image Icon - { - get - { - var icon = (Image)ComponentTemplate.Icon.Clone(); - var g = Graphics.FromImage(icon); - var font = new Font(FontFamily.GenericSansSerif, 9, FontStyle.Regular); - var brush = Brushes.White; - var sf = new StringFormat(); - sf.Alignment = StringAlignment.Near; - sf.LineAlignment = StringAlignment.Far; - if (Mount != null) - g.DrawString(Mount.Code, font, brush, new Point(0, 32), sf); - return icon; - } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return ComponentTemplate.IconPaths; - } - } - - public IEnumerable IntrinsicAbilities - { - get { yield break; } - } - - public bool IsObsolescent - { - get { return this != LatestVersion; } - } - - /// - /// Is this template obsolete (can be upgraded to a newer component)? - /// - public bool IsObsolete - { - get - { - return ComponentTemplate.IsObsolete || Mount != null && Mount.IsObsolete; - } - } - - /// - /// Does this template have valid component and mount templates? (Or a null mount template) - /// - public bool IsValidInMod => componentTemplate.HasValue && (mount == null || mount.HasValue); - - public MountedComponentTemplate LatestVersion - { - get - { - if (IsObsolete) - return new MountedComponentTemplate(Container, ComponentTemplate.LatestVersion, Mount == null ? null : Mount.LatestVersion); - else - return this; - } - } - - /// - /// The mount used. - /// - [DoNotSerialize] - public Mount? Mount { get { return mount; } set { mount = value; } } - - /// - /// The name of the component, prefixed with the short name of the mount (if any). - /// - public string Name - { - get - { - if (Mount == null) - return ComponentTemplate.Name; - return Mount.ShortName + " " + ComponentTemplate.Name; - } - } - - public IEnumerable NewerVersions - { - get { return Galaxy.Current.FindSpaceObjects().SelectMany(v => v.Components).Select(c => c.Template).Where(mct => mct.LatestVersion == this).Distinct(); } - } - - public IEnumerable OlderVersions - { - get { return Galaxy.Current.FindSpaceObjects().SelectMany(v => v.Components).Select(c => c.Template).Where(mct => LatestVersion == mct).Distinct(); } - } - - public IEnumerable Parents - { - get - { - if (Container != null) - yield return Container; - } - } - - [DoNotSerialize] - public Image Portrait - { - get - { - return ComponentTemplate.Portrait; - } - } - - public IEnumerable PortraitPaths - { - get - { - return ComponentTemplate.PortraitPaths; - } - } - - public int Size - { - get - { - if (Mount == null) - return ComponentTemplate.Size.Evaluate(this); - return ComponentTemplate.Size.Evaluate(this) * Mount.SizePercent.Evaluate(this) / 100; - } - } - - public int SupplyUsage - { - get - { - if (Mount == null) - return ComponentTemplate.SupplyUsage.Evaluate(this); - return ComponentTemplate.SupplyUsage.Evaluate(this) * Mount.SupplyUsagePercent.Evaluate(this) / 100; - } - } - - public IEnumerable UnstackedAbilities - { - get { return Abilities; } - } - - public IDictionary Variables - { - get - { - var design = Container ?? Design.Create(Mod.Current.Hulls.FirstOrDefault(h => ComponentTemplate.VehicleTypes.HasFlag(h.VehicleType))); - var empire = Container == null ? Empire.Current : Container.Owner; - return new Dictionary - { - {"component", ComponentTemplate}, - {"mount", Mount}, - {"design", design}, - {"hull", design.Hull}, - {"empire", empire} - }; - } - } - - /// - /// Accuracy rating of this component, if it is a weapon. - /// - public int WeaponAccuracy - { - get - { - var w = ComponentTemplate.WeaponInfo; - if (w == null) - return 0; - if (w is DirectFireWeaponInfo) - return ((DirectFireWeaponInfo)w).AccuracyModifier.Evaluate(this) + (Mount == null ? 0 : Mount.WeaponAccuracyModifier.Evaluate(this)); - return 999; // seekers/warheads - } - } - - public int WeaponMaxRange - { - get - { - var w = ComponentTemplate.WeaponInfo; - if (w == null) - return 0; - if (Mount == null) - return w.MaxRange; - return w.MaxRange.Value + Mount.WeaponRangeModifier.Value; - } - } - - public int WeaponMinRange - { - get - { - var w = ComponentTemplate.WeaponInfo; - if (w == null) - return 0; - if (Mount == null) - return w.MinRange; - if (w.MinRange == 0) - return 0; // don't create a blind spot for weapons with a min range of zero - return w.MinRange.Value + Mount.WeaponRangeModifier.Value; - } - } - - private ModReference componentTemplate { get; set; } - private ModReference mount { get; set; } - - public static bool operator !=(MountedComponentTemplate t1, MountedComponentTemplate t2) - { - return !(t1 == t2); - } - - public static bool operator ==(MountedComponentTemplate t1, MountedComponentTemplate t2) - { - if (t1.IsNull() && t2.IsNull()) - return true; - if (t1.IsNull() || t2.IsNull()) - return false; - return t1.Container == t2.Container && t1.ComponentTemplate == t2.ComponentTemplate && t1.mount == t2.mount; - } - - public override bool Equals(object obj) - { - // TODO - upgrade equals to use "as" operator - if (obj is MountedComponentTemplate) - return this == (MountedComponentTemplate)obj; - return false; - } - - public override int GetHashCode() - { - return HashCodeMasher.Mash(Container, ComponentTemplate, Mount); - } - - /// - /// Damage inflicted by this component at range, if it is a weapon. - /// - public int GetWeaponDamage(int range) - { - var w = ComponentTemplate.WeaponInfo; - if (w == null) - return 0; - - var shot = new Shot(null, null, null, range - (Mount == null ? 0 : Mount.WeaponRangeModifier.Value)); - var dict = new SafeDictionary(); - dict["range"] = range; - return w.Damage.Evaluate(null, dict) * (Mount?.WeaponDamagePercent.Value ?? 100) / 100; - } - - public Component Instantiate() - { - return new Component(null, this); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - // we don't need to do this because the container is only loosely coupled to the MCT - // and it will be sanitized for itself anyway - //Container.ReplaceClientIDs(idmap, done); - } - } - - public override string ToString() - { - return Name; - } - - /// - /// Compares templates ignoring the containing vehicle (only compares component template and mount) - /// - public class SimpleEqualityComparer : IEqualityComparer - { - public bool Equals(MountedComponentTemplate x, MountedComponentTemplate y) - { - return x.ComponentTemplate == y.ComponentTemplate && x.Mount == y.Mount; - } - - public int GetHashCode(MountedComponentTemplate obj) - { - return HashCodeMasher.Mash(obj.ComponentTemplate, obj.Mount); - } - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Modding.Templates; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace FrEee.Objects.Technology +{ + /// + /// A combination of component template and mount. + /// + [Serializable] + public class MountedComponentTemplate : ITemplate, INamed, IAbilityObject, IPromotable, IContainable, IFormulaHost, IUpgradeable, IPictorial + { + public MountedComponentTemplate(IDesign container, ComponentTemplate ct, Mount mount = null) + { + Container = container; + ComponentTemplate = ct; + Mount = mount; + } + + public IEnumerable Abilities + { + get + { + if (abilities == null) + abilities = ComponentTemplate.Abilities.Select(a => ComputeAbility(a)).ToArray(); + return abilities; + } + } + + private Ability ComputeAbility(Ability a) + { + var dict = new Dictionary(Variables); + foreach (var kvp in a.Variables) + dict.Add(kvp.Key, kvp.Value); + string description; + if (a.Description is not null) + description = a.Description.Evaluate(dict); + else if (a.Rule.Description is not null) + description = a.Rule.Description.Evaluate(dict); + else + description = $"{a.Rule.Name}: {string.Join(",", a.Values.Select(q => q?.ToString()))}"; + var result = new Ability(this) + { + Rule = a.Rule, + Values = new List>(a.Values), + Description = description, + }; + if (Mount != null) + { + if (Mount.AbilityPercentages.ContainsKey(a.Rule)) + { + foreach (var p in Mount.AbilityPercentages[a.Rule]) + { + result.Values[p.Key] = (double.Parse(result.Values[p.Key].Evaluate(this)) * p.Value / 100).ToString(); + a.Description = null; // values have been modified, need to use generic description + } + } + if (Mount.AbilityModifiers.ContainsKey(a.Rule)) + { + foreach (var m in Mount.AbilityModifiers[a.Rule]) + { + result.Values[m.Key] = (double.Parse(result.Values[m.Key].Evaluate(this)) + m.Value).ToString(); + a.Description = null; // values have been modified, need to use generic description + } + } + } + return result; + } + + [DoNotSerialize(false)] + private Ability[] abilities { get; set; } + + public AbilityTargets AbilityTarget + { + get { return AbilityTargets.Component; } + } + + public IEnumerable Children + { + get { yield return ComponentTemplate; } + } + + /// + /// The component template used. + /// + [DoNotSerialize] + public ComponentTemplate ComponentTemplate { get { return componentTemplate; } set { componentTemplate = value; } } + + /// + /// The design which contains this mounted component template. + /// + [DoNotSerialize] + [Populate] + public IDesign Container { get; set; } + + public ResourceQuantity Cost + { + get + { + if (Mount == null) + return ComponentTemplate.Cost.Evaluate(this); + return ComponentTemplate.Cost.Evaluate(this) * Mount.CostPercent.Evaluate(this) / 100; + } + } + + public int Durability + { + get + { + if (Mount == null) + return ComponentTemplate.Durability.Evaluate(this); + return ComponentTemplate.Durability.Evaluate(this) * Mount.DurabilityPercent.Evaluate(this) / 100; + } + } + + [DoNotSerialize] + public Image Icon + { + get + { + var icon = (Image)ComponentTemplate.Icon.Clone(); + var g = Graphics.FromImage(icon); + var font = new Font(FontFamily.GenericSansSerif, 9, FontStyle.Regular); + var brush = Brushes.White; + var sf = new StringFormat(); + sf.Alignment = StringAlignment.Near; + sf.LineAlignment = StringAlignment.Far; + if (Mount != null) + g.DrawString(Mount.Code, font, brush, new Point(0, 32), sf); + return icon; + } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return ComponentTemplate.IconPaths; + } + } + + public IEnumerable IntrinsicAbilities + { + get { yield break; } + } + + public bool IsObsolescent + { + get { return this != LatestVersion; } + } + + /// + /// Is this template obsolete (can be upgraded to a newer component)? + /// + public bool IsObsolete + { + get + { + return ComponentTemplate.IsObsolete || Mount != null && Mount.IsObsolete; + } + } + + /// + /// Does this template have valid component and mount templates? (Or a null mount template) + /// + public bool IsValidInMod => componentTemplate.HasValue && (mount == null || mount.HasValue); + + public MountedComponentTemplate LatestVersion + { + get + { + if (IsObsolete) + return new MountedComponentTemplate(Container, ComponentTemplate.LatestVersion, Mount == null ? null : Mount.LatestVersion); + else + return this; + } + } + + /// + /// The mount used. + /// + [DoNotSerialize] + public Mount? Mount { get { return mount; } set { mount = value; } } + + /// + /// The name of the component, prefixed with the short name of the mount (if any). + /// + public string Name + { + get + { + if (Mount == null) + return ComponentTemplate.Name; + return Mount.ShortName + " " + ComponentTemplate.Name; + } + } + + public IEnumerable NewerVersions + { + get { return Galaxy.Current.FindSpaceObjects().SelectMany(v => v.Components).Select(c => c.Template).Where(mct => mct.LatestVersion == this).Distinct(); } + } + + public IEnumerable OlderVersions + { + get { return Galaxy.Current.FindSpaceObjects().SelectMany(v => v.Components).Select(c => c.Template).Where(mct => LatestVersion == mct).Distinct(); } + } + + public IEnumerable Parents + { + get + { + if (Container != null) + yield return Container; + } + } + + [DoNotSerialize] + public Image Portrait + { + get + { + return ComponentTemplate.Portrait; + } + } + + public IEnumerable PortraitPaths + { + get + { + return ComponentTemplate.PortraitPaths; + } + } + + public int Size + { + get + { + if (Mount == null) + return ComponentTemplate.Size.Evaluate(this); + return ComponentTemplate.Size.Evaluate(this) * Mount.SizePercent.Evaluate(this) / 100; + } + } + + public int SupplyUsage + { + get + { + if (Mount == null) + return ComponentTemplate.SupplyUsage.Evaluate(this); + return ComponentTemplate.SupplyUsage.Evaluate(this) * Mount.SupplyUsagePercent.Evaluate(this) / 100; + } + } + + public IEnumerable UnstackedAbilities + { + get { return Abilities; } + } + + public IDictionary Variables + { + get + { + var design = Container ?? Design.Create(Mod.Current.Hulls.FirstOrDefault(h => ComponentTemplate.VehicleTypes.HasFlag(h.VehicleType))); + var empire = Container == null ? Empire.Current : Container.Owner; + return new Dictionary + { + {"component", ComponentTemplate}, + {"mount", Mount}, + {"design", design}, + {"hull", design.Hull}, + {"empire", empire} + }; + } + } + + /// + /// Accuracy rating of this component, if it is a weapon. + /// + public int WeaponAccuracy + { + get + { + var w = ComponentTemplate.WeaponInfo; + if (w == null) + return 0; + if (w is DirectFireWeaponInfo) + return ((DirectFireWeaponInfo)w).AccuracyModifier.Evaluate(this) + (Mount == null ? 0 : Mount.WeaponAccuracyModifier.Evaluate(this)); + return 999; // seekers/warheads + } + } + + public int WeaponMaxRange + { + get + { + var w = ComponentTemplate.WeaponInfo; + if (w == null) + return 0; + if (Mount == null) + return w.MaxRange; + return w.MaxRange.Value + Mount.WeaponRangeModifier.Value; + } + } + + public int WeaponMinRange + { + get + { + var w = ComponentTemplate.WeaponInfo; + if (w == null) + return 0; + if (Mount == null) + return w.MinRange; + if (w.MinRange == 0) + return 0; // don't create a blind spot for weapons with a min range of zero + return w.MinRange.Value + Mount.WeaponRangeModifier.Value; + } + } + + private ModReference componentTemplate { get; set; } + private ModReference mount { get; set; } + + public static bool operator !=(MountedComponentTemplate t1, MountedComponentTemplate t2) + { + return !(t1 == t2); + } + + public static bool operator ==(MountedComponentTemplate t1, MountedComponentTemplate t2) + { + if (t1.IsNull() && t2.IsNull()) + return true; + if (t1.IsNull() || t2.IsNull()) + return false; + return t1.Container == t2.Container && t1.ComponentTemplate == t2.ComponentTemplate && t1.mount == t2.mount; + } + + public override bool Equals(object obj) + { + // TODO - upgrade equals to use "as" operator + if (obj is MountedComponentTemplate) + return this == (MountedComponentTemplate)obj; + return false; + } + + public override int GetHashCode() + { + return HashCodeMasher.Mash(Container, ComponentTemplate, Mount); + } + + /// + /// Damage inflicted by this component at range, if it is a weapon. + /// + public int GetWeaponDamage(int range) + { + var w = ComponentTemplate.WeaponInfo; + if (w == null) + return 0; + + var shot = new Shot(null, null, null, range - (Mount == null ? 0 : Mount.WeaponRangeModifier.Value)); + var dict = new SafeDictionary(); + dict["range"] = range; + return w.Damage.Evaluate(null, dict) * (Mount?.WeaponDamagePercent.Value ?? 100) / 100; + } + + public Component Instantiate() + { + return new Component(null, this); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + // we don't need to do this because the container is only loosely coupled to the MCT + // and it will be sanitized for itself anyway + //Container.ReplaceClientIDs(idmap, done); + } + } + + public override string ToString() + { + return Name; + } + + /// + /// Compares templates ignoring the containing vehicle (only compares component template and mount) + /// + public class SimpleEqualityComparer : IEqualityComparer + { + public bool Equals(MountedComponentTemplate x, MountedComponentTemplate y) + { + return x.ComponentTemplate == y.ComponentTemplate && x.Mount == y.Mount; + } + + public int GetHashCode(MountedComponentTemplate obj) + { + return HashCodeMasher.Mash(obj.ComponentTemplate, obj.Mount); + } + } + } +} diff --git a/FrEee/Game/Objects/Technology/MountedComponentTemplateContainerPopulator.cs b/FrEee/Objects/Technology/MountedComponentTemplateContainerPopulator.cs similarity index 80% rename from FrEee/Game/Objects/Technology/MountedComponentTemplateContainerPopulator.cs rename to FrEee/Objects/Technology/MountedComponentTemplateContainerPopulator.cs index 2c3b00525..0f1a41c9b 100644 --- a/FrEee/Game/Objects/Technology/MountedComponentTemplateContainerPopulator.cs +++ b/FrEee/Objects/Technology/MountedComponentTemplateContainerPopulator.cs @@ -3,11 +3,11 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; -namespace FrEee.Game.Objects.Technology +namespace FrEee.Objects.Technology { /// /// Populates the property. diff --git a/FrEee/Game/Objects/Technology/SeekingWeaponInfo.cs b/FrEee/Objects/Technology/SeekingWeaponInfo.cs similarity index 89% rename from FrEee/Game/Objects/Technology/SeekingWeaponInfo.cs rename to FrEee/Objects/Technology/SeekingWeaponInfo.cs index 7155fe06d..2243ec80b 100644 --- a/FrEee/Game/Objects/Technology/SeekingWeaponInfo.cs +++ b/FrEee/Objects/Technology/SeekingWeaponInfo.cs @@ -1,30 +1,30 @@ -using FrEee.Modding; -using System; - -namespace FrEee.Game.Objects.Technology -{ - [Serializable] - public class SeekingWeaponInfo : WeaponInfo - { - /// - /// The durability of the seeker. - /// - public Formula SeekerDurability { get; set; } - - /// - /// The speed at which the seeker travels. - /// - public Formula SeekerSpeed { get; set; } - - public override Enumerations.WeaponTypes WeaponType - { - get - { - if (IsPointDefense) - return Enumerations.WeaponTypes.SeekingPointDefense; - else - return Enumerations.WeaponTypes.Seeking; - } - } - } +using FrEee.Modding; +using System; + +namespace FrEee.Objects.Technology +{ + [Serializable] + public class SeekingWeaponInfo : WeaponInfo + { + /// + /// The durability of the seeker. + /// + public Formula SeekerDurability { get; set; } + + /// + /// The speed at which the seeker travels. + /// + public Formula SeekerSpeed { get; set; } + + public override Enumerations.WeaponTypes WeaponType + { + get + { + if (IsPointDefense) + return Enumerations.WeaponTypes.SeekingPointDefense; + else + return Enumerations.WeaponTypes.Seeking; + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Technology/Technology.cs b/FrEee/Objects/Technology/Technology.cs similarity index 93% rename from FrEee/Game/Objects/Technology/Technology.cs rename to FrEee/Objects/Technology/Technology.cs index 1f4d5e496..5eb84ef17 100644 --- a/FrEee/Game/Objects/Technology/Technology.cs +++ b/FrEee/Objects/Technology/Technology.cs @@ -1,372 +1,372 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Objects.Technology -{ - /// - /// A technology that can be researched in the game. - /// - [Serializable] - public class Technology : IModObject, IResearchable - { - public Technology() - { - UnlockRequirements = new List>(); - } - - /// - /// Should the game offer game hosts the option of removing this tech from their games? - /// - public bool CanBeRemoved { get; set; } - - /// - /// Current empire's level in this technology. - /// TODO - refactor this into an EmpireTechnology class - /// - public int CurrentLevel - { - get - { - if (Empire.Current == null) - return 0; - return Empire.Current.ResearchedTechnologies[this]; - } - } - - /// - /// A description of the technology. - /// - public string Description { get; set; } - - /// - /// Current empire's expected results for researching the next level of this tech. - /// TODO - refactor this into an EmpireTechnology class - /// - public IEnumerable ExpectedResults - { - get - { - if (Empire.Current == null) - return Enumerable.Empty(); - return GetExpectedResults(Empire.Current); - } - } - - /// - /// The group that the technology belongs to. For grouping on the research screen. - /// - public string Group { get; set; } - - /// - /// TODO - technology icons? - /// - public Image Icon - { - get { return Resource.Research.Icon; } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return Resource.Research.IconPaths; - } - } - - public long ID - { - get; - set; - } - - public bool IsDisposed { get; set; } - - public bool IsMemory - { - get; - set; - } - - public bool IsRacial - { - get - { - return RacialTechID != "0" && !string.IsNullOrWhiteSpace(RacialTechID); - } - } - - public bool IsUnique - { - get - { - return UniqueTechID != "0" && !string.IsNullOrWhiteSpace(UniqueTechID); - } - } - - /// - /// The cost of the first level. - /// - public int LevelCost { get; set; } - - /// - /// The maximum level that can be researched. - /// - public int MaximumLevel { get; set; } - - public string ModID { get; set; } - - /// - /// The name of the technology. - /// - public string Name { get; set; } - - string INamed.Name - { - get { return Name; } - } - - /// - /// Current empire's cost to research the next level. - /// TODO - refactor this into an EmpireTechnology class - /// - public int NextLevelCost - { - get - { - return GetNextLevelCost(Empire.Current); - } - } - - public Empire Owner - { - get { return null; } - } - - /// - /// TODO - technology portraits? - /// - public System.Drawing.Image Portrait - { - get { return Resource.Research.Icon; } - } - - public IEnumerable PortraitPaths - { - get - { - return Resource.Research.PortraitPaths; - } - } - - /// - /// Current empire's research progress in this technology. - /// TODO - refactor this into an EmpireTechnology class - /// - public ModProgress Progress - { - get - { - if (Empire.Current == null) - return new ModProgress(this, 0, LevelCost); - var progress = Empire.Current.ResearchProgress.SingleOrDefault(p => p.Item == this); - if (progress == null) - return new ModProgress(this, 0, LevelCost); - return progress; - } - } - - /// - /// If not null or zero, this tech is a "racial tech" and will not be researchable - /// except by empires possessing the trait referencing this ID. - /// - public string RacialTechID { get; set; } - - /// - /// The starting level for empires at medium tech. - /// - public int RaiseLevel { get; set; } - - public string ResearchGroup - { - get { return "Technology"; } - } - - /// - /// Current empire's spending percentage on this technology. - /// TODO - refactor this into an EmpireTechnology class - /// - public ModProgress Spending - { - get - { - if (Empire.Current == null) - return new ModProgress(this, 0, 100); - return new ModProgress(this, Empire.Current.ResearchSpending[this], 100); - } - } - - /// - /// The starting level for empires at low tech. - /// - public int StartLevel { get; set; } - - /// - /// Parameters from the mod meta templates. - /// - public IDictionary TemplateParameters { get; set; } - - public double Timestamp - { - get; - set; - } - - /// - /// Traits which unlock this technology. - /// - public IEnumerable Traits - { - get - { - if (!IsRacial) - return Enumerable.Empty(); - return Mod.Current.Traits.Where(t => t.Abilities.Any(a => a.Rule.Matches("Tech Area") && a.Value1 == RacialTechID)); - } - } - - /// - /// If not null or zero, this tech is a "unique tech" and will not be researchable. - /// Instead it will appear on ruins worlds referencing its ID. - /// - public string UniqueTechID { get; set; } - - /// - /// The prerequisites for this technology. - /// - public IList> UnlockRequirements { get; private set; } - - /// - /// Determines what would be unlocked by granting additional technology to an empire. - /// - /// The empire. - /// The technology levels to grant. - /// Newly unlocked items. - public static IEnumerable GetUnlockedItems(Empire emp, IDictionary levels) - { - // find out what the empire already knows - var oldItems = emp.UnlockedItems.ToArray(); - - // save off the old levels so we can restore them - var oldLevels = new Dictionary(emp.ResearchedTechnologies); - - // set the new levels - foreach (var kvp in levels.ToArray()) - emp.ResearchedTechnologies.Add(kvp); - - // find out what the empire would know - emp.RefreshUnlockedItems(); - var newItems = emp.UnlockedItems.ToArray(); - - // reset known levels - emp.ResearchedTechnologies.Clear(); - foreach (var kvp in oldLevels) - emp.ResearchedTechnologies.Add(kvp); - emp.RefreshUnlockedItems(); - - // return newly learned items - return newItems.Except(oldItems); - } - - /// - /// Mod objects are fully known to everyone. - /// - /// - /// - public Visibility CheckVisibility(Empire emp) - { - return Visibility.Scanned; - } - - public void Dispose() - { - if (IsDisposed) - return; - if (Mod.Current != null) - Mod.Current.Technologies.Remove(this); - } - - public int GetBaseLevelCost(int level) - { - if (Galaxy.Current.TechnologyCost == TechnologyCost.Low) - return LevelCost * level; - else if (Galaxy.Current.TechnologyCost == TechnologyCost.Medium) - { - if (Math.Abs(level) == 1) - return LevelCost * level; - else - return LevelCost * level * level / 2; - } - else if (Galaxy.Current.TechnologyCost == TechnologyCost.High) - return LevelCost * level * level; - throw new Exception("Invalid technology cost for galaxy: " + Galaxy.Current.TechnologyCost); - } - - /// - /// Determines what an empire would unlock by researching the next level of this technology. - /// - /// - /// - public IEnumerable GetExpectedResults(Empire emp) - { - var techs = new SafeDictionary(); - foreach (var kvp in emp.ResearchedTechnologies) - techs.Add(kvp.Key, kvp.Value); - techs[this]++; - return GetUnlockedItems(emp, techs); - } - - public int GetLevelCost(int level, Empire emp) - { - var baseCost = GetBaseLevelCost(level); - if (Galaxy.Current.TechnologyUniqueness == 0) - return baseCost; - var playerRatio = emp.OtherPlayersTechLevels[this]?.Count(x => x >= level) ?? 0; - var uniquenessFactor = Math.Pow(2, Galaxy.Current.TechnologyUniqueness * playerRatio); - return (int)(GetBaseLevelCost(level) * uniquenessFactor); - } - - public int GetNextLevelCost(Empire emp) - { - if (emp == null) - return LevelCost; - return GetLevelCost(emp.ResearchedTechnologies[this] + 1, emp); - } - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - public void Redact(Empire emp) - { - // TODO - tech items that aren't visible until some requirements are met - } - - public override string ToString() - { - return Name; - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace FrEee.Objects.Technology +{ + /// + /// A technology that can be researched in the game. + /// + [Serializable] + public class Technology : IModObject, IResearchable + { + public Technology() + { + UnlockRequirements = new List>(); + } + + /// + /// Should the game offer game hosts the option of removing this tech from their games? + /// + public bool CanBeRemoved { get; set; } + + /// + /// Current empire's level in this technology. + /// TODO - refactor this into an EmpireTechnology class + /// + public int CurrentLevel + { + get + { + if (Empire.Current == null) + return 0; + return Empire.Current.ResearchedTechnologies[this]; + } + } + + /// + /// A description of the technology. + /// + public string Description { get; set; } + + /// + /// Current empire's expected results for researching the next level of this tech. + /// TODO - refactor this into an EmpireTechnology class + /// + public IEnumerable ExpectedResults + { + get + { + if (Empire.Current == null) + return Enumerable.Empty(); + return GetExpectedResults(Empire.Current); + } + } + + /// + /// The group that the technology belongs to. For grouping on the research screen. + /// + public string Group { get; set; } + + /// + /// TODO - technology icons? + /// + public Image Icon + { + get { return Resource.Research.Icon; } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return Resource.Research.IconPaths; + } + } + + public long ID + { + get; + set; + } + + public bool IsDisposed { get; set; } + + public bool IsMemory + { + get; + set; + } + + public bool IsRacial + { + get + { + return RacialTechID != "0" && !string.IsNullOrWhiteSpace(RacialTechID); + } + } + + public bool IsUnique + { + get + { + return UniqueTechID != "0" && !string.IsNullOrWhiteSpace(UniqueTechID); + } + } + + /// + /// The cost of the first level. + /// + public int LevelCost { get; set; } + + /// + /// The maximum level that can be researched. + /// + public int MaximumLevel { get; set; } + + public string ModID { get; set; } + + /// + /// The name of the technology. + /// + public string Name { get; set; } + + string INamed.Name + { + get { return Name; } + } + + /// + /// Current empire's cost to research the next level. + /// TODO - refactor this into an EmpireTechnology class + /// + public int NextLevelCost + { + get + { + return GetNextLevelCost(Empire.Current); + } + } + + public Empire Owner + { + get { return null; } + } + + /// + /// TODO - technology portraits? + /// + public System.Drawing.Image Portrait + { + get { return Resource.Research.Icon; } + } + + public IEnumerable PortraitPaths + { + get + { + return Resource.Research.PortraitPaths; + } + } + + /// + /// Current empire's research progress in this technology. + /// TODO - refactor this into an EmpireTechnology class + /// + public ModProgress Progress + { + get + { + if (Empire.Current == null) + return new ModProgress(this, 0, LevelCost); + var progress = Empire.Current.ResearchProgress.SingleOrDefault(p => p.Item == this); + if (progress == null) + return new ModProgress(this, 0, LevelCost); + return progress; + } + } + + /// + /// If not null or zero, this tech is a "racial tech" and will not be researchable + /// except by empires possessing the trait referencing this ID. + /// + public string RacialTechID { get; set; } + + /// + /// The starting level for empires at medium tech. + /// + public int RaiseLevel { get; set; } + + public string ResearchGroup + { + get { return "Technology"; } + } + + /// + /// Current empire's spending percentage on this technology. + /// TODO - refactor this into an EmpireTechnology class + /// + public ModProgress Spending + { + get + { + if (Empire.Current == null) + return new ModProgress(this, 0, 100); + return new ModProgress(this, Empire.Current.ResearchSpending[this], 100); + } + } + + /// + /// The starting level for empires at low tech. + /// + public int StartLevel { get; set; } + + /// + /// Parameters from the mod meta templates. + /// + public IDictionary TemplateParameters { get; set; } + + public double Timestamp + { + get; + set; + } + + /// + /// Traits which unlock this technology. + /// + public IEnumerable Traits + { + get + { + if (!IsRacial) + return Enumerable.Empty(); + return Mod.Current.Traits.Where(t => t.Abilities.Any(a => a.Rule.Matches("Tech Area") && a.Value1 == RacialTechID)); + } + } + + /// + /// If not null or zero, this tech is a "unique tech" and will not be researchable. + /// Instead it will appear on ruins worlds referencing its ID. + /// + public string UniqueTechID { get; set; } + + /// + /// The prerequisites for this technology. + /// + public IList> UnlockRequirements { get; private set; } + + /// + /// Determines what would be unlocked by granting additional technology to an empire. + /// + /// The empire. + /// The technology levels to grant. + /// Newly unlocked items. + public static IEnumerable GetUnlockedItems(Empire emp, IDictionary levels) + { + // find out what the empire already knows + var oldItems = emp.UnlockedItems.ToArray(); + + // save off the old levels so we can restore them + var oldLevels = new Dictionary(emp.ResearchedTechnologies); + + // set the new levels + foreach (var kvp in levels.ToArray()) + emp.ResearchedTechnologies.Add(kvp); + + // find out what the empire would know + emp.RefreshUnlockedItems(); + var newItems = emp.UnlockedItems.ToArray(); + + // reset known levels + emp.ResearchedTechnologies.Clear(); + foreach (var kvp in oldLevels) + emp.ResearchedTechnologies.Add(kvp); + emp.RefreshUnlockedItems(); + + // return newly learned items + return newItems.Except(oldItems); + } + + /// + /// Mod objects are fully known to everyone. + /// + /// + /// + public Visibility CheckVisibility(Empire emp) + { + return Visibility.Scanned; + } + + public void Dispose() + { + if (IsDisposed) + return; + if (Mod.Current != null) + Mod.Current.Technologies.Remove(this); + } + + public int GetBaseLevelCost(int level) + { + if (Galaxy.Current.TechnologyCost == TechnologyCost.Low) + return LevelCost * level; + else if (Galaxy.Current.TechnologyCost == TechnologyCost.Medium) + { + if (Math.Abs(level) == 1) + return LevelCost * level; + else + return LevelCost * level * level / 2; + } + else if (Galaxy.Current.TechnologyCost == TechnologyCost.High) + return LevelCost * level * level; + throw new Exception("Invalid technology cost for galaxy: " + Galaxy.Current.TechnologyCost); + } + + /// + /// Determines what an empire would unlock by researching the next level of this technology. + /// + /// + /// + public IEnumerable GetExpectedResults(Empire emp) + { + var techs = new SafeDictionary(); + foreach (var kvp in emp.ResearchedTechnologies) + techs.Add(kvp.Key, kvp.Value); + techs[this]++; + return GetUnlockedItems(emp, techs); + } + + public int GetLevelCost(int level, Empire emp) + { + var baseCost = GetBaseLevelCost(level); + if (Galaxy.Current.TechnologyUniqueness == 0) + return baseCost; + var playerRatio = emp.OtherPlayersTechLevels[this]?.Count(x => x >= level) ?? 0; + var uniquenessFactor = Math.Pow(2, Galaxy.Current.TechnologyUniqueness * playerRatio); + return (int)(GetBaseLevelCost(level) * uniquenessFactor); + } + + public int GetNextLevelCost(Empire emp) + { + if (emp == null) + return LevelCost; + return GetLevelCost(emp.ResearchedTechnologies[this] + 1, emp); + } + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + public void Redact(Empire emp) + { + // TODO - tech items that aren't visible until some requirements are met + } + + public override string ToString() + { + return Name; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Technology/TechnologyRequirement.cs b/FrEee/Objects/Technology/TechnologyRequirement.cs similarity index 88% rename from FrEee/Game/Objects/Technology/TechnologyRequirement.cs rename to FrEee/Objects/Technology/TechnologyRequirement.cs index 616f51f8a..ef52d25b6 100644 --- a/FrEee/Game/Objects/Technology/TechnologyRequirement.cs +++ b/FrEee/Objects/Technology/TechnologyRequirement.cs @@ -1,63 +1,63 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Modding; -using FrEee.Utility; -using System; - -namespace FrEee.Game.Objects.Technology -{ - /// - /// Requirement for a technology to be researched to a particular level. - /// - [Serializable] - public class TechnologyRequirement : Requirement, IContainable - { - public TechnologyRequirement(IResearchable container, Technology tech, Formula level) - : base("Requires level " + level + " " + tech + ".") - { - Container = container; - Technology = tech; - Level = level; - } - - /// - /// What researchable object "owns" this technology requirement. - /// - public IResearchable Container - { - get; - private set; - } - - /// - /// Technology requirements are always strict. - /// - public override bool IsStrict - { - get { return true; } - } - - /// - /// The level required. - /// - public Formula Level { get; set; } - - private ModReference technology { get; set; } - - /// - /// The technology to be researched. - /// - [DoNotSerialize(false)] - public Technology Technology { get => technology; set => technology = value; } - - /// - /// Is this technology requirement met by a particular empire? - /// - /// The empire being tested. - /// true if the requirement is met, otherwise false. - public override bool IsMetBy(Empire emp) - { - return emp.ResearchedTechnologies[Technology] >= Level; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using System; + +namespace FrEee.Objects.Technology +{ + /// + /// Requirement for a technology to be researched to a particular level. + /// + [Serializable] + public class TechnologyRequirement : Requirement, IContainable + { + public TechnologyRequirement(IResearchable container, Technology tech, Formula level) + : base("Requires level " + level + " " + tech + ".") + { + Container = container; + Technology = tech; + Level = level; + } + + /// + /// What researchable object "owns" this technology requirement. + /// + public IResearchable Container + { + get; + private set; + } + + /// + /// Technology requirements are always strict. + /// + public override bool IsStrict + { + get { return true; } + } + + /// + /// The level required. + /// + public Formula Level { get; set; } + + private ModReference technology { get; set; } + + /// + /// The technology to be researched. + /// + [DoNotSerialize(false)] + public Technology Technology { get => technology; set => technology = value; } + + /// + /// Is this technology requirement met by a particular empire? + /// + /// The empire being tested. + /// true if the requirement is met, otherwise false. + public override bool IsMetBy(Empire emp) + { + return emp.ResearchedTechnologies[Technology] >= Level; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Technology/WarheadWeaponInfo.cs b/FrEee/Objects/Technology/WarheadWeaponInfo.cs similarity index 83% rename from FrEee/Game/Objects/Technology/WarheadWeaponInfo.cs rename to FrEee/Objects/Technology/WarheadWeaponInfo.cs index 3b30f5f6b..ffbda6fb5 100644 --- a/FrEee/Game/Objects/Technology/WarheadWeaponInfo.cs +++ b/FrEee/Objects/Technology/WarheadWeaponInfo.cs @@ -1,19 +1,19 @@ -using System; - -namespace FrEee.Game.Objects.Technology -{ - [Serializable] - public class WarheadWeaponInfo : WeaponInfo - { - public override Enumerations.WeaponTypes WeaponType - { - get - { - if (IsPointDefense) - return Enumerations.WeaponTypes.WarheadPointDefense; - else - return Enumerations.WeaponTypes.Warhead; - } - } - } +using System; + +namespace FrEee.Objects.Technology +{ + [Serializable] + public class WarheadWeaponInfo : WeaponInfo + { + public override Enumerations.WeaponTypes WeaponType + { + get + { + if (IsPointDefense) + return Enumerations.WeaponTypes.WarheadPointDefense; + else + return Enumerations.WeaponTypes.Warhead; + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Technology/WeaponInfo.cs b/FrEee/Objects/Technology/WeaponInfo.cs similarity index 92% rename from FrEee/Game/Objects/Technology/WeaponInfo.cs rename to FrEee/Objects/Technology/WeaponInfo.cs index 6da5228b3..5e809577f 100644 --- a/FrEee/Game/Objects/Technology/WeaponInfo.cs +++ b/FrEee/Objects/Technology/WeaponInfo.cs @@ -1,85 +1,85 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Objects.Combat; -using FrEee.Modding; -using System; - -namespace FrEee.Game.Objects.Technology -{ - /// - /// Information about a weapon component. - /// - [Serializable] - public abstract class WeaponInfo - { - /// - /// Damage of the weapon at range. - /// - public Formula Damage { get; set; } - - /// - /// The type of damage inflicted by this weapon. - /// - public DamageType DamageType { get; set; } - - /// - /// The display effect used for this weapons. - /// - public WeaponDisplayEffect DisplayEffect { get; set; } - - /// - /// Not sure what this is for, maybe the AI? - /// - public Formula Family { get; set; } - - /// - /// Does this weapon automatically fire at targets that come into range? - /// - public Formula IsPointDefense { get; set; } - - public bool IsSeeker { get { return WeaponType == WeaponTypes.Seeking || WeaponType == WeaponTypes.SeekingPointDefense; } } - - public bool IsWarhead { get { return WeaponType == WeaponTypes.Warhead || WeaponType == WeaponTypes.WarheadPointDefense; } } - - /// - /// Maximum range of the weapon. - /// - public Formula MaxRange { get; set; } - - /// - /// Minimum range of the weapon. - /// - public Formula MinRange { get; set; } - - /// - /// The number of turns after firing that the weapon must wait to fire again. (1 means the weapon can fire every turn.) - /// - public Formula ReloadRate { get; set; } - - /// - /// The sound file to play when this weapon fires. - /// - public Formula Sound { get; set; } - - /// - /// If this is not null, it will be displayed in place of a simple list of things the weapon can target. - /// - public Formula TargetDescription { get; set; } - - /// - /// What can this weapon target? - /// - public WeaponTargets Targets { get; set; } - - /// - /// The weapon type of this weapon. - /// - public abstract WeaponTypes WeaponType { get; } - - public int GetDamage(Shot shot) - { - if (shot.Range < MinRange || shot.Range > MaxRange) - return 0; - return Damage.Evaluate(shot); - } - } +using FrEee.Enumerations; +using FrEee.Objects.Combat; +using FrEee.Modding; +using System; + +namespace FrEee.Objects.Technology +{ + /// + /// Information about a weapon component. + /// + [Serializable] + public abstract class WeaponInfo + { + /// + /// Damage of the weapon at range. + /// + public Formula Damage { get; set; } + + /// + /// The type of damage inflicted by this weapon. + /// + public DamageType DamageType { get; set; } + + /// + /// The display effect used for this weapons. + /// + public WeaponDisplayEffect DisplayEffect { get; set; } + + /// + /// Not sure what this is for, maybe the AI? + /// + public Formula Family { get; set; } + + /// + /// Does this weapon automatically fire at targets that come into range? + /// + public Formula IsPointDefense { get; set; } + + public bool IsSeeker { get { return WeaponType == WeaponTypes.Seeking || WeaponType == WeaponTypes.SeekingPointDefense; } } + + public bool IsWarhead { get { return WeaponType == WeaponTypes.Warhead || WeaponType == WeaponTypes.WarheadPointDefense; } } + + /// + /// Maximum range of the weapon. + /// + public Formula MaxRange { get; set; } + + /// + /// Minimum range of the weapon. + /// + public Formula MinRange { get; set; } + + /// + /// The number of turns after firing that the weapon must wait to fire again. (1 means the weapon can fire every turn.) + /// + public Formula ReloadRate { get; set; } + + /// + /// The sound file to play when this weapon fires. + /// + public Formula Sound { get; set; } + + /// + /// If this is not null, it will be displayed in place of a simple list of things the weapon can target. + /// + public Formula TargetDescription { get; set; } + + /// + /// What can this weapon target? + /// + public WeaponTargets Targets { get; set; } + + /// + /// The weapon type of this weapon. + /// + public abstract WeaponTypes WeaponType { get; } + + public int GetDamage(Shot shot) + { + if (shot.Range < MinRange || shot.Range > MaxRange) + return 0; + return Damage.Evaluate(shot); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Vehicles/Base.cs b/FrEee/Objects/Vehicles/Base.cs similarity index 73% rename from FrEee/Game/Objects/Vehicles/Base.cs rename to FrEee/Objects/Vehicles/Base.cs index 164acfccd..c91984631 100644 --- a/FrEee/Game/Objects/Vehicles/Base.cs +++ b/FrEee/Objects/Vehicles/Base.cs @@ -1,50 +1,50 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using System; -using System.Linq; - -namespace FrEee.Game.Objects.Vehicles -{ - [Serializable] - public class Base : MajorSpaceVehicle - { - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.Base; } - } - - public override bool CanWarp - { - get { return false; } - } - - /// - /// Bases have infinite supplies. - /// - public override bool HasInfiniteSupplies - { - get - { - return true; - } - } - - public override bool ParticipatesInGroundCombat - { - get { return false; } - } - - public override IMobileSpaceObject RecycleContainer - { - get { return this; } - } - - public override bool RequiresSpaceYardQueue - { - get { return true; } - } - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Linq; + +namespace FrEee.Objects.Vehicles +{ + [Serializable] + public class Base : MajorSpaceVehicle + { + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.Base; } + } + + public override bool CanWarp + { + get { return false; } + } + + /// + /// Bases have infinite supplies. + /// + public override bool HasInfiniteSupplies + { + get + { + return true; + } + } + + public override bool ParticipatesInGroundCombat + { + get { return false; } + } + + public override IMobileSpaceObject RecycleContainer + { + get { return this; } + } + + public override bool RequiresSpaceYardQueue + { + get { return true; } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Vehicles/Design.cs b/FrEee/Objects/Vehicles/Design.cs similarity index 95% rename from FrEee/Game/Objects/Vehicles/Design.cs rename to FrEee/Objects/Vehicles/Design.cs index ff919a17c..ab3116a9b 100644 --- a/FrEee/Game/Objects/Vehicles/Design.cs +++ b/FrEee/Objects/Vehicles/Design.cs @@ -1,865 +1,865 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Commands; -using FrEee.Game.Objects.Orders; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; -using FrEee.Modding.Templates; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; - -namespace FrEee.Game.Objects.Vehicles -{ - /// - /// Creates designs. - /// - public static class Design - { - static Design() - { - militiaDesign = new Design(); - militiaDesign.BaseName = "Militia"; - var militiaWeapon = new ComponentTemplate(); - militiaWeapon.Durability = Mod.Current.Settings.MilitiaHitpoints; - militiaWeapon.Name = "Small Arms"; - militiaWeapon.WeaponInfo = new DirectFireWeaponInfo - { - Damage = Mod.Current.Settings.MilitiaFirepower, - MinRange = 0, - MaxRange = 1, - }; - militiaDesign.Components.Add(new MountedComponentTemplate(militiaDesign, militiaWeapon)); - } - - public static IDesign Create(VehicleTypes vt) - { - IDesign d; - switch (vt) - { - case VehicleTypes.Ship: - d = new Design(); - break; - - case VehicleTypes.Base: - d = new Design(); - break; - - case VehicleTypes.Fighter: - d = new Design(); - break; - - case VehicleTypes.Troop: - d = new Design(); - break; - - case VehicleTypes.Mine: - d = new Design(); - break; - - case VehicleTypes.Satellite: - d = new Design(); - break; - - case VehicleTypes.Drone: - d = new Design(); - break; - - case VehicleTypes.WeaponPlatform: - d = new Design(); - break; - - default: - throw new Exception("Cannot create a design for vehicle type " + vt + "."); - } - d.Owner = Empire.Current; - return d; - } - - public static IDesign Create(IHull hull) - { - var d = Create(hull.VehicleType); - d.Hull = hull; - return d; - } - - /// - /// Imports designs from the library into the game that aren't already in the game. - /// Requires a current empire. Should only be called client side. - /// - /// Copied designs imported. - public static IEnumerable ImportFromLibrary() - { - if (Empire.Current == null) - throw new InvalidOperationException("Can't import designs without a current empire."); - - var designs = Library.Import(d => d.IsValidInMod && !Empire.Current.KnownDesigns.Any(d2 => d2.Equals(d))).ToArray(); - - designs.SafeForeach(d => - { - d.IsNew = true; - d.Owner = Empire.Current; - d.TurnNumber = Galaxy.Current.TurnNumber; - d.Iteration = Empire.Current.KnownDesigns.OwnedBy(Empire.Current).Where(x => x.BaseName == d.BaseName && x.IsUnlocked()).MaxOrDefault(x => x.Iteration) + 1; // auto assign nex available iteration - d.IsObsolete = d.IsObsolescent; - Empire.Current.KnownDesigns.Add(d); // only client side, don't need to worry about other players spying :) - }); - - return designs; - } - - public static Design militiaDesign; - - public static Design MilitiaDesign => militiaDesign; - } - - /// - /// A vehicle design. - /// - /// The type of vehicle. - [Serializable] - public class Design : IDesign, ITemplate where T : IVehicle - { - public Design() - { - Components = new List(); - Iteration = 1; - } - - public IEnumerable Abilities - { - get { return Hull.Abilities.Concat(Components.SelectMany(c => c.UnstackedAbilities)).Stack(this); } - } - - public AbilityTargets AbilityTarget - { - get { return Hull == null ? AbilityTargets.None : Hull.AbilityTarget; } - } - - public int Accuracy - { - get { return this.GetAbilityValue("Combat To Hit Offense Plus").ToInt() - this.GetAbilityValue("Combat To Hit Offense Minus").ToInt(); } - } - - public int ArmorHitpoints - { - get { return this.Components.Where(c => c.ComponentTemplate.HasAbility("Armor")).Sum(c => c.Durability); } - } - - public string BaseName { get; set; } - - public int CargoCapacity - { - get { return this.GetAbilityValue("Cargo Storage").ToInt(); } - } - - public int CargoStorage - { - get { return this.GetAbilityValue("Cargo Storage").ToInt(); } - } - - /// - /// Designs contain abilities from their - /// - public IEnumerable ChildAbilities - { - get { throw new NotImplementedException(); } - } - - public IEnumerable Children - { - get { return new IAbilityObject[] { Hull }.Concat(Components); } - } - - public double CombatSpeed - => Mod.Current.Settings.CombatSpeedPercentPerStrategicSpeed.PercentOf(StrategicSpeed) - + this.GetAbilityValue("Combat Movement").ToDouble(); - - /// - /// The components used in this design. - /// - public IList Components - { - get; - private set; - } - - /// - /// The resource cost to build the design. - /// - public ResourceQuantity Cost - { - get - { - if (!Components.Any()) - return Hull.Cost; - return Hull.Cost + Components.Select(c => c.Cost).Sum(); - } - } - - public int Evasion - { - get { return this.GetAbilityValue("Combat To Hit Defense Plus").ToInt() - this.GetAbilityValue("Combat To Hit Defense Minus").ToInt(); } - } - - [DoNotSerialize] - IHull IDesign.Hull - { - get { return Hull; } - set - { - if (value is Hull) - Hull = (Hull)value; - else - throw new Exception("Can't use a " + value.VehicleType + " hull on a " + VehicleType + " design."); - } - } - - /// - /// The hull used in this design. - /// - [DoNotSerialize] - public IHull Hull { get { return hull == null ? null : hull.Value; } set { hull = new ModReference>(value); } } - - public int HullHitpoints - { - get { return this.Components.Where(c => !c.ComponentTemplate.HasAbility("Armor")).Sum(c => c.Durability); } - } - - [DoNotSerialize] - public Image Icon - { - get - { - if (Hull == null || Owner == null) - return Pictures.GetGenericImage(GetType()); - return Hull.GetIcon(Owner.ShipsetPath); - } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return GetPaths("Mini"); - } - } - - public long ID - { - get; - set; - } - - /// - /// Designs don't have intrinsic abilities. - /// - public IEnumerable IntrinsicAbilities - { - get { yield break; } - } - - public bool IsDisposed { get; set; } - - public bool IsMemory - { - get; - set; - } - - /// - /// Is this a newly created design on the client side that needs to be sent to the server? - /// - [DoNotSerialize] - public bool IsNew - { - get; - set; - } - - /// - /// Does this design have components or hull which can be upgraded? - /// - /// - /// Once we have upgradeable hulls and mounts, those will be checked here as well. - /// - public bool IsObsolescent - { - get - { - return Hull.IsObsolescent || Components.Any(c => c.IsObsolescent); - } - } - - /// - /// Has this design been marked as obsolete by the player or an AI minister? - /// - public bool IsObsolete { get; set; } - - public bool IsValidInMod => hull.HasValue && Components.All(q => q.IsValidInMod); - - public int Iteration { get; set; } - - /// - /// The latest iteration of this design. - /// - public IDesign LatestVersion - { - get - { - return Owner.KnownDesigns.OfType>().Where(q => - q.Owner == Owner - && q.Name == Name - ).MaxBy(q => q.Iteration) ?? this; - } - } - - /// - /// Creates an upgraded version of this design, with the latest upgraded components, etc. - /// - /// - public IDesign Upgrade() - { - var copy = this.CopyAndAssignNewID(); - copy.Hull = Hull.LatestVersion; - copy.TurnNumber = Galaxy.Current.TurnNumber; - copy.Owner = Empire.Current; - copy.Iteration = Empire.Current.KnownDesigns.OwnedBy(Empire.Current).Where(x => x.BaseName == BaseName && x.IsUnlocked()).MaxOrDefault(x => x.Iteration) + 1; // auto assign nex available iteration - copy.VehiclesBuilt = 0; - copy.IsObsolete = false; - - // use real component templates and mounts from mod, not copies! - copy.Components.Clear(); - foreach (var mct in Components) - { - // reuse templates so components appear "condensed" on vehicle designer - var mount = mct.Mount == null ? null : mct.Mount.LatestVersion; - var ct = mct.ComponentTemplate.LatestVersion; - var same = copy.Components.FirstOrDefault(x => x.ComponentTemplate == ct && x.Mount == mount); - if (same == null) - copy.Components.Add(new MountedComponentTemplate(copy, ct, mount)); - else - copy.Components.Add(same); - } - return copy; - } - - public ResourceQuantity MaintenanceCost - { - get - { - double pct; - if (Hull.VehicleType == VehicleTypes.Ship || Hull.VehicleType == VehicleTypes.Base) - pct = Mod.Current.Settings.ShipBaseMaintenanceRate; - else - pct = Mod.Current.Settings.UnitMaintenanceRate; - - if (pct > 0) - { - if (Owner != null) - { - pct -= Owner.GetAbilityValue("Reduced Maintenance Cost - Empire").ToInt(); - pct -= Owner.Culture.MaintenanceReduction; - if (Owner.PrimaryRace.Aptitudes.ContainsKey(Aptitude.Maintenance.Name)) - pct -= Owner.PrimaryRace.Aptitudes[Aptitude.Maintenance.Name] - 100; - } - pct *= (100d + this.GetAbilityValue("Modified Maintenance Cost").ToInt()) / 100d; - return Cost * pct / 100d; - } - else - return new ResourceQuantity(); - } - } - - IDesign IUpgradeable.LatestVersion - { - get { return LatestVersion; } - } - - public string Name - { - get - { - if (Iteration == 1) - return BaseName; - else - return BaseName + " " + Iteration.ToRomanNumeral(); - } - } - - IEnumerable IUpgradeable.NewerVersions - { - get { return NewerVersions; } - } - - public IEnumerable> NewerVersions - { - get - { - // TODO - check design library? - return Galaxy.Current.Referrables.OfType>().Where(d => d.Owner == Owner && d.BaseName == BaseName && d.Iteration > Iteration); - } - } - - IEnumerable IUpgradeable.OlderVersions - { - get { return OlderVersions; } - } - - public IEnumerable> OlderVersions - { - get - { - // TODO - check design library? - return Galaxy.Current.Referrables.OfType>().Where(d => d.Owner == Owner && d.BaseName == BaseName && d.Iteration < Iteration); - } - } - - /// - /// The empire which created this design. - /// - [DoNotSerialize] - public Empire Owner { get { return owner; } set { owner = value; } } - - public IEnumerable ParentAbilities - { - get { throw new NotImplementedException(); } - } - - public IEnumerable Parents - { - get - { - yield return Owner; - } - } - - [DoNotSerialize] - public Image Portrait - { - get - { - if (Hull == null || Owner == null) - return Pictures.GetGenericImage(GetType()); - return Hull.GetPortrait(Owner.ShipsetPath); - } - } - - public IEnumerable PortraitPaths - { - get - { - return GetPaths("Portrait"); - } - } - - public IEnumerable RealVehicles - { - get { return Vehicles.Where(v => !v.IsMemory); } - } - - public bool RequiresColonyQueue - { - get { return false; } - } - - public bool RequiresSpaceYardQueue - { - get { return VehicleType == VehicleTypes.Ship || VehicleType == VehicleTypes.Base; } - } - - public string ResearchGroup - { - get { return VehicleTypeName; } - } - - /// - /// The ship's role (design type in SE4). - /// - public string Role { get; set; } - - public int ShieldHitpoints - { - get { return this.GetAbilityValue("Planet - Shield Generation").ToInt() + this.GetAbilityValue("Shield Generation").ToInt() + this.GetAbilityValue("Phased Shield Generation").ToInt(); } - } - - public int ShieldRegeneration - { - get { return this.GetAbilityValue("Shield Regeneration").ToInt(); } - } - - /// - /// Unused space on the design. - /// - public int SpaceFree - { - get - { - var hullsize = Hull == null ? 0 : Hull.Size; - return hullsize - Components.Sum(comp => comp.Size); - } - } - - public int StrategicSpeed - { - get - { - // no Engines Per Move rating? then no movement - if (Hull.ThrustPerMove == 0) - return 0; - var thrust = this.GetAbilityValue("Standard Ship Movement").ToInt(); - // TODO - make sure that Movement Bonus and Extra Movement are not in fact affected by Engines Per Move in SE4 - return thrust / Hull.ThrustPerMove + this.GetAbilityValue("Movement Bonus").ToInt() + this.GetAbilityValue("Extra Movement Generation").ToInt() + this.GetAbilityValue("Vehicle Speed").ToInt(); - } - } - - public int SupplyStorage - { - get { return this.GetAbilityValue("Supply Storage").ToInt(); } - } - - public int SupplyUsagePerSector - { - get - { - return Components.Where(comp => comp.HasAbility("Standard Ship Movement") || comp.HasAbility("Extra Movement Generation") || comp.HasAbility("Movement Bonus")).Sum(comp => comp.SupplyUsage); - } - } - - public double Timestamp - { - get; - set; - } - - /// - /// The turn this design was created (for our designs) or discovered (for alien designs). - /// - public int TurnNumber { get; set; } - - public IList> UnlockRequirements - { - get - { - var list = new List>(); - foreach (var req in Hull.UnlockRequirements) - list.Add(req); - foreach (var req in Components.SelectMany(c => c.ComponentTemplate.UnlockRequirements)) - list.Add(req); - foreach (var req in Components.SelectMany(c => c.Mount == null ? Enumerable.Empty>() : c.Mount.UnlockRequirements)) - list.Add(req); - return list; - } - } - - public IEnumerable UnstackedAbilities - { - get { return Hull.Abilities.Concat(Components.SelectMany(c => c.UnstackedAbilities)); } - } - - public IEnumerable Vehicles - { - get { return Galaxy.Current.Referrables.OfType().Where(v => v.Design == this); } - } - - /// - /// How many vehicles have been built using this design? - /// Should not be visible for enemy designs. - /// - public int VehiclesBuilt { get; set; } - - public VehicleTypes VehicleType - { - get - { - if (typeof(T) == typeof(Ship)) - return VehicleTypes.Ship; - if (typeof(T) == typeof(Base)) - return VehicleTypes.Base; - if (typeof(T) == typeof(Fighter)) - return VehicleTypes.Fighter; - if (typeof(T) == typeof(Satellite)) - return VehicleTypes.Satellite; - if (typeof(T) == typeof(Troop)) - return VehicleTypes.Troop; - if (typeof(T) == typeof(Drone)) - return VehicleTypes.Drone; - if (typeof(T) == typeof(Mine)) - return VehicleTypes.Mine; - if (typeof(T) == typeof(WeaponPlatform)) - return VehicleTypes.WeaponPlatform; - throw new Exception("Invalid vehicle type " + typeof(T) + "."); - } - } - - public string VehicleTypeName - { - get - { - return VehicleType.ToSpacedString(); - } - } - - public IEnumerable Warnings - { - get - { - if (string.IsNullOrWhiteSpace(Name)) - yield return "You must give your design a name."; - if (string.IsNullOrEmpty(Role)) - yield return "You must give your design a role."; - if (Hull == null) - yield return "You must select a hull for your design."; - if (!Owner.HasUnlocked(Hull)) - yield return "You have not unlocked the " + Hull + "."; - var comps = Components.Select(comp => comp.ComponentTemplate); - if (Hull.NeedsBridge && (!comps.Any(comp => comp.HasAbility("Ship Bridge")) && !comps.Any(comp => comp.HasAbility("Master Computer")))) - yield return "This hull requires a bridge or master computer."; - if (comps.Count(comp => comp.HasAbility("Ship Bridge")) > 1) - yield return "A vehicle can have no more than one bridge"; - if (!Hull.CanUseAuxiliaryControl && comps.Any(comp => comp.HasAbility("Ship Auxiliary Control"))) - yield return "This hull cannot use auxiliary control."; - if (comps.Count(comp => comp.HasAbility("Ship Auxiliary Control")) > 1) - yield return "A vehicle can have no more than one auxiliary control."; - if (comps.Count(comp => comp.HasAbility("Master Computer")) > 1) - yield return "A vehicle can have no more than one master computer."; - if (comps.Count(comp => comp.HasAbility("Standard Ship Movement")) > Hull.MaxEngines) - yield return "This hull can only support " + Hull.MaxEngines + " engines."; - if (comps.Count(comp => comp.HasAbility("Ship Life Support")) < Hull.MinLifeSupport && !comps.Any(comp => comp.HasAbility("Master Computer"))) - yield return "This hull requires at least " + Hull.MinCrewQuarters + " life support modules or a Master Computer."; - if (comps.Count(comp => comp.HasAbility("Ship Crew Quarters")) < Hull.MinCrewQuarters && !comps.Any(comp => comp.HasAbility("Master Computer"))) - yield return "This hull requires at least " + Hull.MinCrewQuarters + " crew quarters or a Master Computer."; - if ((double)Components.Where(comp => comp.HasAbility("Cargo Storage")).Sum(comp => comp.Size) / (double)Hull.Size * 100d < Hull.MinPercentCargoBays) - yield return "This hull requires at least " + Hull.MinPercentCargoBays + "% of its space to be used by cargo-class components."; - if ((double)Components.Where(comp => comp.HasAbility("Launch/Recover Fighters")).Sum(comp => comp.Size) / (double)Hull.Size * 100d < Hull.MinPercentFighterBays) - yield return "This hull requires at least " + Hull.MinPercentFighterBays + "% of its space to be used by fighter bays."; - if ((double)Components.Where(comp => comp.HasAbility("Colonize Planet - Rock") || comp.HasAbility("Colonize Planet - Ice") || comp.HasAbility("Colonize Planet - Gas")).Sum(comp => comp.Size) / (double)Hull.Size * 100d < Hull.MinPercentColonyModules) - yield return "This hull requires at least " + Hull.MinPercentColonyModules + "% of its space to be used by colony modules."; - foreach (var g in comps.GroupBy(comp => comp.Family)) - { - var limited = g.Where(comp => comp.MaxPerVehicle != null); - if (limited.Any()) - { - var limit = limited.Min(comp => comp.MaxPerVehicle.Value); - var name = g.First(comp => comp.MaxPerVehicle == limit).Name; - if (limit < g.Count()) - yield return "The " + name + " family of components is limited to " + limit + " per vehicle."; - } - } - if (SpaceFree < 0) - yield return "You are over the hull size limit by " + (-SpaceFree).Kilotons() + "."; - foreach (var c in comps.Distinct()) - { - if (!c.VehicleTypes.HasFlag(VehicleType)) - yield return "The " + c.Name + " cannot be placed on this vehicle type."; - } - foreach (var comp in Components.GroupBy(mct => mct.ComponentTemplate).Select(g => g.Key)) - { - if (!Owner.HasUnlocked(comp)) - yield return "You have not unlocked the " + comp + "."; - } - foreach (var mount in Components.GroupBy(mct => mct.Mount).Select(g => g.Key)) - { - if (!Hull.CanUseMount(mount)) - yield return "This hull cannot use the " + mount + "."; - if (!Owner.HasUnlocked(mount)) - yield return "You have not unlocked the " + mount + "."; - } - foreach (var mct in Components.GroupBy(mct => mct).Select(g => g.Key)) - { - if (!mct.ComponentTemplate.CanUseMount(mct.Mount)) - yield return "The " + mct.ComponentTemplate + " cannot use the " + mct.Mount + "."; - } - } - } - - private ModReference> hull { get; set; } - - /// - /// For serialization and client safety - /// - private GalaxyReference owner { get; set; } - - public void AddComponent(ComponentTemplate ct, Mount m = null) - { - Components.Add(new MountedComponentTemplate(this, ct, m)); - } - - public Visibility CheckVisibility(Empire emp) - { - if (Owner == emp) - return Visibility.Owned; - // do we already know the design? or did we engage in combat with it this turn? - // TODO - "battle manager" so we're not tied to a specific combat implementation - else if (emp.KnownDesigns.Contains(this) || Galaxy.Current.Battles.Any(b => - b.Combatants.Any(c => c.Owner == emp) && - (b.Combatants.OfType().Any(v => v.Design == this) - || b.Combatants.OfType().Any(c => c.Cargo?.Units?.Any(u => u.Design == this) ?? false)))) - return Visibility.Scanned; - return Visibility.Unknown; - } - - public void Clean() - { - // make sure this design's components actually belong to this design! - foreach (var mct in Components) - mct.Container = this; - } - - public IConstructionOrder CreateConstructionOrder(ConstructionQueue queue) - { - var dtype = GetType(); - var vtype = dtype.GetGenericArguments()[0]; - var ordertype = typeof(ConstructionOrder<,>).MakeGenericType(vtype, dtype); - var o = (IConstructionOrder)Activator.CreateInstance(ordertype); - o.GetType().GetProperty("Template").SetValue(o, this, new object[] { }); - return o; - } - - public ICreateDesignCommand CreateCreationCommand() - { - return new CreateDesignCommand(this); - } - - public void Dispose() - { - if (IsDisposed) - return; - Galaxy.Current.UnassignID(this); - foreach (var emp in Galaxy.Current.Empires.Where(e => e != null)) - emp.KnownDesigns.Remove(this); - } - - public override bool Equals(object obj) - { - if (obj is Design d) - { - if (d.BaseName != BaseName) - return false; - if (d.Hull != Hull) - return false; - if (d.Components.Count != Components.Count) - return false; - for (var i = 0; i < Components.Count; i++) - { - if (d.Components[i].ComponentTemplate != Components[i].ComponentTemplate) - return false; - if (d.Components[i].Mount != Components[i].Mount) - return false; - } - return true; - } - return false; - } - - /// - /// A design is unlocked if its hull and all used mounts/components are unlocked. - /// - /// - /// - public bool HasBeenUnlockedBy(Empire emp) - { - return emp.HasUnlocked(Hull) && Components.All(c => emp.HasUnlocked(c.ComponentTemplate) && emp.HasUnlocked(c.Mount)); - } - - /// - /// Has the empire unlocked the hull, components, and mounts used on this design? - /// - /// - /// - public bool HasEmpireUnlocked(Empire emp) - { - return emp.HasUnlocked(Hull) && Components.All(mct => emp.HasUnlocked(mct.ComponentTemplate) && emp.HasUnlocked(mct.Mount)); - } - - public T Instantiate() - { - var t = Activator.CreateInstance(); - t.Design = this; - foreach (var mct in Components) - { - var c = mct.Instantiate(); - t.Components.Add(c); - c.Container = t; - } - VehiclesBuilt++; - t.Name = Name + " " + VehiclesBuilt; - return t; - } - - IVehicle IDesign.Instantiate() - { - return Instantiate(); - } - - /*public Combat2.StrategyObject Strategy { get; set; } - - public Tactic Tactic { get; set; }*/ - - public bool IsObsoleteMemory(Empire emp) - { - return false; - } - - public void Redact(Empire emp) - { - // can't see "obsoleteness" of foreign designs unless you've seen a newer iteration of the same design - if (CheckVisibility(emp) < Visibility.Owned && !emp.KnownDesigns.Any(d => d.BaseName == BaseName && d.Iteration > Iteration)) - IsObsolete = false; - - if (CheckVisibility(emp) < Visibility.Fogged) - Dispose(); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - foreach (var mct in Components) - mct.ReplaceClientIDs(idmap, done); - } - } - - public override string ToString() - { - return Name; - } - - private IEnumerable GetPaths(string pathtype) - { - var shipsetPath = Owner.ShipsetPath; - if (shipsetPath == null) - shipsetPath = "Default"; - if (!Hull.PictureNames.Any()) - return Enumerable.Empty(); - var paths = new List(); - - foreach (var s in Hull.PictureNames) - { - if (Mod.Current.RootPath != null) - { - paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, pathtype + "_" + s)); - paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, shipsetPath + "_" + pathtype + "_" + s)); // for SE4 shipset compatibility - } - paths.Add(Path.Combine("Pictures", "Races", shipsetPath, pathtype + "_" + s)); - paths.Add(Path.Combine("Pictures", "Races", shipsetPath, shipsetPath + "_" + pathtype + "_" + s)); // for SE4 shipset compatibility - } - return paths; - } - - IDesign IDesign.Upgrade() - => Upgrade(); - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Commands; +using FrEee.Objects.Orders; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Modding; +using FrEee.Modding.Templates; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; + +namespace FrEee.Objects.Vehicles +{ + /// + /// Creates designs. + /// + public static class Design + { + static Design() + { + militiaDesign = new Design(); + militiaDesign.BaseName = "Militia"; + var militiaWeapon = new ComponentTemplate(); + militiaWeapon.Durability = Mod.Current.Settings.MilitiaHitpoints; + militiaWeapon.Name = "Small Arms"; + militiaWeapon.WeaponInfo = new DirectFireWeaponInfo + { + Damage = Mod.Current.Settings.MilitiaFirepower, + MinRange = 0, + MaxRange = 1, + }; + militiaDesign.Components.Add(new MountedComponentTemplate(militiaDesign, militiaWeapon)); + } + + public static IDesign Create(VehicleTypes vt) + { + IDesign d; + switch (vt) + { + case VehicleTypes.Ship: + d = new Design(); + break; + + case VehicleTypes.Base: + d = new Design(); + break; + + case VehicleTypes.Fighter: + d = new Design(); + break; + + case VehicleTypes.Troop: + d = new Design(); + break; + + case VehicleTypes.Mine: + d = new Design(); + break; + + case VehicleTypes.Satellite: + d = new Design(); + break; + + case VehicleTypes.Drone: + d = new Design(); + break; + + case VehicleTypes.WeaponPlatform: + d = new Design(); + break; + + default: + throw new Exception("Cannot create a design for vehicle type " + vt + "."); + } + d.Owner = Empire.Current; + return d; + } + + public static IDesign Create(IHull hull) + { + var d = Create(hull.VehicleType); + d.Hull = hull; + return d; + } + + /// + /// Imports designs from the library into the game that aren't already in the game. + /// Requires a current empire. Should only be called client side. + /// + /// Copied designs imported. + public static IEnumerable ImportFromLibrary() + { + if (Empire.Current == null) + throw new InvalidOperationException("Can't import designs without a current empire."); + + var designs = Library.Import(d => d.IsValidInMod && !Empire.Current.KnownDesigns.Any(d2 => d2.Equals(d))).ToArray(); + + designs.SafeForeach(d => + { + d.IsNew = true; + d.Owner = Empire.Current; + d.TurnNumber = Galaxy.Current.TurnNumber; + d.Iteration = Empire.Current.KnownDesigns.OwnedBy(Empire.Current).Where(x => x.BaseName == d.BaseName && x.IsUnlocked()).MaxOrDefault(x => x.Iteration) + 1; // auto assign nex available iteration + d.IsObsolete = d.IsObsolescent; + Empire.Current.KnownDesigns.Add(d); // only client side, don't need to worry about other players spying :) + }); + + return designs; + } + + public static Design militiaDesign; + + public static Design MilitiaDesign => militiaDesign; + } + + /// + /// A vehicle design. + /// + /// The type of vehicle. + [Serializable] + public class Design : IDesign, ITemplate where T : IVehicle + { + public Design() + { + Components = new List(); + Iteration = 1; + } + + public IEnumerable Abilities + { + get { return Hull.Abilities.Concat(Components.SelectMany(c => c.UnstackedAbilities)).Stack(this); } + } + + public AbilityTargets AbilityTarget + { + get { return Hull == null ? AbilityTargets.None : Hull.AbilityTarget; } + } + + public int Accuracy + { + get { return this.GetAbilityValue("Combat To Hit Offense Plus").ToInt() - this.GetAbilityValue("Combat To Hit Offense Minus").ToInt(); } + } + + public int ArmorHitpoints + { + get { return this.Components.Where(c => c.ComponentTemplate.HasAbility("Armor")).Sum(c => c.Durability); } + } + + public string BaseName { get; set; } + + public int CargoCapacity + { + get { return this.GetAbilityValue("Cargo Storage").ToInt(); } + } + + public int CargoStorage + { + get { return this.GetAbilityValue("Cargo Storage").ToInt(); } + } + + /// + /// Designs contain abilities from their + /// + public IEnumerable ChildAbilities + { + get { throw new NotImplementedException(); } + } + + public IEnumerable Children + { + get { return new IAbilityObject[] { Hull }.Concat(Components); } + } + + public double CombatSpeed + => Mod.Current.Settings.CombatSpeedPercentPerStrategicSpeed.PercentOf(StrategicSpeed) + + this.GetAbilityValue("Combat Movement").ToDouble(); + + /// + /// The components used in this design. + /// + public IList Components + { + get; + private set; + } + + /// + /// The resource cost to build the design. + /// + public ResourceQuantity Cost + { + get + { + if (!Components.Any()) + return Hull.Cost; + return Hull.Cost + Components.Select(c => c.Cost).Sum(); + } + } + + public int Evasion + { + get { return this.GetAbilityValue("Combat To Hit Defense Plus").ToInt() - this.GetAbilityValue("Combat To Hit Defense Minus").ToInt(); } + } + + [DoNotSerialize] + IHull IDesign.Hull + { + get { return Hull; } + set + { + if (value is Hull) + Hull = (Hull)value; + else + throw new Exception("Can't use a " + value.VehicleType + " hull on a " + VehicleType + " design."); + } + } + + /// + /// The hull used in this design. + /// + [DoNotSerialize] + public IHull Hull { get { return hull == null ? null : hull.Value; } set { hull = new ModReference>(value); } } + + public int HullHitpoints + { + get { return this.Components.Where(c => !c.ComponentTemplate.HasAbility("Armor")).Sum(c => c.Durability); } + } + + [DoNotSerialize] + public Image Icon + { + get + { + if (Hull == null || Owner == null) + return Pictures.GetGenericImage(GetType()); + return Hull.GetIcon(Owner.ShipsetPath); + } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return GetPaths("Mini"); + } + } + + public long ID + { + get; + set; + } + + /// + /// Designs don't have intrinsic abilities. + /// + public IEnumerable IntrinsicAbilities + { + get { yield break; } + } + + public bool IsDisposed { get; set; } + + public bool IsMemory + { + get; + set; + } + + /// + /// Is this a newly created design on the client side that needs to be sent to the server? + /// + [DoNotSerialize] + public bool IsNew + { + get; + set; + } + + /// + /// Does this design have components or hull which can be upgraded? + /// + /// + /// Once we have upgradeable hulls and mounts, those will be checked here as well. + /// + public bool IsObsolescent + { + get + { + return Hull.IsObsolescent || Components.Any(c => c.IsObsolescent); + } + } + + /// + /// Has this design been marked as obsolete by the player or an AI minister? + /// + public bool IsObsolete { get; set; } + + public bool IsValidInMod => hull.HasValue && Components.All(q => q.IsValidInMod); + + public int Iteration { get; set; } + + /// + /// The latest iteration of this design. + /// + public IDesign LatestVersion + { + get + { + return Owner.KnownDesigns.OfType>().Where(q => + q.Owner == Owner + && q.Name == Name + ).MaxBy(q => q.Iteration) ?? this; + } + } + + /// + /// Creates an upgraded version of this design, with the latest upgraded components, etc. + /// + /// + public IDesign Upgrade() + { + var copy = this.CopyAndAssignNewID(); + copy.Hull = Hull.LatestVersion; + copy.TurnNumber = Galaxy.Current.TurnNumber; + copy.Owner = Empire.Current; + copy.Iteration = Empire.Current.KnownDesigns.OwnedBy(Empire.Current).Where(x => x.BaseName == BaseName && x.IsUnlocked()).MaxOrDefault(x => x.Iteration) + 1; // auto assign nex available iteration + copy.VehiclesBuilt = 0; + copy.IsObsolete = false; + + // use real component templates and mounts from mod, not copies! + copy.Components.Clear(); + foreach (var mct in Components) + { + // reuse templates so components appear "condensed" on vehicle designer + var mount = mct.Mount == null ? null : mct.Mount.LatestVersion; + var ct = mct.ComponentTemplate.LatestVersion; + var same = copy.Components.FirstOrDefault(x => x.ComponentTemplate == ct && x.Mount == mount); + if (same == null) + copy.Components.Add(new MountedComponentTemplate(copy, ct, mount)); + else + copy.Components.Add(same); + } + return copy; + } + + public ResourceQuantity MaintenanceCost + { + get + { + double pct; + if (Hull.VehicleType == VehicleTypes.Ship || Hull.VehicleType == VehicleTypes.Base) + pct = Mod.Current.Settings.ShipBaseMaintenanceRate; + else + pct = Mod.Current.Settings.UnitMaintenanceRate; + + if (pct > 0) + { + if (Owner != null) + { + pct -= Owner.GetAbilityValue("Reduced Maintenance Cost - Empire").ToInt(); + pct -= Owner.Culture.MaintenanceReduction; + if (Owner.PrimaryRace.Aptitudes.ContainsKey(Aptitude.Maintenance.Name)) + pct -= Owner.PrimaryRace.Aptitudes[Aptitude.Maintenance.Name] - 100; + } + pct *= (100d + this.GetAbilityValue("Modified Maintenance Cost").ToInt()) / 100d; + return Cost * pct / 100d; + } + else + return new ResourceQuantity(); + } + } + + IDesign IUpgradeable.LatestVersion + { + get { return LatestVersion; } + } + + public string Name + { + get + { + if (Iteration == 1) + return BaseName; + else + return BaseName + " " + Iteration.ToRomanNumeral(); + } + } + + IEnumerable IUpgradeable.NewerVersions + { + get { return NewerVersions; } + } + + public IEnumerable> NewerVersions + { + get + { + // TODO - check design library? + return Galaxy.Current.Referrables.OfType>().Where(d => d.Owner == Owner && d.BaseName == BaseName && d.Iteration > Iteration); + } + } + + IEnumerable IUpgradeable.OlderVersions + { + get { return OlderVersions; } + } + + public IEnumerable> OlderVersions + { + get + { + // TODO - check design library? + return Galaxy.Current.Referrables.OfType>().Where(d => d.Owner == Owner && d.BaseName == BaseName && d.Iteration < Iteration); + } + } + + /// + /// The empire which created this design. + /// + [DoNotSerialize] + public Empire Owner { get { return owner; } set { owner = value; } } + + public IEnumerable ParentAbilities + { + get { throw new NotImplementedException(); } + } + + public IEnumerable Parents + { + get + { + yield return Owner; + } + } + + [DoNotSerialize] + public Image Portrait + { + get + { + if (Hull == null || Owner == null) + return Pictures.GetGenericImage(GetType()); + return Hull.GetPortrait(Owner.ShipsetPath); + } + } + + public IEnumerable PortraitPaths + { + get + { + return GetPaths("Portrait"); + } + } + + public IEnumerable RealVehicles + { + get { return Vehicles.Where(v => !v.IsMemory); } + } + + public bool RequiresColonyQueue + { + get { return false; } + } + + public bool RequiresSpaceYardQueue + { + get { return VehicleType == VehicleTypes.Ship || VehicleType == VehicleTypes.Base; } + } + + public string ResearchGroup + { + get { return VehicleTypeName; } + } + + /// + /// The ship's role (design type in SE4). + /// + public string Role { get; set; } + + public int ShieldHitpoints + { + get { return this.GetAbilityValue("Planet - Shield Generation").ToInt() + this.GetAbilityValue("Shield Generation").ToInt() + this.GetAbilityValue("Phased Shield Generation").ToInt(); } + } + + public int ShieldRegeneration + { + get { return this.GetAbilityValue("Shield Regeneration").ToInt(); } + } + + /// + /// Unused space on the design. + /// + public int SpaceFree + { + get + { + var hullsize = Hull == null ? 0 : Hull.Size; + return hullsize - Components.Sum(comp => comp.Size); + } + } + + public int StrategicSpeed + { + get + { + // no Engines Per Move rating? then no movement + if (Hull.ThrustPerMove == 0) + return 0; + var thrust = this.GetAbilityValue("Standard Ship Movement").ToInt(); + // TODO - make sure that Movement Bonus and Extra Movement are not in fact affected by Engines Per Move in SE4 + return thrust / Hull.ThrustPerMove + this.GetAbilityValue("Movement Bonus").ToInt() + this.GetAbilityValue("Extra Movement Generation").ToInt() + this.GetAbilityValue("Vehicle Speed").ToInt(); + } + } + + public int SupplyStorage + { + get { return this.GetAbilityValue("Supply Storage").ToInt(); } + } + + public int SupplyUsagePerSector + { + get + { + return Components.Where(comp => comp.HasAbility("Standard Ship Movement") || comp.HasAbility("Extra Movement Generation") || comp.HasAbility("Movement Bonus")).Sum(comp => comp.SupplyUsage); + } + } + + public double Timestamp + { + get; + set; + } + + /// + /// The turn this design was created (for our designs) or discovered (for alien designs). + /// + public int TurnNumber { get; set; } + + public IList> UnlockRequirements + { + get + { + var list = new List>(); + foreach (var req in Hull.UnlockRequirements) + list.Add(req); + foreach (var req in Components.SelectMany(c => c.ComponentTemplate.UnlockRequirements)) + list.Add(req); + foreach (var req in Components.SelectMany(c => c.Mount == null ? Enumerable.Empty>() : c.Mount.UnlockRequirements)) + list.Add(req); + return list; + } + } + + public IEnumerable UnstackedAbilities + { + get { return Hull.Abilities.Concat(Components.SelectMany(c => c.UnstackedAbilities)); } + } + + public IEnumerable Vehicles + { + get { return Galaxy.Current.Referrables.OfType().Where(v => v.Design == this); } + } + + /// + /// How many vehicles have been built using this design? + /// Should not be visible for enemy designs. + /// + public int VehiclesBuilt { get; set; } + + public VehicleTypes VehicleType + { + get + { + if (typeof(T) == typeof(Ship)) + return VehicleTypes.Ship; + if (typeof(T) == typeof(Base)) + return VehicleTypes.Base; + if (typeof(T) == typeof(Fighter)) + return VehicleTypes.Fighter; + if (typeof(T) == typeof(Satellite)) + return VehicleTypes.Satellite; + if (typeof(T) == typeof(Troop)) + return VehicleTypes.Troop; + if (typeof(T) == typeof(Drone)) + return VehicleTypes.Drone; + if (typeof(T) == typeof(Mine)) + return VehicleTypes.Mine; + if (typeof(T) == typeof(WeaponPlatform)) + return VehicleTypes.WeaponPlatform; + throw new Exception("Invalid vehicle type " + typeof(T) + "."); + } + } + + public string VehicleTypeName + { + get + { + return VehicleType.ToSpacedString(); + } + } + + public IEnumerable Warnings + { + get + { + if (string.IsNullOrWhiteSpace(Name)) + yield return "You must give your design a name."; + if (string.IsNullOrEmpty(Role)) + yield return "You must give your design a role."; + if (Hull == null) + yield return "You must select a hull for your design."; + if (!Owner.HasUnlocked(Hull)) + yield return "You have not unlocked the " + Hull + "."; + var comps = Components.Select(comp => comp.ComponentTemplate); + if (Hull.NeedsBridge && (!comps.Any(comp => comp.HasAbility("Ship Bridge")) && !comps.Any(comp => comp.HasAbility("Master Computer")))) + yield return "This hull requires a bridge or master computer."; + if (comps.Count(comp => comp.HasAbility("Ship Bridge")) > 1) + yield return "A vehicle can have no more than one bridge"; + if (!Hull.CanUseAuxiliaryControl && comps.Any(comp => comp.HasAbility("Ship Auxiliary Control"))) + yield return "This hull cannot use auxiliary control."; + if (comps.Count(comp => comp.HasAbility("Ship Auxiliary Control")) > 1) + yield return "A vehicle can have no more than one auxiliary control."; + if (comps.Count(comp => comp.HasAbility("Master Computer")) > 1) + yield return "A vehicle can have no more than one master computer."; + if (comps.Count(comp => comp.HasAbility("Standard Ship Movement")) > Hull.MaxEngines) + yield return "This hull can only support " + Hull.MaxEngines + " engines."; + if (comps.Count(comp => comp.HasAbility("Ship Life Support")) < Hull.MinLifeSupport && !comps.Any(comp => comp.HasAbility("Master Computer"))) + yield return "This hull requires at least " + Hull.MinCrewQuarters + " life support modules or a Master Computer."; + if (comps.Count(comp => comp.HasAbility("Ship Crew Quarters")) < Hull.MinCrewQuarters && !comps.Any(comp => comp.HasAbility("Master Computer"))) + yield return "This hull requires at least " + Hull.MinCrewQuarters + " crew quarters or a Master Computer."; + if ((double)Components.Where(comp => comp.HasAbility("Cargo Storage")).Sum(comp => comp.Size) / (double)Hull.Size * 100d < Hull.MinPercentCargoBays) + yield return "This hull requires at least " + Hull.MinPercentCargoBays + "% of its space to be used by cargo-class components."; + if ((double)Components.Where(comp => comp.HasAbility("Launch/Recover Fighters")).Sum(comp => comp.Size) / (double)Hull.Size * 100d < Hull.MinPercentFighterBays) + yield return "This hull requires at least " + Hull.MinPercentFighterBays + "% of its space to be used by fighter bays."; + if ((double)Components.Where(comp => comp.HasAbility("Colonize Planet - Rock") || comp.HasAbility("Colonize Planet - Ice") || comp.HasAbility("Colonize Planet - Gas")).Sum(comp => comp.Size) / (double)Hull.Size * 100d < Hull.MinPercentColonyModules) + yield return "This hull requires at least " + Hull.MinPercentColonyModules + "% of its space to be used by colony modules."; + foreach (var g in comps.GroupBy(comp => comp.Family)) + { + var limited = g.Where(comp => comp.MaxPerVehicle != null); + if (limited.Any()) + { + var limit = limited.Min(comp => comp.MaxPerVehicle.Value); + var name = g.First(comp => comp.MaxPerVehicle == limit).Name; + if (limit < g.Count()) + yield return "The " + name + " family of components is limited to " + limit + " per vehicle."; + } + } + if (SpaceFree < 0) + yield return "You are over the hull size limit by " + (-SpaceFree).Kilotons() + "."; + foreach (var c in comps.Distinct()) + { + if (!c.VehicleTypes.HasFlag(VehicleType)) + yield return "The " + c.Name + " cannot be placed on this vehicle type."; + } + foreach (var comp in Components.GroupBy(mct => mct.ComponentTemplate).Select(g => g.Key)) + { + if (!Owner.HasUnlocked(comp)) + yield return "You have not unlocked the " + comp + "."; + } + foreach (var mount in Components.GroupBy(mct => mct.Mount).Select(g => g.Key)) + { + if (!Hull.CanUseMount(mount)) + yield return "This hull cannot use the " + mount + "."; + if (!Owner.HasUnlocked(mount)) + yield return "You have not unlocked the " + mount + "."; + } + foreach (var mct in Components.GroupBy(mct => mct).Select(g => g.Key)) + { + if (!mct.ComponentTemplate.CanUseMount(mct.Mount)) + yield return "The " + mct.ComponentTemplate + " cannot use the " + mct.Mount + "."; + } + } + } + + private ModReference> hull { get; set; } + + /// + /// For serialization and client safety + /// + private GalaxyReference owner { get; set; } + + public void AddComponent(ComponentTemplate ct, Mount m = null) + { + Components.Add(new MountedComponentTemplate(this, ct, m)); + } + + public Visibility CheckVisibility(Empire emp) + { + if (Owner == emp) + return Visibility.Owned; + // do we already know the design? or did we engage in combat with it this turn? + // TODO - "battle manager" so we're not tied to a specific combat implementation + else if (emp.KnownDesigns.Contains(this) || Galaxy.Current.Battles.Any(b => + b.Combatants.Any(c => c.Owner == emp) && + (b.Combatants.OfType().Any(v => v.Design == this) + || b.Combatants.OfType().Any(c => c.Cargo?.Units?.Any(u => u.Design == this) ?? false)))) + return Visibility.Scanned; + return Visibility.Unknown; + } + + public void Clean() + { + // make sure this design's components actually belong to this design! + foreach (var mct in Components) + mct.Container = this; + } + + public IConstructionOrder CreateConstructionOrder(ConstructionQueue queue) + { + var dtype = GetType(); + var vtype = dtype.GetGenericArguments()[0]; + var ordertype = typeof(ConstructionOrder<,>).MakeGenericType(vtype, dtype); + var o = (IConstructionOrder)Activator.CreateInstance(ordertype); + o.GetType().GetProperty("Template").SetValue(o, this, new object[] { }); + return o; + } + + public ICreateDesignCommand CreateCreationCommand() + { + return new CreateDesignCommand(this); + } + + public void Dispose() + { + if (IsDisposed) + return; + Galaxy.Current.UnassignID(this); + foreach (var emp in Galaxy.Current.Empires.Where(e => e != null)) + emp.KnownDesigns.Remove(this); + } + + public override bool Equals(object obj) + { + if (obj is Design d) + { + if (d.BaseName != BaseName) + return false; + if (d.Hull != Hull) + return false; + if (d.Components.Count != Components.Count) + return false; + for (var i = 0; i < Components.Count; i++) + { + if (d.Components[i].ComponentTemplate != Components[i].ComponentTemplate) + return false; + if (d.Components[i].Mount != Components[i].Mount) + return false; + } + return true; + } + return false; + } + + /// + /// A design is unlocked if its hull and all used mounts/components are unlocked. + /// + /// + /// + public bool HasBeenUnlockedBy(Empire emp) + { + return emp.HasUnlocked(Hull) && Components.All(c => emp.HasUnlocked(c.ComponentTemplate) && emp.HasUnlocked(c.Mount)); + } + + /// + /// Has the empire unlocked the hull, components, and mounts used on this design? + /// + /// + /// + public bool HasEmpireUnlocked(Empire emp) + { + return emp.HasUnlocked(Hull) && Components.All(mct => emp.HasUnlocked(mct.ComponentTemplate) && emp.HasUnlocked(mct.Mount)); + } + + public T Instantiate() + { + var t = Activator.CreateInstance(); + t.Design = this; + foreach (var mct in Components) + { + var c = mct.Instantiate(); + t.Components.Add(c); + c.Container = t; + } + VehiclesBuilt++; + t.Name = Name + " " + VehiclesBuilt; + return t; + } + + IVehicle IDesign.Instantiate() + { + return Instantiate(); + } + + /*public Combat2.StrategyObject Strategy { get; set; } + + public Tactic Tactic { get; set; }*/ + + public bool IsObsoleteMemory(Empire emp) + { + return false; + } + + public void Redact(Empire emp) + { + // can't see "obsoleteness" of foreign designs unless you've seen a newer iteration of the same design + if (CheckVisibility(emp) < Visibility.Owned && !emp.KnownDesigns.Any(d => d.BaseName == BaseName && d.Iteration > Iteration)) + IsObsolete = false; + + if (CheckVisibility(emp) < Visibility.Fogged) + Dispose(); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + foreach (var mct in Components) + mct.ReplaceClientIDs(idmap, done); + } + } + + public override string ToString() + { + return Name; + } + + private IEnumerable GetPaths(string pathtype) + { + var shipsetPath = Owner.ShipsetPath; + if (shipsetPath == null) + shipsetPath = "Default"; + if (!Hull.PictureNames.Any()) + return Enumerable.Empty(); + var paths = new List(); + + foreach (var s in Hull.PictureNames) + { + if (Mod.Current.RootPath != null) + { + paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, pathtype + "_" + s)); + paths.Add(Path.Combine("Mods", Mod.Current.RootPath, "Pictures", "Races", shipsetPath, shipsetPath + "_" + pathtype + "_" + s)); // for SE4 shipset compatibility + } + paths.Add(Path.Combine("Pictures", "Races", shipsetPath, pathtype + "_" + s)); + paths.Add(Path.Combine("Pictures", "Races", shipsetPath, shipsetPath + "_" + pathtype + "_" + s)); // for SE4 shipset compatibility + } + return paths; + } + + IDesign IDesign.Upgrade() + => Upgrade(); + } +} diff --git a/FrEee/Game/Objects/Vehicles/Drone.cs b/FrEee/Objects/Vehicles/Drone.cs similarity index 75% rename from FrEee/Game/Objects/Vehicles/Drone.cs rename to FrEee/Objects/Vehicles/Drone.cs index e33b19c81..fa7437441 100644 --- a/FrEee/Game/Objects/Vehicles/Drone.cs +++ b/FrEee/Objects/Vehicles/Drone.cs @@ -1,63 +1,63 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Objects.Vehicles -{ - [Serializable] - public class Drone : SpaceVehicle, IUnit - { - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.Drone; } - } - - public override bool CanWarp - { - get { return !Owner?.IsMinorEmpire ?? true; } - } - - ICargoContainer IContainable.Container - { - get { return Utility.Extensions.CommonExtensions.FindContainer(this); } - } - - public override bool ParticipatesInGroundCombat - { - get { return false; } - } - - public override IMobileSpaceObject RecycleContainer - { - get { return (this as IUnit).Container as IMobileSpaceObject; } - } - - public override bool RequiresSpaceYardQueue - { - get { return false; } - } - - public override Enumerations.WeaponTargets WeaponTargetType - { - get { return Enumerations.WeaponTargets.Drone; } - } - - public override Visibility CheckVisibility(Empire emp) - { - var vis = base.CheckVisibility(emp); - var sobj = Container as ISpaceObject; - if (sobj != null && sobj.HasVisibility(emp, Visibility.Scanned)) - vis = Visibility.Scanned; - return vis; - } - - public override void Place(ISpaceObject target) - { - Utility.Extensions.CommonExtensions.Place(this, target); - } - - public override bool FillsCombatTile => false; - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Extensions; +using System; + +namespace FrEee.Objects.Vehicles +{ + [Serializable] + public class Drone : SpaceVehicle, IUnit + { + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.Drone; } + } + + public override bool CanWarp + { + get { return !Owner?.IsMinorEmpire ?? true; } + } + + ICargoContainer IContainable.Container + { + get { return CommonExtensions.FindContainer(this); } + } + + public override bool ParticipatesInGroundCombat + { + get { return false; } + } + + public override IMobileSpaceObject RecycleContainer + { + get { return (this as IUnit).Container as IMobileSpaceObject; } + } + + public override bool RequiresSpaceYardQueue + { + get { return false; } + } + + public override Enumerations.WeaponTargets WeaponTargetType + { + get { return Enumerations.WeaponTargets.Drone; } + } + + public override Visibility CheckVisibility(Empire emp) + { + var vis = base.CheckVisibility(emp); + var sobj = Container as ISpaceObject; + if (sobj != null && sobj.HasVisibility(emp, Visibility.Scanned)) + vis = Visibility.Scanned; + return vis; + } + + public override void Place(ISpaceObject target) + { + CommonExtensions.Place(this, target); + } + + public override bool FillsCombatTile => false; + } +} diff --git a/FrEee/Game/Objects/Vehicles/Fighter.cs b/FrEee/Objects/Vehicles/Fighter.cs similarity index 75% rename from FrEee/Game/Objects/Vehicles/Fighter.cs rename to FrEee/Objects/Vehicles/Fighter.cs index ac012b7b2..cf99780f4 100644 --- a/FrEee/Game/Objects/Vehicles/Fighter.cs +++ b/FrEee/Objects/Vehicles/Fighter.cs @@ -1,68 +1,69 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Objects.Vehicles -{ - [Serializable] - public class Fighter : SpaceVehicle, IUnit - { - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.Fighter; } - } - - public override bool CanWarp - { - get { return false; } - } - - ICargoContainer IContainable.Container - { - get { return Utility.Extensions.CommonExtensions.FindContainer(this); } - } - - public override bool ParticipatesInGroundCombat - { - get { return false; } - } - - public override IMobileSpaceObject RecycleContainer - { - get { return (this as IUnit).Container as IMobileSpaceObject; } - } - - public override bool RequiresSpaceYardQueue - { - get { return false; } - } - - public override Enumerations.WeaponTargets WeaponTargetType - { - get { return Enumerations.WeaponTargets.Fighter; } - } - - public override Visibility CheckVisibility(Empire emp) - { - var vis = base.CheckVisibility(emp); - var sobj = Container as ISpaceObject; - if (sobj != null && sobj.HasVisibility(emp, Visibility.Scanned)) - vis = Visibility.Scanned; - return vis; - } - - public override void Place(ISpaceObject target) - { - Utility.Extensions.CommonExtensions.Place(this, target); - } - - // HACK - until we end our game and this can be purged - [DoNotSerialize] - private Cargo Cargo { get; set;} - - public override bool FillsCombatTile => false; - } -} \ No newline at end of file +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using FrEee.Serialization; + +namespace FrEee.Objects.Vehicles +{ + [Serializable] + public class Fighter : SpaceVehicle, IUnit + { + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.Fighter; } + } + + public override bool CanWarp + { + get { return false; } + } + + ICargoContainer IContainable.Container + { + get { return CommonExtensions.FindContainer(this); } + } + + public override bool ParticipatesInGroundCombat + { + get { return false; } + } + + public override IMobileSpaceObject RecycleContainer + { + get { return (this as IUnit).Container as IMobileSpaceObject; } + } + + public override bool RequiresSpaceYardQueue + { + get { return false; } + } + + public override Enumerations.WeaponTargets WeaponTargetType + { + get { return Enumerations.WeaponTargets.Fighter; } + } + + public override Visibility CheckVisibility(Empire emp) + { + var vis = base.CheckVisibility(emp); + var sobj = Container as ISpaceObject; + if (sobj != null && sobj.HasVisibility(emp, Visibility.Scanned)) + vis = Visibility.Scanned; + return vis; + } + + public override void Place(ISpaceObject target) + { + CommonExtensions.Place(this, target); + } + + // HACK - until we end our game and this can be purged + [DoNotSerialize] + private Cargo Cargo { get; set;} + + public override bool FillsCombatTile => false; + } +} diff --git a/FrEee/Game/Objects/Vehicles/MajorSpaceVehicle.cs b/FrEee/Objects/Vehicles/MajorSpaceVehicle.cs similarity index 90% rename from FrEee/Game/Objects/Vehicles/MajorSpaceVehicle.cs rename to FrEee/Objects/Vehicles/MajorSpaceVehicle.cs index 6362f5239..ce5095ed8 100644 --- a/FrEee/Game/Objects/Vehicles/MajorSpaceVehicle.cs +++ b/FrEee/Objects/Vehicles/MajorSpaceVehicle.cs @@ -1,159 +1,159 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Game.Objects.Vehicles -{ - /// - /// A space vehicle which can contain cargo and is not a unit. - /// - public abstract class MajorSpaceVehicle : SpaceVehicle, ICargoTransferrer, IConstructor - { - - protected MajorSpaceVehicle() : base() - { - Cargo = new Cargo(); - constructionQueue = new ConstructionQueue(this); - } - - public override void Place(ISpaceObject target) - { - var search = Galaxy.Current.FindSpaceObjects(sobj => sobj == target); - if (!search.Any()) - throw new Exception("Can't place newly constructed vehicle near " + target + " because the target is not in any known sector."); - var sys = search.First().StarSystem; - var coords = search.First().Sector.Coordinates; - sys.SpaceObjectLocations.Add(new ObjectLocation(this, coords)); - } - - public long AddPopulation(Race race, long amount) - { - var canCargo = Math.Min(amount, (long)(this.CargoStorageFree() / Mod.Current.Settings.PopulationSize)); - amount -= canCargo; - Cargo.Population[race] += canCargo; - return amount; - } - - public bool AddUnit(IUnit unit) - { - if (this.CargoStorageFree() >= unit.Design.Hull.Size) - { - Cargo.Units.Add(unit); - return true; - } - return false; - } - - public override IMobileSpaceObject RecycleContainer - { - get { return this; } - } - - public override WeaponTargets WeaponTargetType - { - // NOTE - SE4 made ships and bases use both the ship target type; maybe we should add an override field in settings.txt to change that optionally? - get { return WeaponTargets.Ship; } - } - - public Cargo Cargo { get; set; } - - public IDictionary AllPopulation - { - get { return Cargo.Population; } - } - - public IEnumerable AllUnits - { - get - { - if (this is IUnit) - yield return (IUnit)this; - if (Cargo != null) - { - foreach (var u in Cargo.Units) - yield return u; - } - } - } - public override void Dispose() - { - base.Dispose(); - if (Cargo != null) - { - foreach (var u in Cargo.Units) - u.Dispose(); - } - constructionQueue.SafeDispose(); - } - - public override void Redact(Empire emp) - { - base.Redact(emp); - - var vis = CheckVisibility(emp); - - if (vis < Visibility.Scanned) - { - // can't see cargo at all - Cargo.SetFakeSize(false); - } - else if (vis < Visibility.Owned) - { - // can only see cargo size if scanned but unowed - Cargo.SetFakeSize(true); - } - } - - public long RemovePopulation(Race race, long amount) - { - var canCargo = Math.Min(amount, Cargo.Population[race]); - amount -= canCargo; - Cargo.Population[race] -= canCargo; - return amount; - } - - public bool RemoveUnit(IUnit unit) - { - if (Cargo.Units.Contains(unit)) - { - Cargo.Units.Remove(unit); - return true; - } - return false; - } - - public override void SpendTime(double timeElapsed) - { - base.SpendTime(timeElapsed); - - foreach (var u in Cargo.Units.OfType()) - u.SpendTime(timeElapsed); - } - - private ConstructionQueue constructionQueue { get; set; } - public ConstructionQueue ConstructionQueue - { - get - { - // only vehicles with a space yard that are not under construction have a construction queue - if (this.HasAbility("Space Yard") && Sector != null) - return constructionQueue; - else - return null; - } - } - - public override bool IsIdle => base.IsIdle || (ConstructionQueue != null && ConstructionQueue.IsIdle); - - public override bool FillsCombatTile => true; - } -} - +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Objects.Vehicles +{ + /// + /// A space vehicle which can contain cargo and is not a unit. + /// + public abstract class MajorSpaceVehicle : SpaceVehicle, ICargoTransferrer, IConstructor + { + + protected MajorSpaceVehicle() : base() + { + Cargo = new Cargo(); + constructionQueue = new ConstructionQueue(this); + } + + public override void Place(ISpaceObject target) + { + var search = Galaxy.Current.FindSpaceObjects(sobj => sobj == target); + if (!search.Any()) + throw new Exception("Can't place newly constructed vehicle near " + target + " because the target is not in any known sector."); + var sys = search.First().StarSystem; + var coords = search.First().Sector.Coordinates; + sys.SpaceObjectLocations.Add(new ObjectLocation(this, coords)); + } + + public long AddPopulation(Race race, long amount) + { + var canCargo = Math.Min(amount, (long)(this.CargoStorageFree() / Mod.Current.Settings.PopulationSize)); + amount -= canCargo; + Cargo.Population[race] += canCargo; + return amount; + } + + public bool AddUnit(IUnit unit) + { + if (this.CargoStorageFree() >= unit.Design.Hull.Size) + { + Cargo.Units.Add(unit); + return true; + } + return false; + } + + public override IMobileSpaceObject RecycleContainer + { + get { return this; } + } + + public override WeaponTargets WeaponTargetType + { + // NOTE - SE4 made ships and bases use both the ship target type; maybe we should add an override field in settings.txt to change that optionally? + get { return WeaponTargets.Ship; } + } + + public Cargo Cargo { get; set; } + + public IDictionary AllPopulation + { + get { return Cargo.Population; } + } + + public IEnumerable AllUnits + { + get + { + if (this is IUnit) + yield return (IUnit)this; + if (Cargo != null) + { + foreach (var u in Cargo.Units) + yield return u; + } + } + } + public override void Dispose() + { + base.Dispose(); + if (Cargo != null) + { + foreach (var u in Cargo.Units) + u.Dispose(); + } + constructionQueue.SafeDispose(); + } + + public override void Redact(Empire emp) + { + base.Redact(emp); + + var vis = CheckVisibility(emp); + + if (vis < Visibility.Scanned) + { + // can't see cargo at all + Cargo.SetFakeSize(false); + } + else if (vis < Visibility.Owned) + { + // can only see cargo size if scanned but unowed + Cargo.SetFakeSize(true); + } + } + + public long RemovePopulation(Race race, long amount) + { + var canCargo = Math.Min(amount, Cargo.Population[race]); + amount -= canCargo; + Cargo.Population[race] -= canCargo; + return amount; + } + + public bool RemoveUnit(IUnit unit) + { + if (Cargo.Units.Contains(unit)) + { + Cargo.Units.Remove(unit); + return true; + } + return false; + } + + public override void SpendTime(double timeElapsed) + { + base.SpendTime(timeElapsed); + + foreach (var u in Cargo.Units.OfType()) + u.SpendTime(timeElapsed); + } + + private ConstructionQueue constructionQueue { get; set; } + public ConstructionQueue ConstructionQueue + { + get + { + // only vehicles with a space yard that are not under construction have a construction queue + if (this.HasAbility("Space Yard") && Sector != null) + return constructionQueue; + else + return null; + } + } + + public override bool IsIdle => base.IsIdle || (ConstructionQueue != null && ConstructionQueue.IsIdle); + + public override bool FillsCombatTile => true; + } +} + diff --git a/FrEee/Game/Objects/Vehicles/Mine.cs b/FrEee/Objects/Vehicles/Mine.cs similarity index 77% rename from FrEee/Game/Objects/Vehicles/Mine.cs rename to FrEee/Objects/Vehicles/Mine.cs index 944621ba9..8a35741d0 100644 --- a/FrEee/Game/Objects/Vehicles/Mine.cs +++ b/FrEee/Objects/Vehicles/Mine.cs @@ -1,66 +1,67 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using System; - -namespace FrEee.Game.Objects.Vehicles -{ - [Serializable] - public class Mine : SpaceVehicle, IUnit - { - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.Mine; } - } - - public override bool CanWarp - { - get { return false; } - } - - ICargoContainer IContainable.Container - { - get { return Utility.Extensions.CommonExtensions.FindContainer(this); } - } - - public override bool ParticipatesInGroundCombat - { - get { return false; } - } - - public override IMobileSpaceObject RecycleContainer - { - get { return (this as IUnit).Container as IMobileSpaceObject; } - } - - public override bool RequiresSpaceYardQueue - { - get { return false; } - } - - public override Enumerations.WeaponTargets WeaponTargetType - { - // mines cannot be targeted in space combat - get { return Enumerations.WeaponTargets.Invalid; } - } - - /// - /// Mines are invisible to everyone except their owner. - /// - /// - /// - public override Visibility CheckVisibility(Empire emp) - { - if (emp == Owner) - return Visibility.Owned; - return Visibility.Unknown; - } - - public override void Place(ISpaceObject target) - { - Utility.Extensions.CommonExtensions.Place(this, target); - } - - public override bool FillsCombatTile => false; - } -} \ No newline at end of file +using FrEee.Enumerations; +using FrEee.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using System; + +namespace FrEee.Objects.Vehicles +{ + [Serializable] + public class Mine : SpaceVehicle, IUnit + { + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.Mine; } + } + + public override bool CanWarp + { + get { return false; } + } + + ICargoContainer IContainable.Container + { + get { return CommonExtensions.FindContainer(this); } + } + + public override bool ParticipatesInGroundCombat + { + get { return false; } + } + + public override IMobileSpaceObject RecycleContainer + { + get { return (this as IUnit).Container as IMobileSpaceObject; } + } + + public override bool RequiresSpaceYardQueue + { + get { return false; } + } + + public override Enumerations.WeaponTargets WeaponTargetType + { + // mines cannot be targeted in space combat + get { return Enumerations.WeaponTargets.Invalid; } + } + + /// + /// Mines are invisible to everyone except their owner. + /// + /// + /// + public override Visibility CheckVisibility(Empire emp) + { + if (emp == Owner) + return Visibility.Owned; + return Visibility.Unknown; + } + + public override void Place(ISpaceObject target) + { + CommonExtensions.Place(this, target); + } + + public override bool FillsCombatTile => false; + } +} diff --git a/FrEee/Game/Objects/Vehicles/Satellite.cs b/FrEee/Objects/Vehicles/Satellite.cs similarity index 75% rename from FrEee/Game/Objects/Vehicles/Satellite.cs rename to FrEee/Objects/Vehicles/Satellite.cs index 2404fe6b6..35b7963f6 100644 --- a/FrEee/Game/Objects/Vehicles/Satellite.cs +++ b/FrEee/Objects/Vehicles/Satellite.cs @@ -1,63 +1,63 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Objects.Vehicles -{ - [Serializable] - public class Satellite : SpaceVehicle, IUnit - { - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.Satellite; } - } - - public override bool CanWarp - { - get { return false; } - } - - ICargoContainer IContainable.Container - { - get { return Utility.Extensions.CommonExtensions.FindContainer(this); } - } - - public override bool ParticipatesInGroundCombat - { - get { return false; } - } - - public override IMobileSpaceObject RecycleContainer - { - get { return (this as IUnit).Container as IMobileSpaceObject; } - } - - public override bool RequiresSpaceYardQueue - { - get { return false; } - } - - public override Enumerations.WeaponTargets WeaponTargetType - { - get { return Enumerations.WeaponTargets.Satellite; } - } - - public override Visibility CheckVisibility(Empire emp) - { - var vis = base.CheckVisibility(emp); - var sobj = Container as ISpaceObject; - if (vis < Visibility.Scanned && sobj != null && sobj.HasVisibility(emp, Visibility.Scanned)) - vis = Visibility.Scanned; - return vis; - } - - public override void Place(ISpaceObject target) - { - Utility.Extensions.CommonExtensions.Place(this, target); - } - - public override bool FillsCombatTile => false; - } -} \ No newline at end of file +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Extensions; +using System; + +namespace FrEee.Objects.Vehicles +{ + [Serializable] + public class Satellite : SpaceVehicle, IUnit + { + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.Satellite; } + } + + public override bool CanWarp + { + get { return false; } + } + + ICargoContainer IContainable.Container + { + get { return CommonExtensions.FindContainer(this); } + } + + public override bool ParticipatesInGroundCombat + { + get { return false; } + } + + public override IMobileSpaceObject RecycleContainer + { + get { return (this as IUnit).Container as IMobileSpaceObject; } + } + + public override bool RequiresSpaceYardQueue + { + get { return false; } + } + + public override Enumerations.WeaponTargets WeaponTargetType + { + get { return Enumerations.WeaponTargets.Satellite; } + } + + public override Visibility CheckVisibility(Empire emp) + { + var vis = base.CheckVisibility(emp); + var sobj = Container as ISpaceObject; + if (vis < Visibility.Scanned && sobj != null && sobj.HasVisibility(emp, Visibility.Scanned)) + vis = Visibility.Scanned; + return vis; + } + + public override void Place(ISpaceObject target) + { + CommonExtensions.Place(this, target); + } + + public override bool FillsCombatTile => false; + } +} diff --git a/FrEee/Game/Objects/Vehicles/Ship.cs b/FrEee/Objects/Vehicles/Ship.cs similarity index 76% rename from FrEee/Game/Objects/Vehicles/Ship.cs rename to FrEee/Objects/Vehicles/Ship.cs index 24f238794..b42cd8ad0 100644 --- a/FrEee/Game/Objects/Vehicles/Ship.cs +++ b/FrEee/Objects/Vehicles/Ship.cs @@ -1,37 +1,37 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using System; -using System.Linq; - -namespace FrEee.Game.Objects.Vehicles -{ - [Serializable] - public class Ship : MajorSpaceVehicle - { - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.Ship; } - } - - public override bool CanWarp - { - get { return !Owner?.IsMinorEmpire ?? true; } - } - - public override bool ParticipatesInGroundCombat - { - get { return false; } - } - - public override bool RequiresSpaceYardQueue - { - get { return true; } - } - - public override WeaponTargets WeaponTargetType - { - get { return WeaponTargets.Ship; } - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Space; +using System; +using System.Linq; + +namespace FrEee.Objects.Vehicles +{ + [Serializable] + public class Ship : MajorSpaceVehicle + { + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.Ship; } + } + + public override bool CanWarp + { + get { return !Owner?.IsMinorEmpire ?? true; } + } + + public override bool ParticipatesInGroundCombat + { + get { return false; } + } + + public override bool RequiresSpaceYardQueue + { + get { return true; } + } + + public override WeaponTargets WeaponTargetType + { + get { return WeaponTargets.Ship; } + } + } +} diff --git a/FrEee/Game/Objects/Vehicles/SpaceVehicle.cs b/FrEee/Objects/Vehicles/SpaceVehicle.cs similarity index 93% rename from FrEee/Game/Objects/Vehicles/SpaceVehicle.cs rename to FrEee/Objects/Vehicles/SpaceVehicle.cs index f3fb5b72f..f89f036a6 100644 --- a/FrEee/Game/Objects/Vehicles/SpaceVehicle.cs +++ b/FrEee/Objects/Vehicles/SpaceVehicle.cs @@ -1,386 +1,386 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Vehicles -{ - /// - /// A vehicle which operates in space. - /// - /// - [Serializable] - public abstract class SpaceVehicle : Vehicle, IMobileSpaceObject - { - public SpaceVehicle() - { - Orders = new List(); - StoredResources = new ResourceQuantity(); - } - - /// - /// Are this object's orders on hold? - /// - public bool AreOrdersOnHold { get; set; } - - /// - /// Should this object's orders repeat once they are completed? - /// - public bool AreRepeatOrdersEnabled { get; set; } - - /// - /// Space vehicles can be placed in fleets. - /// - public bool CanBeInFleet - { - get { return true; } - } - - public bool CanBeObscured => true; - - /// - /// Can this space vehicle warp? - /// - public abstract bool CanWarp { get; } - - /// - /// Space vehicles' cargo storage depends on their abilities. - /// - public int CargoStorage - { - get { return this.GetAbilityValue("Cargo Storage").ToInt(); } - } - - public override double CombatSpeed => Mod.Current.Settings.CombatSpeedPercentPerStrategicSpeed.PercentOf(StrategicSpeed) + this.GetAbilityValue("Combat Movement").ToInt(); - - public Fleet Container - { - get; set; - } - - [DoNotSerialize] - public IDictionary, ISet>> DijkstraMap - { - get; - set; - } - - /// - /// Supply usage per sector to move. - /// Sum of all thrust-generating components' Supply Usage values. - /// This means that ships with more engines burn more supplies per sector! - /// - public int EngineSupplyBurnRate - { - get - { - return Components.Where(c => - !c.IsDestroyed && - ( - c.HasAbility("Standard Ship Movement") || - c.HasAbility("Movement Bonus") || - c.HasAbility("Extra Movement Generation") || - c.HasAbility("Vehicle Speed") - )).Sum(c => c.Template.SupplyUsage); - } - } - - public ResourceQuantity GrossIncome - { - get - { - return Owner.RemoteMiners.Where(m => m.Key.Item1 == this).Sum(m => m.Value) + this.RawResourceIncome(); - } - } - - /// - /// Space vehicles do not have infinite supplies unless they have a quantum reactor or they are bases. - /// - public virtual bool HasInfiniteSupplies - { - // TODO - what about Supply Generation (resupply depot) ability? or is it alias for QR ability? - get { return this.HasAbility("Quantum Reactor"); } - } - - public virtual bool IsIdle - { - get - { - return StrategicSpeed > 0 && !Orders.Any() && Container == null; - } - } - - public override int MaxTargets => Math.Max(1, this.GetAbilityValue("Multiplex Tracking").ToInt()); - - /// - /// Amount of movement remaining for this turn. - /// - [DoNotSerialize] - public int MovementRemaining { get; set; } - - public IList Orders - { - get; - private set; - } - - IEnumerable IOrderable.Orders - => Orders; - - public override IEnumerable Parents - { - get - { - if (Container != null) - yield return Container; - else - { - if (Sector != null) - yield return Sector; - yield return Owner; - } - } - } - - /// - /// Vehicles cannot have population per se. - /// - public long PopulationStorageFree - { - get { return 0; } - } - - [DoNotCopy(false)] - public override Sector Sector - { - get - { - if (Container != null) - return Container.Sector; - if (sector == null) - sector = this.FindSector(); - return sector; - } - set - { - var oldsector = Sector; - sector = value; - if (value == null) - { - if (oldsector != null) - { - oldsector.Remove(this); - } - } - else - { - if (oldsector != value) - value.Place(this); - } - } - } - - public override StarSystem StarSystem - { - get { return Sector == null ? null : Sector.StarSystem; } - } - - /// - /// Resources stored on this space vehicle. - /// - public ResourceQuantity StoredResources { get; private set; } - - /// - /// The speed of the vehicle, taking into account hull mass, thrust, speed bonuses, and supply. - /// - public override int StrategicSpeed - { - get - { - // no Engines Per Move rating? then no movement - if (Design.Hull.ThrustPerMove == 0) - return 0; - - // can't go anywhere without thrust! - var thrust = this.GetAbilityValue("Standard Ship Movement").ToInt(); - if (thrust < Design.Hull.ThrustPerMove) - return 0; - - // take into account base speed plus all bonuses - var spd = - thrust / Design.Hull.ThrustPerMove - + this.GetAbilityValue("Movement Bonus").ToInt() - + this.GetAbilityValue("Extra Movement Generation").ToInt() - + this.GetAbilityValue("Vehicle Speed").ToInt() - + EmergencySpeed; - - // gotta go slow if you don't have supplies to move! - if (spd > 1 && !HasInfiniteSupplies && SupplyRemaining < EngineSupplyBurnRate) - return 1; - - return spd; - } - } - - public Progress SupplyFill { get { return new Progress(SupplyRemaining, SupplyStorage); } } - - /// - /// The amount of supply present on this vehicle. - /// - [DoNotSerialize] - public int SupplyRemaining - { - get { return StoredResources[Resource.Supply]; } - set { StoredResources[Resource.Supply] = value; } - } - - /// - /// Space vehicles' supply storage depends on their abilities. - /// - public int SupplyStorage - { - get { return this.GetAbilityValue("Supply Storage").ToInt(); } - } - - /// - /// The fraction of a turn that moving one sector takes. - /// - public double TimePerMove - { - get { return 1.0 / (double)StrategicSpeed; } - } - - /// - /// Fractional turns until the vehicle has saved up another move point. - /// - [DoNotSerialize] - public double TimeToNextMove - { - get; - set; - } - - private Sector sector; - - public void AddOrder(IOrder order) - { - if (!(order is IOrder)) - throw new Exception("Can't add a " + order.GetType() + " to a space vehicle's orders."); - Orders.Add((IOrder)order); - } - - /// - /// Burns supplies required to move one sector. - /// If this would put the vehicle below zero supplies, - /// the move is still successful, but the vehicle's supplies are set to zero. - /// - public void BurnMovementSupplies() - { - SupplyRemaining -= EngineSupplyBurnRate; - this.NormalizeSupplies(); - } - - public override Visibility CheckVisibility(Empire emp) - { - return this.CheckSpaceObjectVisibility(emp); - } - - public override void Dispose() - { - if (IsDisposed) - return; - var sys = this.FindStarSystem(); - if (sys != null) - sys.Remove(this); - base.Dispose(); - if (!IsMemory) - this.UpdateEmpireMemories(); - } - - public bool ExecuteOrders() - { - return this.ExecuteMobileSpaceObjectOrders(); - } - - public override bool IsObsoleteMemory(Empire emp) - { - if (StarSystem == null) - return Timestamp < Galaxy.Current.Timestamp - 1; - return StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; - } - - public void RearrangeOrder(IOrder order, int delta) - { - if (order != null && !(order is IOrder)) - throw new Exception("Can't rearrange a " + order.GetType() + " in a space vehicle's orders."); - var o = (IOrder)order; - var newpos = Orders.IndexOf(o) + delta; - Orders.Remove(o); - if (newpos < 0) - newpos = 0; - if (newpos >= Orders.Count) - Orders.Add(o); - else - Orders.Insert(newpos, o); - } - - public override void Redact(Empire emp) - { - base.Redact(emp); - - var vis = CheckVisibility(emp); - - if (vis < Visibility.Owned) - { - // can't see orders unless it's your vehicle - Orders.Clear(); - AreOrdersOnHold = false; - AreRepeatOrdersEnabled = false; - } - - if (vis < Visibility.Scanned) - { - // hide amount of supplies remaining - SupplyRemaining = 0; - } - } - - public void RemoveOrder(IOrder order) - { - if (order != null && !(order is IOrder)) - return; // order can't exist here anyway - Orders.Remove((IOrder)order); - } - - /// - /// Replenishes shields normally, unless there are no supplies, in which case the shields are taken away. - /// - /// - public override void ReplenishShields(int? amount = null) - { - if (HasInfiniteSupplies || SupplyRemaining > 0) - base.ReplenishShields(amount); - else - { - NormalShields = 0; - PhasedShields = 0; - } - } - - /// - /// When a space vehicle spends time, all of its units in cargo that can fly in space should spend time too. - /// TODO - It should also perform construction here... - /// - /// - public virtual void SpendTime(double timeElapsed) - { - TimeToNextMove += timeElapsed; - } - } -} +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Vehicles +{ + /// + /// A vehicle which operates in space. + /// + /// + [Serializable] + public abstract class SpaceVehicle : Vehicle, IMobileSpaceObject + { + public SpaceVehicle() + { + Orders = new List(); + StoredResources = new ResourceQuantity(); + } + + /// + /// Are this object's orders on hold? + /// + public bool AreOrdersOnHold { get; set; } + + /// + /// Should this object's orders repeat once they are completed? + /// + public bool AreRepeatOrdersEnabled { get; set; } + + /// + /// Space vehicles can be placed in fleets. + /// + public bool CanBeInFleet + { + get { return true; } + } + + public bool CanBeObscured => true; + + /// + /// Can this space vehicle warp? + /// + public abstract bool CanWarp { get; } + + /// + /// Space vehicles' cargo storage depends on their abilities. + /// + public int CargoStorage + { + get { return this.GetAbilityValue("Cargo Storage").ToInt(); } + } + + public override double CombatSpeed => Mod.Current.Settings.CombatSpeedPercentPerStrategicSpeed.PercentOf(StrategicSpeed) + this.GetAbilityValue("Combat Movement").ToInt(); + + public Fleet Container + { + get; set; + } + + [DoNotSerialize] + public IDictionary, ISet>> DijkstraMap + { + get; + set; + } + + /// + /// Supply usage per sector to move. + /// Sum of all thrust-generating components' Supply Usage values. + /// This means that ships with more engines burn more supplies per sector! + /// + public int EngineSupplyBurnRate + { + get + { + return Components.Where(c => + !c.IsDestroyed && + ( + c.HasAbility("Standard Ship Movement") || + c.HasAbility("Movement Bonus") || + c.HasAbility("Extra Movement Generation") || + c.HasAbility("Vehicle Speed") + )).Sum(c => c.Template.SupplyUsage); + } + } + + public ResourceQuantity GrossIncome + { + get + { + return Owner.RemoteMiners.Where(m => m.Key.Item1 == this).Sum(m => m.Value) + this.RawResourceIncome(); + } + } + + /// + /// Space vehicles do not have infinite supplies unless they have a quantum reactor or they are bases. + /// + public virtual bool HasInfiniteSupplies + { + // TODO - what about Supply Generation (resupply depot) ability? or is it alias for QR ability? + get { return this.HasAbility("Quantum Reactor"); } + } + + public virtual bool IsIdle + { + get + { + return StrategicSpeed > 0 && !Orders.Any() && Container == null; + } + } + + public override int MaxTargets => Math.Max(1, this.GetAbilityValue("Multiplex Tracking").ToInt()); + + /// + /// Amount of movement remaining for this turn. + /// + [DoNotSerialize] + public int MovementRemaining { get; set; } + + public IList Orders + { + get; + private set; + } + + IEnumerable IOrderable.Orders + => Orders; + + public override IEnumerable Parents + { + get + { + if (Container != null) + yield return Container; + else + { + if (Sector != null) + yield return Sector; + yield return Owner; + } + } + } + + /// + /// Vehicles cannot have population per se. + /// + public long PopulationStorageFree + { + get { return 0; } + } + + [DoNotCopy(false)] + public override Sector Sector + { + get + { + if (Container != null) + return Container.Sector; + if (sector == null) + sector = this.FindSector(); + return sector; + } + set + { + var oldsector = Sector; + sector = value; + if (value == null) + { + if (oldsector != null) + { + oldsector.Remove(this); + } + } + else + { + if (oldsector != value) + value.Place(this); + } + } + } + + public override StarSystem StarSystem + { + get { return Sector == null ? null : Sector.StarSystem; } + } + + /// + /// Resources stored on this space vehicle. + /// + public ResourceQuantity StoredResources { get; private set; } + + /// + /// The speed of the vehicle, taking into account hull mass, thrust, speed bonuses, and supply. + /// + public override int StrategicSpeed + { + get + { + // no Engines Per Move rating? then no movement + if (Design.Hull.ThrustPerMove == 0) + return 0; + + // can't go anywhere without thrust! + var thrust = this.GetAbilityValue("Standard Ship Movement").ToInt(); + if (thrust < Design.Hull.ThrustPerMove) + return 0; + + // take into account base speed plus all bonuses + var spd = + thrust / Design.Hull.ThrustPerMove + + this.GetAbilityValue("Movement Bonus").ToInt() + + this.GetAbilityValue("Extra Movement Generation").ToInt() + + this.GetAbilityValue("Vehicle Speed").ToInt() + + EmergencySpeed; + + // gotta go slow if you don't have supplies to move! + if (spd > 1 && !HasInfiniteSupplies && SupplyRemaining < EngineSupplyBurnRate) + return 1; + + return spd; + } + } + + public Progress SupplyFill { get { return new Progress(SupplyRemaining, SupplyStorage); } } + + /// + /// The amount of supply present on this vehicle. + /// + [DoNotSerialize] + public int SupplyRemaining + { + get { return StoredResources[Resource.Supply]; } + set { StoredResources[Resource.Supply] = value; } + } + + /// + /// Space vehicles' supply storage depends on their abilities. + /// + public int SupplyStorage + { + get { return this.GetAbilityValue("Supply Storage").ToInt(); } + } + + /// + /// The fraction of a turn that moving one sector takes. + /// + public double TimePerMove + { + get { return 1.0 / (double)StrategicSpeed; } + } + + /// + /// Fractional turns until the vehicle has saved up another move point. + /// + [DoNotSerialize] + public double TimeToNextMove + { + get; + set; + } + + private Sector sector; + + public void AddOrder(IOrder order) + { + if (!(order is IOrder)) + throw new Exception("Can't add a " + order.GetType() + " to a space vehicle's orders."); + Orders.Add((IOrder)order); + } + + /// + /// Burns supplies required to move one sector. + /// If this would put the vehicle below zero supplies, + /// the move is still successful, but the vehicle's supplies are set to zero. + /// + public void BurnMovementSupplies() + { + SupplyRemaining -= EngineSupplyBurnRate; + this.NormalizeSupplies(); + } + + public override Visibility CheckVisibility(Empire emp) + { + return this.CheckSpaceObjectVisibility(emp); + } + + public override void Dispose() + { + if (IsDisposed) + return; + var sys = this.FindStarSystem(); + if (sys != null) + sys.Remove(this); + base.Dispose(); + if (!IsMemory) + this.UpdateEmpireMemories(); + } + + public bool ExecuteOrders() + { + return this.ExecuteMobileSpaceObjectOrders(); + } + + public override bool IsObsoleteMemory(Empire emp) + { + if (StarSystem == null) + return Timestamp < Galaxy.Current.Timestamp - 1; + return StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; + } + + public void RearrangeOrder(IOrder order, int delta) + { + if (order != null && !(order is IOrder)) + throw new Exception("Can't rearrange a " + order.GetType() + " in a space vehicle's orders."); + var o = (IOrder)order; + var newpos = Orders.IndexOf(o) + delta; + Orders.Remove(o); + if (newpos < 0) + newpos = 0; + if (newpos >= Orders.Count) + Orders.Add(o); + else + Orders.Insert(newpos, o); + } + + public override void Redact(Empire emp) + { + base.Redact(emp); + + var vis = CheckVisibility(emp); + + if (vis < Visibility.Owned) + { + // can't see orders unless it's your vehicle + Orders.Clear(); + AreOrdersOnHold = false; + AreRepeatOrdersEnabled = false; + } + + if (vis < Visibility.Scanned) + { + // hide amount of supplies remaining + SupplyRemaining = 0; + } + } + + public void RemoveOrder(IOrder order) + { + if (order != null && !(order is IOrder)) + return; // order can't exist here anyway + Orders.Remove((IOrder)order); + } + + /// + /// Replenishes shields normally, unless there are no supplies, in which case the shields are taken away. + /// + /// + public override void ReplenishShields(int? amount = null) + { + if (HasInfiniteSupplies || SupplyRemaining > 0) + base.ReplenishShields(amount); + else + { + NormalShields = 0; + PhasedShields = 0; + } + } + + /// + /// When a space vehicle spends time, all of its units in cargo that can fly in space should spend time too. + /// TODO - It should also perform construction here... + /// + /// + public virtual void SpendTime(double timeElapsed) + { + TimeToNextMove += timeElapsed; + } + } +} diff --git a/FrEee/Game/Objects/Vehicles/Troop.cs b/FrEee/Objects/Vehicles/Troop.cs similarity index 88% rename from FrEee/Game/Objects/Vehicles/Troop.cs rename to FrEee/Objects/Vehicles/Troop.cs index 353d3f532..ef20ef5b5 100644 --- a/FrEee/Game/Objects/Vehicles/Troop.cs +++ b/FrEee/Objects/Vehicles/Troop.cs @@ -1,117 +1,117 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.Vehicles -{ - [Serializable] - public class Troop : Vehicle, IUnit - { - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.Troop; } - } - - public override double CombatSpeed => 0; - - // TODO - make me an actual property, not searching the galaxy (check other unit types too) - public ICargoContainer Container - { - get - { - return CommonExtensions.FindContainer(this); - } - } - - public override int MaxTargets => int.MaxValue; - - public override IEnumerable Parents - { - get - { - if (Owner != null) - yield return Owner; - if (Container != null && Container is IAbilityObject) - yield return (IAbilityObject)Container; - } - } - - /// - /// Troops participate in ground combat. - /// - public override bool ParticipatesInGroundCombat - { - get { return true; } - } - - public override IMobileSpaceObject RecycleContainer - { - get { return (this as IUnit).Container as IMobileSpaceObject; } - } - - public override bool RequiresSpaceYardQueue - { - get { return false; } - } - - [DoNotSerialize] - public override Sector Sector - { - get { return Container == null ? null : Container.Sector; } - set - { - //throw new NotSupportedException("Cannot set the sector of a troop."); - } - } - - public override StarSystem StarSystem - { - get { return Container?.StarSystem; } - } - - public override WeaponTargets WeaponTargetType - { - get { return WeaponTargets.Planet; } - } - - public override Visibility CheckVisibility(Empire emp) - { - if (Owner == emp) - return Visibility.Owned; - var sobj = Container as ISpaceObject; - if (sobj != null && sobj.HasVisibility(emp, Visibility.Scanned)) - return Visibility.Scanned; - return Visibility.Unknown; - } - - public override bool IsObsoleteMemory(Empire emp) - { - return Container.StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; - } - - public override void Place(ISpaceObject target) - { - if (target is ICargoContainer) - { - var cc = (ICargoContainer)target; - if (cc.AddUnit(this)) - return; - } - // cargo was full? then try other space objects - foreach (var cc in target.Sector.SpaceObjects.Where(sobj => sobj.Owner == target.Owner).OfType()) - { - if (cc.AddUnit(this)) - return; - } - target.Owner.Log.Add(this.CreateLogMessage(this + " could not be placed in cargo at " + target + " because there is not enough cargo space available.", LogMessages.LogMessageType.Generic)); - } - - public override bool FillsCombatTile => false; - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.Vehicles +{ + [Serializable] + public class Troop : Vehicle, IUnit + { + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.Troop; } + } + + public override double CombatSpeed => 0; + + // TODO - make me an actual property, not searching the galaxy (check other unit types too) + public ICargoContainer Container + { + get + { + return CommonExtensions.FindContainer(this); + } + } + + public override int MaxTargets => int.MaxValue; + + public override IEnumerable Parents + { + get + { + if (Owner != null) + yield return Owner; + if (Container != null && Container is IAbilityObject) + yield return (IAbilityObject)Container; + } + } + + /// + /// Troops participate in ground combat. + /// + public override bool ParticipatesInGroundCombat + { + get { return true; } + } + + public override IMobileSpaceObject RecycleContainer + { + get { return (this as IUnit).Container as IMobileSpaceObject; } + } + + public override bool RequiresSpaceYardQueue + { + get { return false; } + } + + [DoNotSerialize] + public override Sector Sector + { + get { return Container == null ? null : Container.Sector; } + set + { + //throw new NotSupportedException("Cannot set the sector of a troop."); + } + } + + public override StarSystem StarSystem + { + get { return Container?.StarSystem; } + } + + public override WeaponTargets WeaponTargetType + { + get { return WeaponTargets.Planet; } + } + + public override Visibility CheckVisibility(Empire emp) + { + if (Owner == emp) + return Visibility.Owned; + var sobj = Container as ISpaceObject; + if (sobj != null && sobj.HasVisibility(emp, Visibility.Scanned)) + return Visibility.Scanned; + return Visibility.Unknown; + } + + public override bool IsObsoleteMemory(Empire emp) + { + return Container.StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; + } + + public override void Place(ISpaceObject target) + { + if (target is ICargoContainer) + { + var cc = (ICargoContainer)target; + if (cc.AddUnit(this)) + return; + } + // cargo was full? then try other space objects + foreach (var cc in target.Sector.SpaceObjects.Where(sobj => sobj.Owner == target.Owner).OfType()) + { + if (cc.AddUnit(this)) + return; + } + target.Owner.Log.Add(this.CreateLogMessage(this + " could not be placed in cargo at " + target + " because there is not enough cargo space available.", LogMessages.LogMessageType.Generic)); + } + + public override bool FillsCombatTile => false; + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/Vehicles/Vehicle.cs b/FrEee/Objects/Vehicles/Vehicle.cs similarity index 94% rename from FrEee/Game/Objects/Vehicles/Vehicle.cs rename to FrEee/Objects/Vehicles/Vehicle.cs index 1047f396d..18b50ca7e 100644 --- a/FrEee/Game/Objects/Vehicles/Vehicle.cs +++ b/FrEee/Objects/Vehicles/Vehicle.cs @@ -1,784 +1,784 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Objects.Vehicles -{ - /// - /// A ship, base, or unit. - /// - [Serializable] - public abstract class Vehicle : INamed, IConstructable, IVehicle, ICombatant, IFoggable - { - public Vehicle() - { - Components = new List(); - ConstructionProgress = new ResourceQuantity(); - } - - public abstract AbilityTargets AbilityTarget { get; } - - public int Accuracy - { - get - { - return - this.GetAbilityValue("Combat To Hit Offense Plus").ToInt() - - this.GetAbilityValue("Combat To Hit Offense Minus").ToInt() - + (Owner == null || Owner.Culture == null ? 0 : Owner.Culture.SpaceCombat) - + Sector.GetEmpireAbilityValue(Owner, "Combat Modifier - Sector").ToInt() - + StarSystem.GetEmpireAbilityValue(Owner, "Combat Modifier - System").ToInt() - + Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); - } - } - - /// - /// Current HP of all armor components. - /// - public int ArmorHitpoints - { - get - { - return Components.Sum(c => c.ArmorHitpoints); - } - } - - public Progress ArmorHitpointsFill - { - get { return new Progress(ArmorHitpoints, MaxArmorHitpoints); } - } - - public IEnumerable Children - { - get - { - if (Design == null) - return Components; - return Components.Cast().Append(Design.Hull); - } - } - - public abstract double CombatSpeed { get; } - - /// - /// The components on this vehicle. - /// Needs to be protected, not private, so reflection can find it from a derived class. - /// Can change CommonExtensions.CopyEnumerableProperties to scan base classes, though... - /// - [DoNotSerialize(false)] - public IList Components { get; protected set; } - - public ResourceQuantity ConstructionProgress - { - get; - set; - } - - public ResourceQuantity Cost - { - get - { - if (!Components.Any()) - return new ResourceQuantity(); - return Design.Hull.Cost + Components.Select(c => c.Template.Cost).Aggregate((c1, c2) => c1 + c2); - } - } - - /// - /// Damage that has been applied to this vehicle's components. - /// - public SafeDictionary> Damage - { - get - { - var dict = new SafeDictionary>(); - foreach (var c in Components) - { - if (c.Hitpoints != c.MaxHitpoints) - { - if (!dict.ContainsKey(c.Template)) - dict.Add(c.Template, new List()); - dict[c.Template].Add(c.MaxHitpoints - c.Hitpoints); - } - } - return dict; - } - set - { - Components = new List(); - foreach (var template in Design.Components) - { - var component = template.Instantiate(); - Components.Add(component); - } - foreach (var kvp in value) - { - var template = kvp.Key; - var damages = kvp.Value; - for (var i = 0; i < damages.Count; i++) - { - var component = Components.Where(c => c.Template == template).ElementAt(i); - component.Hitpoints = component.MaxHitpoints - damages[i]; - } - } - } - } - - /// - /// The design of this vehicle. - /// - [SerializationPriority(1)] - public IDesign Design { get; set; } - - /// - /// Emergency speed generated by activated emergency propulsion components. Only available for one turn. - /// - [DoNotSerialize] - public int EmergencySpeed { get; set; } - - public int Evasion - { - get - { - return - this.GetAbilityValue("Combat To Hit Defense Plus").ToInt() - - this.GetAbilityValue("Combat To Hit Defense Minus").ToInt() - + (Owner == null || Owner.Culture == null ? 0 : Owner.Culture.SpaceCombat) - + Sector.GetEmpireAbilityValue(Owner, "Combat Modifier - Sector").ToInt() - + StarSystem.GetEmpireAbilityValue(Owner, "Combat Modifier - System").ToInt() - + Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); - } - } - - public int HitChance - { - get { return 1; } - } - - [DoNotSerialize(false)] - public int Hitpoints - { - get - { - return Components.Sum(c => c.Hitpoints); - } - set - { - throw new NotSupportedException("Cannot directly set the hitpoints of a vehicle. Its hitpoints are determined by its components."); - } - } - - public IHull Hull { get { return Design.Hull; } } - - /// - /// Current HP of all non-armor components. - /// - public int HullHitpoints - { - get - { - return Components.Sum(c => c.HullHitpoints); - } - } - - public Progress HullHitpointsFill - { - get { return new Progress(HullHitpoints, MaxHullHitpoints); } - } - - [DoNotSerialize] - public Image Icon - { - get { return Design.Icon; } - } - - public Image Icon32 => Icon.Resize(32); - - public IEnumerable IconPaths - { - get - { - return Design.IconPaths; - } - } - - public long ID - { - get; - set; - } - - public IEnumerable IntrinsicAbilities - { - get { yield break; } - } - - public bool IsAlive => !IsDestroyed; - - /// - /// Is this vehicle destroyed? - /// Vehicles are destroyed when all internal (non-armor) components are destroyed, or when they are disposed. - /// - public bool IsDestroyed { get { return IsDisposed || Components.All(c => c.IsDestroyed || c.HasAbility("Armor")); } } - - public bool IsDisposed { get; set; } - - public bool IsMemory - { - get; - set; - } - - public bool IsObsolescent - { - get { return Design.IsObsolescent; } - } - - public bool IsObsolete - { - get { return Design.IsObsolete; } - } - - public bool IsOurs { get { return Owner == Empire.Current; } } - - /// - /// Creates an upgraded version of this vehicle if it can be upgraded. - /// - public IVehicle LatestVersion - { - get - { - if (IsObsolescent) - return Design.LatestVersion.Instantiate(); - else - return this; - } - } - - public ResourceQuantity MaintenanceCost - { - get - { - double pct; - if (Design.Hull.VehicleType == VehicleTypes.Ship || Design.Hull.VehicleType == VehicleTypes.Base) - pct = Mod.Current.Settings.ShipBaseMaintenanceRate; - else - pct = Mod.Current.Settings.UnitMaintenanceRate; - - if (pct > 0) - { - if (Sector != null) - pct -= this.Sector.GetEmpireAbilityValue(Owner, "Reduced Maintenance Cost - Sector").ToInt(); - if (StarSystem != null) - pct -= this.StarSystem.GetEmpireAbilityValue(Owner, "Reduced Maintenance Cost - System").ToInt(); - if (Owner != null) - { - pct -= this.Owner.GetAbilityValue("Reduced Maintenance Cost - Empire").ToInt(); - pct -= Owner.Culture.MaintenanceReduction; - if (Owner.PrimaryRace.Aptitudes.ContainsKey(Aptitude.Maintenance.Name)) - pct -= Owner.PrimaryRace.Aptitudes[Aptitude.Maintenance.Name] - 100; - } - pct *= (100d + this.GetAbilityValue("Modified Maintenance Cost").ToInt()) / 100d; - return Cost * pct / 100d; - } - else - return new ResourceQuantity(); - } - } - - public int MaxArmorHitpoints - { - get { return Components.Sum(c => c.MaxArmorHitpoints); } - } - - public int MaxHitpoints - { - get { return Components.Sum(c => c.MaxHitpoints); } - } - - public int MaxHullHitpoints - { - get { return Components.Sum(c => c.MaxHullHitpoints); } - } - - public int MaxNormalShields - { - get - { - var shields = MaxUnmodifiedNormalShields; - var addmods = (double)MaxUnmodifiedNormalShields / (MaxUnmodifiedNormalShields + MaxUnmodifiedPhasedShields) * -Sector.GetAbilityValue("Sector - Shield Disruption").ToInt(); - if (double.IsInfinity(addmods) || double.IsNaN(addmods)) - addmods = 0; - return Math.Max(0, (100 + ShieldPercentageModifiers).PercentOfRounded(shields)) + (int)addmods; - } - } - - public int MaxPhasedShields - { - get - { - var shields = MaxUnmodifiedPhasedShields; - var addmods = (double)MaxUnmodifiedPhasedShields / (MaxUnmodifiedNormalShields + MaxUnmodifiedPhasedShields) * -Sector.GetAbilityValue("Sector - Shield Disruption").ToInt(); - if (double.IsInfinity(addmods) || double.IsNaN(addmods)) - addmods = 0; - return Math.Max(0, (100 + ShieldPercentageModifiers).PercentOfRounded(shields)) + (int)addmods; - } - } - - public int MaxShieldHitpoints - { - get { return MaxNormalShields + MaxPhasedShields; } - } - - public abstract int MaxTargets { get; } - - public int MaxUnmodifiedNormalShields - { - get - { - return - this.GetAbilityValue("Shield Generation").ToInt() - + this.GetAbilityValue("Planet - Shield Generation").ToInt(); - } - } - - public int MaxUnmodifiedPhasedShields - { - get - { - return this.GetAbilityValue("Phased Shield Generation").ToInt(); - } - } - - public double MerchantsRatio => Owner.HasAbility("No Spaceports") ? 1.0 : 0.0; - - /// - /// Resource cost per turn to maintain this vehicle. - /// - public int MineralsMaintenance - { - get { return MaintenanceCost[Resource.Minerals]; } - } - - /// - /// The name of this vehicle. - /// - public string Name { get; set; } - - /// - /// Any vehicles that use a newer version of this vehicle's design. - /// - public IEnumerable NewerVersions - { - get - { - return Galaxy.Current.FindSpaceObjects().Where(v => Design.UpgradesTo(v.Design)); - } - } - - /// - /// The current amount of shields. - /// - public int NormalShields { get; set; } - - /// - /// Any vehicles that use an older version of this vehicle's design. - /// - public IEnumerable OlderVersions - { - get - { - return Galaxy.Current.FindSpaceObjects().Where(v => v.Design.UpgradesTo(Design)); - } - } - - public int OrganicsMaintenance - { - get { return MaintenanceCost[Resource.Organics]; } - } - - /// - /// The owner of this vehicle. - /// - public Empire Owner { get; set; } - - public virtual IEnumerable Parents - { - get { yield return Owner; } - } - - /// - /// Does this vehicle participate in ground combat? - /// - public abstract bool ParticipatesInGroundCombat - { - get; - } - - /// - /// The current amount of phased shields. - /// - public int PhasedShields { get; set; } - - [DoNotSerialize] - public Image Portrait - { - get { return Design.Portrait; } - } - - public IEnumerable PortraitPaths - { - get - { - return Design.PortraitPaths; - } - } - - public int RadioactivesMaintenance - { - get { return MaintenanceCost[Resource.Radioactives]; } - } - - public abstract IMobileSpaceObject RecycleContainer { get; } - - public ResourceQuantity RemoteMiningIncomePercentages - { - get - { - return Owner.PrimaryRace.IncomePercentages; - } - } - - public bool RequiresColonyQueue - { - get { return false; } - } - - public abstract bool RequiresSpaceYardQueue { get; } - /*public IEnumerable IconPaths - { - get { return Design.IconPaths; } - } - - public IEnumerable PortraitPaths - { - get { return Design.PortraitPaths; } - }*/ - - /// - /// Vehicles have no resource value. - /// - public ResourceQuantity ResourceValue - { - get { return new ResourceQuantity(); } - } - - public ResourceQuantity ScrapValue - { - get - { - double ratio; - if (this is Ship || this is Base) - ratio = Mod.Current.Settings.ScrapShipOrBaseReturnRate; - else - ratio = Mod.Current.Settings.ScrapUnitReturnRate; - var val = Cost * ratio / 100; - if (this is ICargoContainer) - { - var cc = (ICargoContainer)this; - if (cc.Cargo != null) - val += cc.Cargo.Units.Sum(u => u.ScrapValue); - } - return val; - } - } - - public abstract Sector Sector { get; set; } - - /// - /// Total current shield HP. - /// - public int ShieldHitpoints { get { return NormalShields + PhasedShields; } } - - public Progress ShieldHitpointsFill - { - get { return new Progress(ShieldHitpoints, MaxShieldHitpoints); } - } - - public int ShieldPercentageModifiers - { - get - { - // TODO: make these multiplicative, at least some of them? - return - + Sector.GetEmpireAbilityValue(Owner, "Shield Modifier - Sector").ToInt() - + StarSystem.GetEmpireAbilityValue(Owner, "Shield Modifier - System").ToInt() - + Owner.GetAbilityValue("Shield Modifier - Empire").ToInt(); - } - } - - public int ShieldAdditiveModifiers - => -Sector.GetAbilityValue("Sector - Shield Disruption").ToInt(); - - public int Size - { - get { return Design.Hull.Size; } - } - - public ResourceQuantity StandardIncomePercentages - { - get - { - return Owner.PrimaryRace.IncomePercentages; - } - } - - public abstract StarSystem StarSystem { get; } - - /// - /// The speed of the vehicle, taking into account hull mass, thrust, and speed bonuses. - /// - public virtual int StrategicSpeed - { - get - { - // no Engines Per Move rating? then no movement - if (Design.Hull.ThrustPerMove == 0) - return 0; - - // can't go anywhere without thrust! - var thrust = this.GetAbilityValue("Standard Ship Movement").ToInt(); - if (thrust < Design.Hull.ThrustPerMove) - return 0; - - // take into account base speed plus all bonuses - return - thrust / Design.Hull.ThrustPerMove - + this.GetAbilityValue("Movement Bonus").ToInt() - + this.GetAbilityValue("Extra Movement Generation").ToInt() - + this.GetAbilityValue("Vehicle Speed").ToInt() - + EmergencySpeed; - } - } - - public IConstructionTemplate Template - { - get { return Design; } - } - - public double Timestamp { get; set; } - - /// - /// The undamaged weapons installed on this vehicle. - /// - public IEnumerable Weapons - { - get - { - return Components.Where(c => !c.IsDestroyed && c.Template.ComponentTemplate.WeaponInfo != null); - } - } - - public abstract WeaponTargets WeaponTargetType { get; } - - public bool CanTarget(ITargetable target) - { - // TODO - alliances - return target.Owner != Owner && Weapons.Any(c => !c.IsDestroyed && c.Template.ComponentTemplate.WeaponInfo.Targets.HasFlag(target.WeaponTargetType)); - } - - public abstract Visibility CheckVisibility(Empire emp); - - public virtual void Dispose() - { - if (IsDisposed) - return; - IsDisposed = true; - Galaxy.Current.UnassignID(this); - if (!IsMemory) - this.UpdateEmpireMemories(); - if (this is IUnit u) - u.Container?.RemoveUnit(u); - } - - public bool IsHostileTo(Empire emp) - { - return Owner == null ? false : Owner.IsEnemyOf(emp, StarSystem); - } - - public abstract bool IsObsoleteMemory(Empire emp); - - public abstract void Place(ISpaceObject target); - - public void Recycle(IRecycleBehavior behavior, bool didExecute = false) - { - // TODO - need to do more stuff to recycle? - if (!didExecute) - behavior.Execute(this, true); - } - - public virtual void Redact(Empire emp) - { - var visibility = CheckVisibility(emp); - - // Can't see the ship's components if it's not scanned - // and can't see the design either if we haven't scanned it before - if (visibility < Visibility.Scanned) - { - // TODO - hide design of vehicle that has never been scanned before, even if we know the design? - if (Design.CheckVisibility(emp) < Visibility.Scanned) - { - // create fake design - var d = Vehicles.Design.Create(Design.VehicleType); - d.Hull = Design.Hull; - d.Owner = Design.Owner; - Design = d; - - // set name of ship so we can't guess what design it is - Name = (Owner?.Name ?? "Unowned") + " " + Hull.Name; - - // clear component list if design is not known - Components.Clear(); - } - - // can't see HP of components unless scanned, so pretend the ship is fully repaired - Repair(); - } - - if (visibility < Visibility.Fogged || visibility < Visibility.Visible && !IsMemory) - Dispose(); - } - - /// - /// Repairs a specified number of components. - /// - /// - /// - public int? Repair(int? amount = null) - { - if (IsDestroyed) - return amount; // destroyed vehicles cannot be repaired, keptin! - if (amount == null) - { - foreach (var comp in Components) - comp.Repair(); - } - else - { - // repair most-damaged components first - // TODO - other repair priorities - foreach (var comp in Components.Where(x => x.Hitpoints < x.MaxHitpoints).OrderBy(c => (double)c.Hitpoints / (double)c.MaxHitpoints)) - { - if (amount <= 0) - break; - comp.Repair(); - amount--; - } - } - return amount; - } - - public virtual void ReplenishShields(int? amount = null) - { - if (amount == null) - { - NormalShields = MaxNormalShields; - PhasedShields = MaxPhasedShields; - } - else - { - PhasedShields += amount.Value; - if (PhasedShields > MaxPhasedShields) - { - var overflow = PhasedShields - MaxPhasedShields; - PhasedShields = MaxPhasedShields; - NormalShields += overflow; - if (NormalShields > MaxNormalShields) - NormalShields = MaxNormalShields; - } - } - } - - public int TakeDamage(Hit hit, PRNG dice = null) - { - int damage = hit.NominalDamage; - - if (IsDestroyed) - return damage; // she canna take any more! - - // let shields mitigate incoming damage - damage = this.TakeShieldDamage(hit, damage, dice); - - // TODO - make sure we have components that are not immune to the damage type so we don't get stuck in an infinite loop - - // emissive armor negates a certain amount of damage that penetrates the shields - // TODO - emissive should be ineffective vs. armor piercing damage - var emissive = this.GetAbilityValue("Emissive Armor").ToInt(); - var dt = hit.Shot?.DamageType ?? DamageType.Normal; - damage -= (int)Math.Round(emissive * dt.EmissiveArmor.Evaluate(hit).Percent()); - - while (damage > 0 && !IsDestroyed) - { - // save off damage counter for shield generation from damage ability - var sgfdStart = damage; - var sgfdAbility = this.GetAbilityValue("Shield Generation From Damage").ToInt(); - - var comps = Components.Where(c => c.Hitpoints > 0 && dt.ComponentPiercing.Evaluate(new Hit(hit.Shot, c, hit.NominalDamage)) < 100); - var armor = comps.Where(c => c.HasAbility("Armor")); - var internals = comps.Where(c => !c.HasAbility("Armor")); - var canBeHit = armor.Any() ? armor : internals; - var comp = canBeHit.Where(c => - { - // skip components that are completely pierced by this hit - var hit2 = new Hit(hit.Shot, c, damage); - return dt.ComponentPiercing.Evaluate(hit2) < 100; - }).ToDictionary(c => c, c => c.HitChance).PickWeighted(dice); - if (comp == null) - break; // no more components to hit - var comphit = new Hit(hit.Shot, comp, damage); - damage = comp.TakeDamage(comphit, dice); - - // shield generation from damage - var sgfd = dt.ShieldGenerationFromDamage.Evaluate(hit).PercentOfRounded(Math.Min(sgfdStart - damage, sgfdAbility)); - ReplenishShields(sgfd); - } - - if (IsDestroyed) - { - if (this is Ship || this is Base) - { - // trigger ship lost happiness changes - Owner?.TriggerHappinessChange(hm => hm.OurShipLost); - Owner?.TriggerHappinessChange(StarSystem, hm => hm.OurShipLostInSystem); - } - Dispose(); - } - - // update memory sight - if (!IsMemory) - this.UpdateEmpireMemories(); - - return damage; - } - - public override string ToString() - { - return Name; - } - - IEnumerable ICombatant.Components => Components; - - public abstract bool FillsCombatTile { get; } - } -} +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Objects.Vehicles +{ + /// + /// A ship, base, or unit. + /// + [Serializable] + public abstract class Vehicle : INamed, IConstructable, IVehicle, ICombatant, IFoggable + { + public Vehicle() + { + Components = new List(); + ConstructionProgress = new ResourceQuantity(); + } + + public abstract AbilityTargets AbilityTarget { get; } + + public int Accuracy + { + get + { + return + this.GetAbilityValue("Combat To Hit Offense Plus").ToInt() + - this.GetAbilityValue("Combat To Hit Offense Minus").ToInt() + + (Owner == null || Owner.Culture == null ? 0 : Owner.Culture.SpaceCombat) + + Sector.GetEmpireAbilityValue(Owner, "Combat Modifier - Sector").ToInt() + + StarSystem.GetEmpireAbilityValue(Owner, "Combat Modifier - System").ToInt() + + Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); + } + } + + /// + /// Current HP of all armor components. + /// + public int ArmorHitpoints + { + get + { + return Components.Sum(c => c.ArmorHitpoints); + } + } + + public Progress ArmorHitpointsFill + { + get { return new Progress(ArmorHitpoints, MaxArmorHitpoints); } + } + + public IEnumerable Children + { + get + { + if (Design == null) + return Components; + return Components.Cast().Append(Design.Hull); + } + } + + public abstract double CombatSpeed { get; } + + /// + /// The components on this vehicle. + /// Needs to be protected, not private, so reflection can find it from a derived class. + /// Can change CommonExtensions.CopyEnumerableProperties to scan base classes, though... + /// + [DoNotSerialize(false)] + public IList Components { get; protected set; } + + public ResourceQuantity ConstructionProgress + { + get; + set; + } + + public ResourceQuantity Cost + { + get + { + if (!Components.Any()) + return new ResourceQuantity(); + return Design.Hull.Cost + Components.Select(c => c.Template.Cost).Aggregate((c1, c2) => c1 + c2); + } + } + + /// + /// Damage that has been applied to this vehicle's components. + /// + public SafeDictionary> Damage + { + get + { + var dict = new SafeDictionary>(); + foreach (var c in Components) + { + if (c.Hitpoints != c.MaxHitpoints) + { + if (!dict.ContainsKey(c.Template)) + dict.Add(c.Template, new List()); + dict[c.Template].Add(c.MaxHitpoints - c.Hitpoints); + } + } + return dict; + } + set + { + Components = new List(); + foreach (var template in Design.Components) + { + var component = template.Instantiate(); + Components.Add(component); + } + foreach (var kvp in value) + { + var template = kvp.Key; + var damages = kvp.Value; + for (var i = 0; i < damages.Count; i++) + { + var component = Components.Where(c => c.Template == template).ElementAt(i); + component.Hitpoints = component.MaxHitpoints - damages[i]; + } + } + } + } + + /// + /// The design of this vehicle. + /// + [SerializationPriority(1)] + public IDesign Design { get; set; } + + /// + /// Emergency speed generated by activated emergency propulsion components. Only available for one turn. + /// + [DoNotSerialize] + public int EmergencySpeed { get; set; } + + public int Evasion + { + get + { + return + this.GetAbilityValue("Combat To Hit Defense Plus").ToInt() + - this.GetAbilityValue("Combat To Hit Defense Minus").ToInt() + + (Owner == null || Owner.Culture == null ? 0 : Owner.Culture.SpaceCombat) + + Sector.GetEmpireAbilityValue(Owner, "Combat Modifier - Sector").ToInt() + + StarSystem.GetEmpireAbilityValue(Owner, "Combat Modifier - System").ToInt() + + Owner.GetAbilityValue("Combat Modifier - Empire").ToInt(); + } + } + + public int HitChance + { + get { return 1; } + } + + [DoNotSerialize(false)] + public int Hitpoints + { + get + { + return Components.Sum(c => c.Hitpoints); + } + set + { + throw new NotSupportedException("Cannot directly set the hitpoints of a vehicle. Its hitpoints are determined by its components."); + } + } + + public IHull Hull { get { return Design.Hull; } } + + /// + /// Current HP of all non-armor components. + /// + public int HullHitpoints + { + get + { + return Components.Sum(c => c.HullHitpoints); + } + } + + public Progress HullHitpointsFill + { + get { return new Progress(HullHitpoints, MaxHullHitpoints); } + } + + [DoNotSerialize] + public Image Icon + { + get { return Design.Icon; } + } + + public Image Icon32 => Icon.Resize(32); + + public IEnumerable IconPaths + { + get + { + return Design.IconPaths; + } + } + + public long ID + { + get; + set; + } + + public IEnumerable IntrinsicAbilities + { + get { yield break; } + } + + public bool IsAlive => !IsDestroyed; + + /// + /// Is this vehicle destroyed? + /// Vehicles are destroyed when all internal (non-armor) components are destroyed, or when they are disposed. + /// + public bool IsDestroyed { get { return IsDisposed || Components.All(c => c.IsDestroyed || c.HasAbility("Armor")); } } + + public bool IsDisposed { get; set; } + + public bool IsMemory + { + get; + set; + } + + public bool IsObsolescent + { + get { return Design.IsObsolescent; } + } + + public bool IsObsolete + { + get { return Design.IsObsolete; } + } + + public bool IsOurs { get { return Owner == Empire.Current; } } + + /// + /// Creates an upgraded version of this vehicle if it can be upgraded. + /// + public IVehicle LatestVersion + { + get + { + if (IsObsolescent) + return Design.LatestVersion.Instantiate(); + else + return this; + } + } + + public ResourceQuantity MaintenanceCost + { + get + { + double pct; + if (Design.Hull.VehicleType == VehicleTypes.Ship || Design.Hull.VehicleType == VehicleTypes.Base) + pct = Mod.Current.Settings.ShipBaseMaintenanceRate; + else + pct = Mod.Current.Settings.UnitMaintenanceRate; + + if (pct > 0) + { + if (Sector != null) + pct -= this.Sector.GetEmpireAbilityValue(Owner, "Reduced Maintenance Cost - Sector").ToInt(); + if (StarSystem != null) + pct -= this.StarSystem.GetEmpireAbilityValue(Owner, "Reduced Maintenance Cost - System").ToInt(); + if (Owner != null) + { + pct -= this.Owner.GetAbilityValue("Reduced Maintenance Cost - Empire").ToInt(); + pct -= Owner.Culture.MaintenanceReduction; + if (Owner.PrimaryRace.Aptitudes.ContainsKey(Aptitude.Maintenance.Name)) + pct -= Owner.PrimaryRace.Aptitudes[Aptitude.Maintenance.Name] - 100; + } + pct *= (100d + this.GetAbilityValue("Modified Maintenance Cost").ToInt()) / 100d; + return Cost * pct / 100d; + } + else + return new ResourceQuantity(); + } + } + + public int MaxArmorHitpoints + { + get { return Components.Sum(c => c.MaxArmorHitpoints); } + } + + public int MaxHitpoints + { + get { return Components.Sum(c => c.MaxHitpoints); } + } + + public int MaxHullHitpoints + { + get { return Components.Sum(c => c.MaxHullHitpoints); } + } + + public int MaxNormalShields + { + get + { + var shields = MaxUnmodifiedNormalShields; + var addmods = (double)MaxUnmodifiedNormalShields / (MaxUnmodifiedNormalShields + MaxUnmodifiedPhasedShields) * -Sector.GetAbilityValue("Sector - Shield Disruption").ToInt(); + if (double.IsInfinity(addmods) || double.IsNaN(addmods)) + addmods = 0; + return Math.Max(0, (100 + ShieldPercentageModifiers).PercentOfRounded(shields)) + (int)addmods; + } + } + + public int MaxPhasedShields + { + get + { + var shields = MaxUnmodifiedPhasedShields; + var addmods = (double)MaxUnmodifiedPhasedShields / (MaxUnmodifiedNormalShields + MaxUnmodifiedPhasedShields) * -Sector.GetAbilityValue("Sector - Shield Disruption").ToInt(); + if (double.IsInfinity(addmods) || double.IsNaN(addmods)) + addmods = 0; + return Math.Max(0, (100 + ShieldPercentageModifiers).PercentOfRounded(shields)) + (int)addmods; + } + } + + public int MaxShieldHitpoints + { + get { return MaxNormalShields + MaxPhasedShields; } + } + + public abstract int MaxTargets { get; } + + public int MaxUnmodifiedNormalShields + { + get + { + return + this.GetAbilityValue("Shield Generation").ToInt() + + this.GetAbilityValue("Planet - Shield Generation").ToInt(); + } + } + + public int MaxUnmodifiedPhasedShields + { + get + { + return this.GetAbilityValue("Phased Shield Generation").ToInt(); + } + } + + public double MerchantsRatio => Owner.HasAbility("No Spaceports") ? 1.0 : 0.0; + + /// + /// Resource cost per turn to maintain this vehicle. + /// + public int MineralsMaintenance + { + get { return MaintenanceCost[Resource.Minerals]; } + } + + /// + /// The name of this vehicle. + /// + public string Name { get; set; } + + /// + /// Any vehicles that use a newer version of this vehicle's design. + /// + public IEnumerable NewerVersions + { + get + { + return Galaxy.Current.FindSpaceObjects().Where(v => Design.UpgradesTo(v.Design)); + } + } + + /// + /// The current amount of shields. + /// + public int NormalShields { get; set; } + + /// + /// Any vehicles that use an older version of this vehicle's design. + /// + public IEnumerable OlderVersions + { + get + { + return Galaxy.Current.FindSpaceObjects().Where(v => v.Design.UpgradesTo(Design)); + } + } + + public int OrganicsMaintenance + { + get { return MaintenanceCost[Resource.Organics]; } + } + + /// + /// The owner of this vehicle. + /// + public Empire Owner { get; set; } + + public virtual IEnumerable Parents + { + get { yield return Owner; } + } + + /// + /// Does this vehicle participate in ground combat? + /// + public abstract bool ParticipatesInGroundCombat + { + get; + } + + /// + /// The current amount of phased shields. + /// + public int PhasedShields { get; set; } + + [DoNotSerialize] + public Image Portrait + { + get { return Design.Portrait; } + } + + public IEnumerable PortraitPaths + { + get + { + return Design.PortraitPaths; + } + } + + public int RadioactivesMaintenance + { + get { return MaintenanceCost[Resource.Radioactives]; } + } + + public abstract IMobileSpaceObject RecycleContainer { get; } + + public ResourceQuantity RemoteMiningIncomePercentages + { + get + { + return Owner.PrimaryRace.IncomePercentages; + } + } + + public bool RequiresColonyQueue + { + get { return false; } + } + + public abstract bool RequiresSpaceYardQueue { get; } + /*public IEnumerable IconPaths + { + get { return Design.IconPaths; } + } + + public IEnumerable PortraitPaths + { + get { return Design.PortraitPaths; } + }*/ + + /// + /// Vehicles have no resource value. + /// + public ResourceQuantity ResourceValue + { + get { return new ResourceQuantity(); } + } + + public ResourceQuantity ScrapValue + { + get + { + double ratio; + if (this is Ship || this is Base) + ratio = Mod.Current.Settings.ScrapShipOrBaseReturnRate; + else + ratio = Mod.Current.Settings.ScrapUnitReturnRate; + var val = Cost * ratio / 100; + if (this is ICargoContainer) + { + var cc = (ICargoContainer)this; + if (cc.Cargo != null) + val += cc.Cargo.Units.Sum(u => u.ScrapValue); + } + return val; + } + } + + public abstract Sector Sector { get; set; } + + /// + /// Total current shield HP. + /// + public int ShieldHitpoints { get { return NormalShields + PhasedShields; } } + + public Progress ShieldHitpointsFill + { + get { return new Progress(ShieldHitpoints, MaxShieldHitpoints); } + } + + public int ShieldPercentageModifiers + { + get + { + // TODO: make these multiplicative, at least some of them? + return + + Sector.GetEmpireAbilityValue(Owner, "Shield Modifier - Sector").ToInt() + + StarSystem.GetEmpireAbilityValue(Owner, "Shield Modifier - System").ToInt() + + Owner.GetAbilityValue("Shield Modifier - Empire").ToInt(); + } + } + + public int ShieldAdditiveModifiers + => -Sector.GetAbilityValue("Sector - Shield Disruption").ToInt(); + + public int Size + { + get { return Design.Hull.Size; } + } + + public ResourceQuantity StandardIncomePercentages + { + get + { + return Owner.PrimaryRace.IncomePercentages; + } + } + + public abstract StarSystem StarSystem { get; } + + /// + /// The speed of the vehicle, taking into account hull mass, thrust, and speed bonuses. + /// + public virtual int StrategicSpeed + { + get + { + // no Engines Per Move rating? then no movement + if (Design.Hull.ThrustPerMove == 0) + return 0; + + // can't go anywhere without thrust! + var thrust = this.GetAbilityValue("Standard Ship Movement").ToInt(); + if (thrust < Design.Hull.ThrustPerMove) + return 0; + + // take into account base speed plus all bonuses + return + thrust / Design.Hull.ThrustPerMove + + this.GetAbilityValue("Movement Bonus").ToInt() + + this.GetAbilityValue("Extra Movement Generation").ToInt() + + this.GetAbilityValue("Vehicle Speed").ToInt() + + EmergencySpeed; + } + } + + public IConstructionTemplate Template + { + get { return Design; } + } + + public double Timestamp { get; set; } + + /// + /// The undamaged weapons installed on this vehicle. + /// + public IEnumerable Weapons + { + get + { + return Components.Where(c => !c.IsDestroyed && c.Template.ComponentTemplate.WeaponInfo != null); + } + } + + public abstract WeaponTargets WeaponTargetType { get; } + + public bool CanTarget(ITargetable target) + { + // TODO - alliances + return target.Owner != Owner && Weapons.Any(c => !c.IsDestroyed && c.Template.ComponentTemplate.WeaponInfo.Targets.HasFlag(target.WeaponTargetType)); + } + + public abstract Visibility CheckVisibility(Empire emp); + + public virtual void Dispose() + { + if (IsDisposed) + return; + IsDisposed = true; + Galaxy.Current.UnassignID(this); + if (!IsMemory) + this.UpdateEmpireMemories(); + if (this is IUnit u) + u.Container?.RemoveUnit(u); + } + + public bool IsHostileTo(Empire emp) + { + return Owner == null ? false : Owner.IsEnemyOf(emp, StarSystem); + } + + public abstract bool IsObsoleteMemory(Empire emp); + + public abstract void Place(ISpaceObject target); + + public void Recycle(IRecycleBehavior behavior, bool didExecute = false) + { + // TODO - need to do more stuff to recycle? + if (!didExecute) + behavior.Execute(this, true); + } + + public virtual void Redact(Empire emp) + { + var visibility = CheckVisibility(emp); + + // Can't see the ship's components if it's not scanned + // and can't see the design either if we haven't scanned it before + if (visibility < Visibility.Scanned) + { + // TODO - hide design of vehicle that has never been scanned before, even if we know the design? + if (Design.CheckVisibility(emp) < Visibility.Scanned) + { + // create fake design + var d = Vehicles.Design.Create(Design.VehicleType); + d.Hull = Design.Hull; + d.Owner = Design.Owner; + Design = d; + + // set name of ship so we can't guess what design it is + Name = (Owner?.Name ?? "Unowned") + " " + Hull.Name; + + // clear component list if design is not known + Components.Clear(); + } + + // can't see HP of components unless scanned, so pretend the ship is fully repaired + Repair(); + } + + if (visibility < Visibility.Fogged || visibility < Visibility.Visible && !IsMemory) + Dispose(); + } + + /// + /// Repairs a specified number of components. + /// + /// + /// + public int? Repair(int? amount = null) + { + if (IsDestroyed) + return amount; // destroyed vehicles cannot be repaired, keptin! + if (amount == null) + { + foreach (var comp in Components) + comp.Repair(); + } + else + { + // repair most-damaged components first + // TODO - other repair priorities + foreach (var comp in Components.Where(x => x.Hitpoints < x.MaxHitpoints).OrderBy(c => (double)c.Hitpoints / (double)c.MaxHitpoints)) + { + if (amount <= 0) + break; + comp.Repair(); + amount--; + } + } + return amount; + } + + public virtual void ReplenishShields(int? amount = null) + { + if (amount == null) + { + NormalShields = MaxNormalShields; + PhasedShields = MaxPhasedShields; + } + else + { + PhasedShields += amount.Value; + if (PhasedShields > MaxPhasedShields) + { + var overflow = PhasedShields - MaxPhasedShields; + PhasedShields = MaxPhasedShields; + NormalShields += overflow; + if (NormalShields > MaxNormalShields) + NormalShields = MaxNormalShields; + } + } + } + + public int TakeDamage(Hit hit, PRNG dice = null) + { + int damage = hit.NominalDamage; + + if (IsDestroyed) + return damage; // she canna take any more! + + // let shields mitigate incoming damage + damage = this.TakeShieldDamage(hit, damage, dice); + + // TODO - make sure we have components that are not immune to the damage type so we don't get stuck in an infinite loop + + // emissive armor negates a certain amount of damage that penetrates the shields + // TODO - emissive should be ineffective vs. armor piercing damage + var emissive = this.GetAbilityValue("Emissive Armor").ToInt(); + var dt = hit.Shot?.DamageType ?? DamageType.Normal; + damage -= (int)Math.Round(emissive * dt.EmissiveArmor.Evaluate(hit).Percent()); + + while (damage > 0 && !IsDestroyed) + { + // save off damage counter for shield generation from damage ability + var sgfdStart = damage; + var sgfdAbility = this.GetAbilityValue("Shield Generation From Damage").ToInt(); + + var comps = Components.Where(c => c.Hitpoints > 0 && dt.ComponentPiercing.Evaluate(new Hit(hit.Shot, c, hit.NominalDamage)) < 100); + var armor = comps.Where(c => c.HasAbility("Armor")); + var internals = comps.Where(c => !c.HasAbility("Armor")); + var canBeHit = armor.Any() ? armor : internals; + var comp = canBeHit.Where(c => + { + // skip components that are completely pierced by this hit + var hit2 = new Hit(hit.Shot, c, damage); + return dt.ComponentPiercing.Evaluate(hit2) < 100; + }).ToDictionary(c => c, c => c.HitChance).PickWeighted(dice); + if (comp == null) + break; // no more components to hit + var comphit = new Hit(hit.Shot, comp, damage); + damage = comp.TakeDamage(comphit, dice); + + // shield generation from damage + var sgfd = dt.ShieldGenerationFromDamage.Evaluate(hit).PercentOfRounded(Math.Min(sgfdStart - damage, sgfdAbility)); + ReplenishShields(sgfd); + } + + if (IsDestroyed) + { + if (this is Ship || this is Base) + { + // trigger ship lost happiness changes + Owner?.TriggerHappinessChange(hm => hm.OurShipLost); + Owner?.TriggerHappinessChange(StarSystem, hm => hm.OurShipLostInSystem); + } + Dispose(); + } + + // update memory sight + if (!IsMemory) + this.UpdateEmpireMemories(); + + return damage; + } + + public override string ToString() + { + return Name; + } + + IEnumerable ICombatant.Components => Components; + + public abstract bool FillsCombatTile { get; } + } +} diff --git a/FrEee/Game/Objects/Vehicles/WeaponPlatform.cs b/FrEee/Objects/Vehicles/WeaponPlatform.cs similarity index 86% rename from FrEee/Game/Objects/Vehicles/WeaponPlatform.cs rename to FrEee/Objects/Vehicles/WeaponPlatform.cs index daa15fc2a..98a3722f3 100644 --- a/FrEee/Game/Objects/Vehicles/WeaponPlatform.cs +++ b/FrEee/Objects/Vehicles/WeaponPlatform.cs @@ -1,100 +1,100 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.Vehicles -{ - [Serializable] - public class WeaponPlatform : Vehicle, IUnit - { - public override AbilityTargets AbilityTarget - { - get { return AbilityTargets.WeaponPlatform; } - } - - public override double CombatSpeed => 0; - - public ICargoContainer Container - { - get { return CommonExtensions.FindContainer(this); } - } - - public override int MaxTargets => int.MaxValue; - - public override IEnumerable Parents - { - get - { - if (Owner != null) - yield return Owner; - if (Container != null && Container is IAbilityObject) - yield return (IAbilityObject)Container; - } - } - - public override bool ParticipatesInGroundCombat - { - get { return false; } - } - - public override IMobileSpaceObject RecycleContainer - { - get { return (this as IUnit).Container as IMobileSpaceObject; } - } - - public override bool RequiresSpaceYardQueue - { - get { return false; } - } - - [DoNotSerialize] - public override Sector Sector - { - get { return Container == null ? null : Container.Sector; } - set - { - //throw new NotSupportedException("Cannot set the sector of a weapon platform."); - } - } - - public override StarSystem StarSystem - { - get { return Container?.StarSystem; } - } - - public override Enumerations.WeaponTargets WeaponTargetType - { - // weapon platforms cannot be targeted in space combat - get { return Enumerations.WeaponTargets.Invalid; } - } - - public override Visibility CheckVisibility(Empire emp) - { - if (Owner == emp) - return Visibility.Owned; - var sobj = Container as ISpaceObject; - if (sobj != null && sobj.HasVisibility(emp, Visibility.Scanned)) - return Visibility.Scanned; - return Visibility.Unknown; - } - - public override bool IsObsoleteMemory(Empire emp) - { - if (Container == null) - return this.MemoryOwner() == emp && Timestamp < Galaxy.Current.Timestamp - 1; - return Container.StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; - } - - public override void Place(ISpaceObject target) - { - CommonExtensions.Place(this, target); - } - - public override bool FillsCombatTile => false; - } +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; + +namespace FrEee.Objects.Vehicles +{ + [Serializable] + public class WeaponPlatform : Vehicle, IUnit + { + public override AbilityTargets AbilityTarget + { + get { return AbilityTargets.WeaponPlatform; } + } + + public override double CombatSpeed => 0; + + public ICargoContainer Container + { + get { return CommonExtensions.FindContainer(this); } + } + + public override int MaxTargets => int.MaxValue; + + public override IEnumerable Parents + { + get + { + if (Owner != null) + yield return Owner; + if (Container != null && Container is IAbilityObject) + yield return (IAbilityObject)Container; + } + } + + public override bool ParticipatesInGroundCombat + { + get { return false; } + } + + public override IMobileSpaceObject RecycleContainer + { + get { return (this as IUnit).Container as IMobileSpaceObject; } + } + + public override bool RequiresSpaceYardQueue + { + get { return false; } + } + + [DoNotSerialize] + public override Sector Sector + { + get { return Container == null ? null : Container.Sector; } + set + { + //throw new NotSupportedException("Cannot set the sector of a weapon platform."); + } + } + + public override StarSystem StarSystem + { + get { return Container?.StarSystem; } + } + + public override Enumerations.WeaponTargets WeaponTargetType + { + // weapon platforms cannot be targeted in space combat + get { return Enumerations.WeaponTargets.Invalid; } + } + + public override Visibility CheckVisibility(Empire emp) + { + if (Owner == emp) + return Visibility.Owned; + var sobj = Container as ISpaceObject; + if (sobj != null && sobj.HasVisibility(emp, Visibility.Scanned)) + return Visibility.Scanned; + return Visibility.Unknown; + } + + public override bool IsObsoleteMemory(Empire emp) + { + if (Container == null) + return this.MemoryOwner() == emp && Timestamp < Galaxy.Current.Timestamp - 1; + return Container.StarSystem.CheckVisibility(emp) >= Visibility.Visible && Timestamp < Galaxy.Current.Timestamp - 1; + } + + public override void Place(ISpaceObject target) + { + CommonExtensions.Place(this, target); + } + + public override bool FillsCombatTile => false; + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/VictoryConditions/MajorEmpireEliminationVictoryCondition.cs b/FrEee/Objects/VictoryConditions/MajorEmpireEliminationVictoryCondition.cs similarity index 82% rename from FrEee/Game/Objects/VictoryConditions/MajorEmpireEliminationVictoryCondition.cs rename to FrEee/Objects/VictoryConditions/MajorEmpireEliminationVictoryCondition.cs index cb0223073..c574228c0 100644 --- a/FrEee/Game/Objects/VictoryConditions/MajorEmpireEliminationVictoryCondition.cs +++ b/FrEee/Objects/VictoryConditions/MajorEmpireEliminationVictoryCondition.cs @@ -1,31 +1,31 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.VictoryConditions -{ - /// - /// Eliminate all other major empires. Minor empires may survive. - /// - public class MajorEmpireEliminationVictoryCondition : IVictoryCondition - { - public string GetDefeatMessage(Empire emp, IEnumerable winners) - { - return "The " + emp + " is defeated! " + winners.Single() + " has conquered the galaxy!"; - } - - public double GetProgress(Empire emp) - { - if (emp.IsDefeated) - return 0; - return (double)Galaxy.Current.Empires.Where(e => e.IsDefeated && !e.IsMinorEmpire).Count() / (double)Galaxy.Current.Empires.Where(e => !e.IsMinorEmpire).Count(); - } - - public string GetVictoryMessage(Empire emp) - { - return "The " + emp + " has eliminated all other major empires and conquered the galaxy! All hail " + emp.LeaderName + ", ruler of the cosmos!"; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.VictoryConditions +{ + /// + /// Eliminate all other major empires. Minor empires may survive. + /// + public class MajorEmpireEliminationVictoryCondition : IVictoryCondition + { + public string GetDefeatMessage(Empire emp, IEnumerable winners) + { + return "The " + emp + " is defeated! " + winners.Single() + " has conquered the galaxy!"; + } + + public double GetProgress(Empire emp) + { + if (emp.IsDefeated) + return 0; + return (double)Galaxy.Current.Empires.Where(e => e.IsDefeated && !e.IsMinorEmpire).Count() / (double)Galaxy.Current.Empires.Where(e => !e.IsMinorEmpire).Count(); + } + + public string GetVictoryMessage(Empire emp) + { + return "The " + emp + " has eliminated all other major empires and conquered the galaxy! All hail " + emp.LeaderName + ", ruler of the cosmos!"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/VictoryConditions/PeaceVictoryCondition.cs b/FrEee/Objects/VictoryConditions/PeaceVictoryCondition.cs similarity index 84% rename from FrEee/Game/Objects/VictoryConditions/PeaceVictoryCondition.cs rename to FrEee/Objects/VictoryConditions/PeaceVictoryCondition.cs index 93e038ff1..63948cc25 100644 --- a/FrEee/Game/Objects/VictoryConditions/PeaceVictoryCondition.cs +++ b/FrEee/Objects/VictoryConditions/PeaceVictoryCondition.cs @@ -1,41 +1,41 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.VictoryConditions -{ - /// - /// Maintain galactic peace for a specified duration. - /// - public class PeaceVictoryCondition : IVictoryCondition - { - public PeaceVictoryCondition(int turns) - { - Turns = turns; - } - - /// - /// The number of turns of peace. - /// - public int Turns { get; set; } - - public string GetDefeatMessage(Empire emp, IEnumerable winners) - { - return "The " + emp + " must have been a warmongering menace! The following empires have achieved a peace victory: " + string.Join(", ", winners.Select(e => e.ToString()).ToArray()) + "."; - } - - public double GetProgress(Empire emp) - { - if (emp.IsDefeated) - return 0; - return (double)Galaxy.Current.TurnsOfPeace / (double)Turns; - } - - public string GetVictoryMessage(Empire emp) - { - return "The " + emp + " has, with the help of its allies, ushered in a new era of peace! All hail " + emp.LeaderName + ", master diplomat!"; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.VictoryConditions +{ + /// + /// Maintain galactic peace for a specified duration. + /// + public class PeaceVictoryCondition : IVictoryCondition + { + public PeaceVictoryCondition(int turns) + { + Turns = turns; + } + + /// + /// The number of turns of peace. + /// + public int Turns { get; set; } + + public string GetDefeatMessage(Empire emp, IEnumerable winners) + { + return "The " + emp + " must have been a warmongering menace! The following empires have achieved a peace victory: " + string.Join(", ", winners.Select(e => e.ToString()).ToArray()) + "."; + } + + public double GetProgress(Empire emp) + { + if (emp.IsDefeated) + return 0; + return (double)Galaxy.Current.TurnsOfPeace / (double)Turns; + } + + public string GetVictoryMessage(Empire emp) + { + return "The " + emp + " has, with the help of its allies, ushered in a new era of peace! All hail " + emp.LeaderName + ", master diplomat!"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/VictoryConditions/ScorePercentageVictoryCondition.cs b/FrEee/Objects/VictoryConditions/ScorePercentageVictoryCondition.cs similarity index 85% rename from FrEee/Game/Objects/VictoryConditions/ScorePercentageVictoryCondition.cs rename to FrEee/Objects/VictoryConditions/ScorePercentageVictoryCondition.cs index 3e4bbf85c..95d58605e 100644 --- a/FrEee/Game/Objects/VictoryConditions/ScorePercentageVictoryCondition.cs +++ b/FrEee/Objects/VictoryConditions/ScorePercentageVictoryCondition.cs @@ -1,44 +1,44 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.VictoryConditions -{ - /// - /// Reach a specified percentage of the second place player's score. - /// - public class ScorePercentageVictoryCondition : IVictoryCondition - { - public ScorePercentageVictoryCondition(int percentage) - { - Percentage = percentage; - } - - /// - /// The percentage needed to achieve. - /// - public int Percentage { get; set; } - - public string GetDefeatMessage(Empire emp, IEnumerable winners) - { - return "The " + emp + " has stumbled where others flourished! The " + winners.Single() + " has achieved a score percentage victory."; - } - - public double GetProgress(Empire emp) - { - if (emp.IsDefeated) - return 0; - var secondPlace = Galaxy.Current.Empires.OrderByDescending(e => e.Scores).ElementAtOrDefault(1); - if (secondPlace == null) - return double.PositiveInfinity; - return (double)(int)(emp.Score) / ((double)(int)secondPlace.Score * (double)Percentage / 100d); - } - - public string GetVictoryMessage(Empire emp) - { - return "The " + emp + " has vastly outstripped her peers! All hail " + emp.LeaderName + ", leader of a great empire!"; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.VictoryConditions +{ + /// + /// Reach a specified percentage of the second place player's score. + /// + public class ScorePercentageVictoryCondition : IVictoryCondition + { + public ScorePercentageVictoryCondition(int percentage) + { + Percentage = percentage; + } + + /// + /// The percentage needed to achieve. + /// + public int Percentage { get; set; } + + public string GetDefeatMessage(Empire emp, IEnumerable winners) + { + return "The " + emp + " has stumbled where others flourished! The " + winners.Single() + " has achieved a score percentage victory."; + } + + public double GetProgress(Empire emp) + { + if (emp.IsDefeated) + return 0; + var secondPlace = Galaxy.Current.Empires.OrderByDescending(e => e.Scores).ElementAtOrDefault(1); + if (secondPlace == null) + return double.PositiveInfinity; + return (double)(int)(emp.Score) / ((double)(int)secondPlace.Score * (double)Percentage / 100d); + } + + public string GetVictoryMessage(Empire emp) + { + return "The " + emp + " has vastly outstripped her peers! All hail " + emp.LeaderName + ", leader of a great empire!"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/VictoryConditions/ScoreVictoryCondition.cs b/FrEee/Objects/VictoryConditions/ScoreVictoryCondition.cs similarity index 85% rename from FrEee/Game/Objects/VictoryConditions/ScoreVictoryCondition.cs rename to FrEee/Objects/VictoryConditions/ScoreVictoryCondition.cs index 23c5aa834..c49710488 100644 --- a/FrEee/Game/Objects/VictoryConditions/ScoreVictoryCondition.cs +++ b/FrEee/Objects/VictoryConditions/ScoreVictoryCondition.cs @@ -1,40 +1,40 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.VictoryConditions -{ - /// - /// Reach a specified score. - /// - public class ScoreVictoryCondition : IVictoryCondition - { - public ScoreVictoryCondition(long score) - { - Score = score; - } - - /// - /// The score needed to achieve. - /// - public long Score { get; set; } - - public string GetDefeatMessage(Empire emp, IEnumerable winners) - { - return "The " + emp + " has stumbled where others flourished! The following empires have achieved a score victory: " + string.Join(", ", winners.Select(e => e.ToString()).ToArray()) + "."; - } - - public double GetProgress(Empire emp) - { - if (emp.IsDefeated) - return 0; - return (double)(int)(emp.Score) / (double)(int)Score; - } - - public string GetVictoryMessage(Empire emp) - { - return "The " + emp + " has grown into a mighty power! All hail " + emp.LeaderName + ", leader of a great empire!"; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.VictoryConditions +{ + /// + /// Reach a specified score. + /// + public class ScoreVictoryCondition : IVictoryCondition + { + public ScoreVictoryCondition(long score) + { + Score = score; + } + + /// + /// The score needed to achieve. + /// + public long Score { get; set; } + + public string GetDefeatMessage(Empire emp, IEnumerable winners) + { + return "The " + emp + " has stumbled where others flourished! The following empires have achieved a score victory: " + string.Join(", ", winners.Select(e => e.ToString()).ToArray()) + "."; + } + + public double GetProgress(Empire emp) + { + if (emp.IsDefeated) + return 0; + return (double)(int)(emp.Score) / (double)(int)Score; + } + + public string GetVictoryMessage(Empire emp) + { + return "The " + emp + " has grown into a mighty power! All hail " + emp.LeaderName + ", leader of a great empire!"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/VictoryConditions/SurvivalVictoryCondition.cs b/FrEee/Objects/VictoryConditions/SurvivalVictoryCondition.cs similarity index 81% rename from FrEee/Game/Objects/VictoryConditions/SurvivalVictoryCondition.cs rename to FrEee/Objects/VictoryConditions/SurvivalVictoryCondition.cs index d2f8ee9b7..3c7393226 100644 --- a/FrEee/Game/Objects/VictoryConditions/SurvivalVictoryCondition.cs +++ b/FrEee/Objects/VictoryConditions/SurvivalVictoryCondition.cs @@ -1,40 +1,40 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using System.Collections.Generic; - -namespace FrEee.Game.Objects.VictoryConditions -{ - /// - /// Survive for a specified number of turns. - /// - public class SurvivalVictoryCondition : IVictoryCondition - { - public SurvivalVictoryCondition(int turns) - { - Turns = turns; - } - - /// - /// The number of turns needed to survive. - /// - public int Turns { get; set; } - - public string GetDefeatMessage(Empire emp, IEnumerable winners) - { - return "The " + emp + " has failed to stand the test of time!"; - } - - public double GetProgress(Empire emp) - { - if (emp.IsDefeated) - return 0; - return (double)(Galaxy.Current.TurnNumber - 1) / (double)Turns; - } - - public string GetVictoryMessage(Empire emp) - { - return "The " + emp + " has stood the test of time! All hail " + emp.LeaderName + ", leader of a great empire!"; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using System.Collections.Generic; + +namespace FrEee.Objects.VictoryConditions +{ + /// + /// Survive for a specified number of turns. + /// + public class SurvivalVictoryCondition : IVictoryCondition + { + public SurvivalVictoryCondition(int turns) + { + Turns = turns; + } + + /// + /// The number of turns needed to survive. + /// + public int Turns { get; set; } + + public string GetDefeatMessage(Empire emp, IEnumerable winners) + { + return "The " + emp + " has failed to stand the test of time!"; + } + + public double GetProgress(Empire emp) + { + if (emp.IsDefeated) + return 0; + return (double)(Galaxy.Current.TurnNumber - 1) / (double)Turns; + } + + public string GetVictoryMessage(Empire emp) + { + return "The " + emp + " has stood the test of time! All hail " + emp.LeaderName + ", leader of a great empire!"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/VictoryConditions/TechnologyVictoryCondition.cs b/FrEee/Objects/VictoryConditions/TechnologyVictoryCondition.cs similarity index 88% rename from FrEee/Game/Objects/VictoryConditions/TechnologyVictoryCondition.cs rename to FrEee/Objects/VictoryConditions/TechnologyVictoryCondition.cs index 608388cd4..13f8d476e 100644 --- a/FrEee/Game/Objects/VictoryConditions/TechnologyVictoryCondition.cs +++ b/FrEee/Objects/VictoryConditions/TechnologyVictoryCondition.cs @@ -1,41 +1,41 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Modding; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.VictoryConditions -{ - /// - /// Research a specified percentage of all non-racial non-unique tech levels. - /// - public class TechnologyVictoryCondition : IVictoryCondition - { - public TechnologyVictoryCondition(int percentage) - { - Percentage = percentage; - } - - /// - /// The percentage needed to achieve. - /// - public int Percentage { get; set; } - - public string GetDefeatMessage(Empire emp, IEnumerable winners) - { - return "The " + emp + " has failed to keep up with the latest technology! The following empires have achieved a technology victory: " + string.Join(", ", winners.Select(e => e.ToString()).ToArray()) + "."; - } - - public double GetProgress(Empire emp) - { - if (emp.IsDefeated) - return 0; - return (double)emp.ResearchedTechnologies.Where(t => !t.Key.IsRacial && !t.Key.IsUnique).Sum(t => t.Value) / (double)Mod.Current.Technologies.Where(t => !t.IsRacial && !t.IsUnique).Sum(t => t.MaximumLevel); - } - - public string GetVictoryMessage(Empire emp) - { - return "The " + emp + " has become a technological powerhouse! All hail " + emp.LeaderName + ", leader of the most advanced empire in the galaxy!"; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Modding; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.VictoryConditions +{ + /// + /// Research a specified percentage of all non-racial non-unique tech levels. + /// + public class TechnologyVictoryCondition : IVictoryCondition + { + public TechnologyVictoryCondition(int percentage) + { + Percentage = percentage; + } + + /// + /// The percentage needed to achieve. + /// + public int Percentage { get; set; } + + public string GetDefeatMessage(Empire emp, IEnumerable winners) + { + return "The " + emp + " has failed to keep up with the latest technology! The following empires have achieved a technology victory: " + string.Join(", ", winners.Select(e => e.ToString()).ToArray()) + "."; + } + + public double GetProgress(Empire emp) + { + if (emp.IsDefeated) + return 0; + return (double)emp.ResearchedTechnologies.Where(t => !t.Key.IsRacial && !t.Key.IsUnique).Sum(t => t.Value) / (double)Mod.Current.Technologies.Where(t => !t.IsRacial && !t.IsUnique).Sum(t => t.MaximumLevel); + } + + public string GetVictoryMessage(Empire emp) + { + return "The " + emp + " has become a technological powerhouse! All hail " + emp.LeaderName + ", leader of the most advanced empire in the galaxy!"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Objects/VictoryConditions/TotalEliminationVictoryCondition.cs b/FrEee/Objects/VictoryConditions/TotalEliminationVictoryCondition.cs similarity index 82% rename from FrEee/Game/Objects/VictoryConditions/TotalEliminationVictoryCondition.cs rename to FrEee/Objects/VictoryConditions/TotalEliminationVictoryCondition.cs index 898206abd..b515d1f2d 100644 --- a/FrEee/Game/Objects/VictoryConditions/TotalEliminationVictoryCondition.cs +++ b/FrEee/Objects/VictoryConditions/TotalEliminationVictoryCondition.cs @@ -1,33 +1,33 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Objects.VictoryConditions -{ - /// - /// Eliminate all other empires, major or minor. - /// - public class TotalEliminationVictoryCondition : IVictoryCondition - { - public string GetDefeatMessage(Empire emp, IEnumerable winners) - { - return "The " + emp + " is defeated! " + winners.Single() + " has conquered the galaxy!"; - } - - public double GetProgress(Empire emp) - { - if (emp.IsDefeated) - return 0; - if (Galaxy.Current.Empires.Count == 1) - return 1; - return (double)Galaxy.Current.Empires.Where(e => e.IsDefeated).Count() / ((double)Galaxy.Current.Empires.Count - 1); - } - - public string GetVictoryMessage(Empire emp) - { - return "The " + emp + " has eliminated all opposition and conquered the galaxy! All hail " + emp.LeaderName + ", ruler of the cosmos!"; - } - } +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Objects.VictoryConditions +{ + /// + /// Eliminate all other empires, major or minor. + /// + public class TotalEliminationVictoryCondition : IVictoryCondition + { + public string GetDefeatMessage(Empire emp, IEnumerable winners) + { + return "The " + emp + " is defeated! " + winners.Single() + " has conquered the galaxy!"; + } + + public double GetProgress(Empire emp) + { + if (emp.IsDefeated) + return 0; + if (Galaxy.Current.Empires.Count == 1) + return 1; + return (double)Galaxy.Current.Empires.Where(e => e.IsDefeated).Count() / ((double)Galaxy.Current.Empires.Count - 1); + } + + public string GetVictoryMessage(Empire emp) + { + return "The " + emp + " has eliminated all opposition and conquered the galaxy! All hail " + emp.LeaderName + ", ruler of the cosmos!"; + } + } } \ No newline at end of file diff --git a/FrEee/Game/Processes/TurnProcessor.cs b/FrEee/Processes/TurnProcessor.cs similarity index 98% rename from FrEee/Game/Processes/TurnProcessor.cs rename to FrEee/Processes/TurnProcessor.cs index 5dafd56f9..d17cc4cd1 100644 --- a/FrEee/Game/Processes/TurnProcessor.cs +++ b/FrEee/Processes/TurnProcessor.cs @@ -3,21 +3,21 @@ using System.Linq; using System.Text; using System.Threading.Tasks; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization.Diplomacy.Clauses; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat.Grid; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.LogMessages; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Objects.VictoryConditions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization.Diplomacy.Clauses; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat.Grid; +using FrEee.Objects.Combat; +using FrEee.Objects.LogMessages; +using FrEee.Objects.Space; +using FrEee.Objects.Vehicles; +using FrEee.Objects.VictoryConditions; using FrEee.Modding; -using FrEee.Utility.Extensions; -using FrEee.Utility; -using FrEee.Game.Enumerations; +using FrEee.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Enumerations; -namespace FrEee.Game.Processes +namespace FrEee.Processes { /// /// Processes turns. diff --git a/FrEee/Utility/DataReference.cs b/FrEee/Serialization/DataReference.cs similarity index 90% rename from FrEee/Utility/DataReference.cs rename to FrEee/Serialization/DataReference.cs index 52aa90c1c..952eeda8e 100644 --- a/FrEee/Utility/DataReference.cs +++ b/FrEee/Serialization/DataReference.cs @@ -1,112 +1,112 @@ -using FrEee.Game.Interfaces; -using FrEee.Utility.Extensions; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; - -namespace FrEee.Utility -{ - [Serializable] - public class DataReference : IDataReference, IReference - { - public DataReference() - { - Context = new ObjectGraphContext(); - } - - public DataReference(ObjectGraphContext ctx, T t = default(T)) - { - Context = ctx; - Value = t; - } - - public DataReference(ObjectGraphContext ctx, int id = -1) - { - Context = ctx; - ID = id; - } - - [JsonIgnore] - [field: NonSerialized] - public ObjectGraphContext Context { get; set; } - - public string Data - { - get; set; - } - - public bool HasValue - { - get - { - var maxid = Context.KnownObjects[typeof(T)].Count - 1; - return ID <= maxid; - } - } - - [JsonIgnore] - public int ID - { - get - { - return int.Parse(Data); - } - set - { - Data = value.ToString(); - } - } - - [JsonIgnore] - public T Value - { - get - { - if (Context == null) - Context = new ObjectGraphContext(); - var kobjs = Context.KnownObjects[typeof(T)]; - if (kobjs == null) - kobjs = Context.KnownObjects[typeof(T)] = new List(); - while (kobjs.Count <= ID) - { - var o = (T)typeof(T).Instantiate(); - Context.Add(o); - // TODO - populate data in object somehow - } - return (T)kobjs[ID]; - } - - set - { - if (Context.GetID(value) == null) - ID = Context.Add(value); - } - } - - object IData.Value - { - get - { - return Value; - } - } - - public static implicit operator T(DataReference reference) - { - return reference.Value; - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - // nothing to do here, this is just used for serialization and such - } - - // can't implicitly convert objects to references because we need a object graph context - } - - public interface IDataReference : IData - { - ObjectGraphContext Context { get; set; } - int ID { get; set; } - } -} \ No newline at end of file +using FrEee.Interfaces; +using FrEee.Extensions; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; + +namespace FrEee.Serialization +{ + [Serializable] + public class DataReference : IDataReference, IReference + { + public DataReference() + { + Context = new ObjectGraphContext(); + } + + public DataReference(ObjectGraphContext ctx, T t = default(T)) + { + Context = ctx; + Value = t; + } + + public DataReference(ObjectGraphContext ctx, int id = -1) + { + Context = ctx; + ID = id; + } + + [JsonIgnore] + [field: NonSerialized] + public ObjectGraphContext Context { get; set; } + + public string Data + { + get; set; + } + + public bool HasValue + { + get + { + var maxid = Context.KnownObjects[typeof(T)].Count - 1; + return ID <= maxid; + } + } + + [JsonIgnore] + public int ID + { + get + { + return int.Parse(Data); + } + set + { + Data = value.ToString(); + } + } + + [JsonIgnore] + public T Value + { + get + { + if (Context == null) + Context = new ObjectGraphContext(); + var kobjs = Context.KnownObjects[typeof(T)]; + if (kobjs == null) + kobjs = Context.KnownObjects[typeof(T)] = new List(); + while (kobjs.Count <= ID) + { + var o = (T)typeof(T).Instantiate(); + Context.Add(o); + // TODO - populate data in object somehow + } + return (T)kobjs[ID]; + } + + set + { + if (Context.GetID(value) == null) + ID = Context.Add(value); + } + } + + object IData.Value + { + get + { + return Value; + } + } + + public static implicit operator T(DataReference reference) + { + return reference.Value; + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + // nothing to do here, this is just used for serialization and such + } + + // can't implicitly convert objects to references because we need a object graph context + } + + public interface IDataReference : IData + { + ObjectGraphContext Context { get; set; } + int ID { get; set; } + } +} diff --git a/FrEee/Utility/DataScalar.cs b/FrEee/Serialization/DataScalar.cs similarity index 90% rename from FrEee/Utility/DataScalar.cs rename to FrEee/Serialization/DataScalar.cs index 4c3292033..a84dddb90 100644 --- a/FrEee/Utility/DataScalar.cs +++ b/FrEee/Serialization/DataScalar.cs @@ -1,65 +1,66 @@ -using FrEee.Utility.Extensions; -using Newtonsoft.Json; -using System; -using System.Globalization; - -namespace FrEee.Utility -{ - public static class DataScalar - { - public static IDataScalar Create(T o) - { - if (o == null) - return null; - var scalarType = typeof(DataScalar<>).MakeGenericType(o.GetType()); - var scalar = scalarType.Instantiate(o); - return (IDataScalar)scalar; - } - } - - /// - /// A scalar which can be converted easily to and from a string. - /// - /// - [Serializable] - public class DataScalar : IDataScalar - { - public DataScalar(T value = default(T)) - { - Value = value; - } - - public string Data - { - get - { - return Type.Name + ":" + Convert.ToString(Value, CultureInfo.InvariantCulture); - } - set - { - var data = value.Substring(value.IndexOf(":") + 1); - if (typeof(T).IsEnum) - Value = (T)Enum.Parse(typeof(T), data); - else - Value = (T)Convert.ChangeType(data, typeof(T), CultureInfo.InvariantCulture); - } - } - - [JsonIgnore] - public T Value { get; set; } - - object IData.Value { get { return Value; } } - - private SafeType Type - { - get - { - return new SafeType(typeof(T)); - } - } - } - - public interface IDataScalar : IData - { - } -} \ No newline at end of file +using FrEee.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using Newtonsoft.Json; +using System; +using System.Globalization; + +namespace FrEee.Serialization +{ + public static class DataScalar + { + public static IDataScalar Create(T o) + { + if (o == null) + return null; + var scalarType = typeof(DataScalar<>).MakeGenericType(o.GetType()); + var scalar = scalarType.Instantiate(o); + return (IDataScalar)scalar; + } + } + + /// + /// A scalar which can be converted easily to and from a string. + /// + /// + [Serializable] + public class DataScalar : IDataScalar + { + public DataScalar(T value = default(T)) + { + Value = value; + } + + public string Data + { + get + { + return Type.Name + ":" + Convert.ToString(Value, CultureInfo.InvariantCulture); + } + set + { + var data = value.Substring(value.IndexOf(":") + 1); + if (typeof(T).IsEnum) + Value = (T)Enum.Parse(typeof(T), data); + else + Value = (T)Convert.ChangeType(data, typeof(T), CultureInfo.InvariantCulture); + } + } + + [JsonIgnore] + public T Value { get; set; } + + object IData.Value { get { return Value; } } + + private SafeType Type + { + get + { + return new SafeType(typeof(T)); + } + } + } + + public interface IDataScalar : IData + { + } +} diff --git a/FrEee/Utility/GalaxyReference.cs b/FrEee/Serialization/GalaxyReference.cs similarity index 93% rename from FrEee/Utility/GalaxyReference.cs rename to FrEee/Serialization/GalaxyReference.cs index 75675717d..84d7ac9e7 100644 --- a/FrEee/Utility/GalaxyReference.cs +++ b/FrEee/Serialization/GalaxyReference.cs @@ -1,184 +1,185 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; - -namespace FrEee.Utility -{ - /// - /// A lightweight reference to some object in the current galaxy. - /// Can be passed around on the network as a surrogate for said object. - /// This class should be used when referencing a server side object from the client. - /// It is not necessary to use GalaxyReference when entirely within either the client or the server. - /// - /// - [Serializable] - public class GalaxyReference : IReference, IPromotable - where T : IReferrable - { - - /// - /// Either will create a new Galaxy Reference with the given id, or return null. - /// Useful to allow a client to store an ID locally for reference, when the server might destroy said ID. - /// - /// - /// - public static GalaxyReference GetGalaxyReference(long id) - { - if (Galaxy.Current.referrables.ContainsKey(id)) - return new GalaxyReference(id); - - return null; - } - - public GalaxyReference() - { - InitializeCache(); - } - - public GalaxyReference(T t) - : this() - { - if (t is IReferrable) - { - var r = (IReferrable)t; - if (Galaxy.Current == null) - throw new ReferenceException("Can't create a reference to an IReferrable without a galaxy."); - else if (t == null) - ID = 0; - else if (r.ID > 0) - ID = r.ID; - else - ID = Galaxy.Current.AssignID(r); - if (!HasValue) - { - Galaxy.Current.referrables[r.ID] = r; - cache = null; // reset cache - if (!HasValue) - throw new ArgumentException("{0} does not exist in the current galaxy so it cannot be referenced.".F(t)); - } - } - else - { - value = t; - } - } - - public GalaxyReference(long id) - : this() - { - if (Galaxy.Current == null) - throw new ReferenceException("Can't create a reference to an IReferrable without a galaxy."); - else if (!Galaxy.Current.referrables.ContainsKey(id)) - throw new IndexOutOfRangeException($"The id of {id} is not currently a valid reference"); - else if (Galaxy.Current.referrables[id] is T) - ID = id; - else - throw new Exception("Object with ID " + id + " is not a " + typeof(T) + "."); - } - - private void InitializeCache() - { - cache = new ClientSideCache(() => - { - if (ID <= 0) - return value; - var obj = (T)Galaxy.Current.GetReferrable(ID); - if (obj == null) - return default(T); - /*if (obj is IReferrable && (obj as IReferrable).IsDisposed) - return default(T);*/ - return obj; - } - ); - } - - /// - /// Does the reference have a valid value? - /// - public bool HasValue => Value != null; - - public long ID { get; internal set; } - - /// - /// Resolves the reference. - /// - /// - public T Value - { - get - { - if (cache == null) - InitializeCache(); - return cache.Value; - } - } - - [field: NonSerialized] - private T value { get; set; } - - [NonSerialized] - private ClientSideCache cache; - - public static implicit operator GalaxyReference(T t) - { - if (t == null) - return null; - return new GalaxyReference(t); - } - - public static implicit operator T(GalaxyReference r) - { - if (r == null) - return default(T); - return r.Value; - } - - public static bool operator !=(GalaxyReference r1, GalaxyReference r2) - { - return !(r1 == r2); - } - - public static bool operator ==(GalaxyReference r1, GalaxyReference r2) - { - if (r1.IsNull() && r2.IsNull()) - return true; - if (r1.IsNull() || r2.IsNull()) - return false; - return r1.ID == r2.ID; - } - - public override bool Equals(object obj) - { - // TODO - upgrade equals to use "as" operator - if (obj is GalaxyReference) - return this == (GalaxyReference)obj; - return false; - } - - public override int GetHashCode() - { - return ID.GetHashCode(); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - if (idmap.ContainsKey(ID)) - ID = idmap[ID]; - if (HasValue && Value is IPromotable) - ((IPromotable)Value).ReplaceClientIDs(idmap, done); - } - } - - public override string ToString() - { - return "ID=" + ID + ", Value=" + Value; - } - } -} \ No newline at end of file +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Serialization +{ + /// + /// A lightweight reference to some object in the current galaxy. + /// Can be passed around on the network as a surrogate for said object. + /// This class should be used when referencing a server side object from the client. + /// It is not necessary to use GalaxyReference when entirely within either the client or the server. + /// + /// + [Serializable] + public class GalaxyReference : IReference, IPromotable + where T : IReferrable + { + + /// + /// Either will create a new Galaxy Reference with the given id, or return null. + /// Useful to allow a client to store an ID locally for reference, when the server might destroy said ID. + /// + /// + /// + public static GalaxyReference GetGalaxyReference(long id) + { + if (Galaxy.Current.referrables.ContainsKey(id)) + return new GalaxyReference(id); + + return null; + } + + public GalaxyReference() + { + InitializeCache(); + } + + public GalaxyReference(T t) + : this() + { + if (t is IReferrable) + { + var r = (IReferrable)t; + if (Galaxy.Current == null) + throw new ReferenceException("Can't create a reference to an IReferrable without a galaxy."); + else if (t == null) + ID = 0; + else if (r.ID > 0) + ID = r.ID; + else + ID = Galaxy.Current.AssignID(r); + if (!HasValue) + { + Galaxy.Current.referrables[r.ID] = r; + cache = null; // reset cache + if (!HasValue) + throw new ArgumentException("{0} does not exist in the current galaxy so it cannot be referenced.".F(t)); + } + } + else + { + value = t; + } + } + + public GalaxyReference(long id) + : this() + { + if (Galaxy.Current == null) + throw new ReferenceException("Can't create a reference to an IReferrable without a galaxy."); + else if (!Galaxy.Current.referrables.ContainsKey(id)) + throw new IndexOutOfRangeException($"The id of {id} is not currently a valid reference"); + else if (Galaxy.Current.referrables[id] is T) + ID = id; + else + throw new Exception("Object with ID " + id + " is not a " + typeof(T) + "."); + } + + private void InitializeCache() + { + cache = new ClientSideCache(() => + { + if (ID <= 0) + return value; + var obj = (T)Galaxy.Current.GetReferrable(ID); + if (obj == null) + return default(T); + /*if (obj is IReferrable && (obj as IReferrable).IsDisposed) + return default(T);*/ + return obj; + } + ); + } + + /// + /// Does the reference have a valid value? + /// + public bool HasValue => Value != null; + + public long ID { get; internal set; } + + /// + /// Resolves the reference. + /// + /// + public T Value + { + get + { + if (cache == null) + InitializeCache(); + return cache.Value; + } + } + + [field: NonSerialized] + private T value { get; set; } + + [NonSerialized] + private ClientSideCache cache; + + public static implicit operator GalaxyReference(T t) + { + if (t == null) + return null; + return new GalaxyReference(t); + } + + public static implicit operator T(GalaxyReference r) + { + if (r == null) + return default(T); + return r.Value; + } + + public static bool operator !=(GalaxyReference r1, GalaxyReference r2) + { + return !(r1 == r2); + } + + public static bool operator ==(GalaxyReference r1, GalaxyReference r2) + { + if (r1.IsNull() && r2.IsNull()) + return true; + if (r1.IsNull() || r2.IsNull()) + return false; + return r1.ID == r2.ID; + } + + public override bool Equals(object obj) + { + // TODO - upgrade equals to use "as" operator + if (obj is GalaxyReference) + return this == (GalaxyReference)obj; + return false; + } + + public override int GetHashCode() + { + return ID.GetHashCode(); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + if (idmap.ContainsKey(ID)) + ID = idmap[ID]; + if (HasValue && Value is IPromotable) + ((IPromotable)Value).ReplaceClientIDs(idmap, done); + } + } + + public override string ToString() + { + return "ID=" + ID + ", Value=" + Value; + } + } +} diff --git a/FrEee/Utility/IData.cs b/FrEee/Serialization/IData.cs similarity index 81% rename from FrEee/Utility/IData.cs rename to FrEee/Serialization/IData.cs index 7fbfb9fdd..f7c12f162 100644 --- a/FrEee/Utility/IData.cs +++ b/FrEee/Serialization/IData.cs @@ -1,18 +1,18 @@ -using Newtonsoft.Json; - -namespace FrEee.Utility -{ - /// - /// Either a data object, or a scalar. - /// - public interface IData - { - /// - /// The data value, as a string which can be used to find the object or parse into the scalar. - /// - string Data { get; set; } - - [JsonIgnore] - object Value { get; } - } -} \ No newline at end of file +using Newtonsoft.Json; + +namespace FrEee.Serialization +{ + /// + /// Either a data object, or a scalar. + /// + public interface IData + { + /// + /// The data value, as a string which can be used to find the object or parse into the scalar. + /// + string Data { get; set; } + + [JsonIgnore] + object Value { get; } + } +} diff --git a/FrEee/Utility/IDataObject.cs b/FrEee/Serialization/IDataObject.cs similarity index 92% rename from FrEee/Utility/IDataObject.cs rename to FrEee/Serialization/IDataObject.cs index bad16be57..c451c609f 100644 --- a/FrEee/Utility/IDataObject.cs +++ b/FrEee/Serialization/IDataObject.cs @@ -1,26 +1,28 @@ -namespace FrEee.Utility -{ - /// - /// Used for abstract classes that want to define serialization data without requiring inherited classes use said data. - /// - public interface IAbstractDataObject - { - /// - /// When retreived, pulls in any data needed to reconstitute this object. - /// When set, reconstitutes the object from the data being assigned. - /// - [DoNotCopy(false)] - SafeDictionary Data { get; set; } - } - - /// - /// Something which can get data about itself and reconstitute itself from said data. - /// It is probably best to implement this interface only on classes and not on interfaces, - /// so as to avoid forcing class authors to implement this interface if they don't want to. - /// As for abstract classes, you can use IAbstractDataObject to define base class data without - /// requiring the child class define its own data. - /// - public interface IDataObject : IAbstractDataObject - { - } -} \ No newline at end of file +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Serialization +{ + /// + /// Used for abstract classes that want to define serialization data without requiring inherited classes use said data. + /// + public interface IAbstractDataObject + { + /// + /// When retreived, pulls in any data needed to reconstitute this object. + /// When set, reconstitutes the object from the data being assigned. + /// + [DoNotCopy(false)] + SafeDictionary Data { get; set; } + } + + /// + /// Something which can get data about itself and reconstitute itself from said data. + /// It is probably best to implement this interface only on classes and not on interfaces, + /// so as to avoid forcing class authors to implement this interface if they don't want to. + /// As for abstract classes, you can use IAbstractDataObject to define base class data without + /// requiring the child class define its own data. + /// + public interface IDataObject : IAbstractDataObject + { + } +} diff --git a/FrEee/Utility/JsonContractResolver.cs b/FrEee/Serialization/JsonContractResolver.cs similarity index 92% rename from FrEee/Utility/JsonContractResolver.cs rename to FrEee/Serialization/JsonContractResolver.cs index d08ae72c2..f3b0a8743 100644 --- a/FrEee/Utility/JsonContractResolver.cs +++ b/FrEee/Serialization/JsonContractResolver.cs @@ -1,4 +1,4 @@ -using Newtonsoft.Json; +using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using System; using System.Collections.Generic; @@ -7,7 +7,7 @@ using System.Text; using System.Threading.Tasks; -namespace FrEee.Utility +namespace FrEee.Serialization { public class JsonContractResolver : DefaultContractResolver { diff --git a/FrEee/Utility/JsonSerializer.cs b/FrEee/Serialization/JsonSerializer.cs similarity index 95% rename from FrEee/Utility/JsonSerializer.cs rename to FrEee/Serialization/JsonSerializer.cs index e89ce8810..413ed14de 100644 --- a/FrEee/Utility/JsonSerializer.cs +++ b/FrEee/Serialization/JsonSerializer.cs @@ -1,120 +1,120 @@ -using FrEee.Utility.Extensions; -using Newtonsoft.Json; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Utility -{ - public class JsonSerializer - { - static JsonSerializer() - { - JsonConvert.DefaultSettings = () => new JsonSerializerSettings - { - ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor, - Formatting = Formatting.Indented, - MissingMemberHandling = MissingMemberHandling.Ignore, - ObjectCreationHandling = ObjectCreationHandling.Auto, - TypeNameHandling = TypeNameHandling.All, - TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple, - ContractResolver = new JsonContractResolver() - }; - } - - public object DeserializeFromString(string s) - { - var list = JsonConvert.DeserializeObject>(s); - if (list.Count == 0) - return null; - var first = list[0]; - if (first == null) - return null; - // TODO - make IData and ISimpleDataObject implement a common interface - if (first is ISimpleDataObject) - { - var f = first as ISimpleDataObject; - foreach (var item in list) - { - if (item is ISimpleDataObject) - { - var dobj = item as ISimpleDataObject; - dobj.Context = f.Context; - foreach (var r in dobj.SimpleData.Values.OfType()) - r.Context = f.Context; - } - if (item is IData) - f.Context.Add((item as IData).Value); - } - } - foreach (var item in list.OfType()) - item.InitializeValue(); - if (first is ISimpleDataObject) - return (first as ISimpleDataObject).Value; - if (first is IData) - return (first as IData).Value; - return first; - } - - public string SerializeToString(object o) - { - var ctx = new ObjectGraphContext(); - var kos = new List(); - var parser = new ObjectGraphParser(); - if (o == null) - { - // do nothing - } - else if (o.GetType().IsScalar()) - kos.Add(DataScalar.Create(o)); - else - { - Action Parser_StartObject = x => - { - if (!x.GetType().IsScalar()) - { - var dobj = SimpleDataObject.Create(x, ctx); - kos.Add(dobj); - } - }; - parser.StartObject += new ObjectGraphParser.ObjectDelegate(Parser_StartObject); - parser.Parse(o); - } - foreach (var dobj in kos.OfType()) - dobj.InitializeData(ctx); - return JsonConvert.SerializeObject(kos); - } - - - static JsonSerializerSettings SimpleConverterSettings = new JsonSerializerSettings - { - ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor, - Formatting = Formatting.Indented, - MissingMemberHandling = MissingMemberHandling.Ignore, - ObjectCreationHandling = ObjectCreationHandling.Auto, - TypeNameHandling = TypeNameHandling.None, - TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple, - ContractResolver = new JsonContractResolver() - }; - - /// - /// Simple Json serializer access. Use this for Script Json serialization. - /// - /// - /// - public static string SerializeObject(object obj) - { - return JsonConvert.SerializeObject(obj,SimpleConverterSettings); - } - /// - /// Simple json deserializer access. Use this for Script Json serialization. - /// - /// - /// - /// - public static T DeserializeObject(string json) - { - return JsonConvert.DeserializeObject(json, SimpleConverterSettings); - } - } -} \ No newline at end of file +using FrEee.Extensions; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Serialization +{ + public class JsonSerializer + { + static JsonSerializer() + { + JsonConvert.DefaultSettings = () => new JsonSerializerSettings + { + ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor, + Formatting = Formatting.Indented, + MissingMemberHandling = MissingMemberHandling.Ignore, + ObjectCreationHandling = ObjectCreationHandling.Auto, + TypeNameHandling = TypeNameHandling.All, + TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple, + ContractResolver = new JsonContractResolver() + }; + } + + public object DeserializeFromString(string s) + { + var list = JsonConvert.DeserializeObject>(s); + if (list.Count == 0) + return null; + var first = list[0]; + if (first == null) + return null; + // TODO - make IData and ISimpleDataObject implement a common interface + if (first is ISimpleDataObject) + { + var f = first as ISimpleDataObject; + foreach (var item in list) + { + if (item is ISimpleDataObject) + { + var dobj = item as ISimpleDataObject; + dobj.Context = f.Context; + foreach (var r in dobj.SimpleData.Values.OfType()) + r.Context = f.Context; + } + if (item is IData) + f.Context.Add((item as IData).Value); + } + } + foreach (var item in list.OfType()) + item.InitializeValue(); + if (first is ISimpleDataObject) + return (first as ISimpleDataObject).Value; + if (first is IData) + return (first as IData).Value; + return first; + } + + public string SerializeToString(object o) + { + var ctx = new ObjectGraphContext(); + var kos = new List(); + var parser = new ObjectGraphParser(); + if (o == null) + { + // do nothing + } + else if (o.GetType().IsScalar()) + kos.Add(DataScalar.Create(o)); + else + { + Action Parser_StartObject = x => + { + if (!x.GetType().IsScalar()) + { + var dobj = SimpleDataObject.Create(x, ctx); + kos.Add(dobj); + } + }; + parser.StartObject += new ObjectGraphParser.ObjectDelegate(Parser_StartObject); + parser.Parse(o); + } + foreach (var dobj in kos.OfType()) + dobj.InitializeData(ctx); + return JsonConvert.SerializeObject(kos); + } + + + static JsonSerializerSettings SimpleConverterSettings = new JsonSerializerSettings + { + ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor, + Formatting = Formatting.Indented, + MissingMemberHandling = MissingMemberHandling.Ignore, + ObjectCreationHandling = ObjectCreationHandling.Auto, + TypeNameHandling = TypeNameHandling.None, + TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple, + ContractResolver = new JsonContractResolver() + }; + + /// + /// Simple Json serializer access. Use this for Script Json serialization. + /// + /// + /// + public static string SerializeObject(object obj) + { + return JsonConvert.SerializeObject(obj,SimpleConverterSettings); + } + /// + /// Simple json deserializer access. Use this for Script Json serialization. + /// + /// + /// + /// + public static T DeserializeObject(string json) + { + return JsonConvert.DeserializeObject(json, SimpleConverterSettings); + } + } +} diff --git a/FrEee/Utility/LegacySerializer.cs b/FrEee/Serialization/LegacySerializer.cs similarity index 96% rename from FrEee/Utility/LegacySerializer.cs rename to FrEee/Serialization/LegacySerializer.cs index 69ecf90f8..7bace6cb3 100644 --- a/FrEee/Utility/LegacySerializer.cs +++ b/FrEee/Serialization/LegacySerializer.cs @@ -1,979 +1,980 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility.Extensions; -using FrEee.Utility.Stringifiers; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; -using System.Runtime.Serialization; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; - -namespace FrEee.Utility -{ - internal static class LegacySerializer - { - private static IList propertySetterTasks = new List(); - - public static object Deserialize(Stream s, Type desiredType, ObjectGraphContext context = null, StringBuilder log = null) - { - var sr = new StreamReader(s); - var result = Deserialize(sr, desiredType, true, context, log); - sr.Close(); - return result; - } - - internal static T Deserialize(Stream s, ObjectGraphContext context = null) - { - var sr = new StreamReader(new BufferedStream(s)); - var result = Deserialize(sr, context); - return result; - } - - internal static T Deserialize(TextReader r, ObjectGraphContext context = null) - { - return (T)LegacySerializer.Deserialize(r, typeof(T), true, context); - } - - internal static void Serialize(T o, TextWriter w, ObjectGraphContext context = null, int tabLevel = 0) - { - if (o == null) - Serialize(o, w, typeof(T), context, tabLevel); - else - Serialize(o, w, o.GetType(), context, tabLevel); - } - - private static string GetShortTypeName(Type t) - { - return SafeType.GetShortTypeName(t); - } - - internal static void Serialize(object o, TextWriter w, Type desiredType, ObjectGraphContext context = null, int tabLevel = 0) - { - var tabs = new string('\t', tabLevel); - - // type checking! - if (o is Type) - throw new SerializationException("Cannot serialize objects of type System.Type."); - if (o != null && !desiredType.IsAssignableFrom(o.GetType())) - throw new SerializationException("Attempting to serialize " + o.GetType() + " as " + desiredType + "."); - - // set up our serialization context if we haven't already - if (context == null) - context = new ObjectGraphContext(); - - // write some tabs to improve readability - for (int i = 0; i < tabLevel; i++) - w.Write('\t'); - - // deal with nulls - if (o == null) - { - if (!ObjectGraphContext.KnownTypes.ContainsKey(GetShortTypeName(desiredType))) - { - ObjectGraphContext.KnownTypes.Add(GetShortTypeName(desiredType), desiredType); - ObjectGraphContext.AddProperties(desiredType); - } - w.Write(GetShortTypeName(desiredType)); - w.WriteLine(":n;"); - return; - } - - var type = o.GetType(); - - int? id = null; - if (!type.IsValueType && type != typeof(string) && !(StringifierLibrary.Instance.All?.Any(x => x.SupportedType == type) ?? false)) - id = context.GetID(o); - - if (!ObjectGraphContext.KnownTypes.ContainsKey(GetShortTypeName(type))) - { - // register type - ObjectGraphContext.KnownTypes.Add(GetShortTypeName(type), type); - ObjectGraphContext.AddProperties(type); - } - - // write the type name if it's not the same as the desired type - if (type == desiredType) - w.Write(":"); - else - w.WriteLine(GetShortTypeName(type) + ":"); - - if (id == null && !type.IsValueType && type != typeof(string) && !typeof(Array).IsAssignableFrom(type)) - { - // add to context - context.Add(o); - } - - // deal with refs - if (id != null) - { - // already seen this object, just write an ID - if (type != desiredType) - w.Write(tabs); - w.Write("i"); - w.Write(id); - - // write end object - w.WriteLine(";"); - - // done - return; - } - - // write some tabs - if (type != desiredType) - w.Write(tabs); - - // serialize the object - if (StringifierLibrary.Instance.All?.Any(x => x.SupportedType.IsAssignableFrom(type)) ?? false) - WriteStringifiedObject(o, w); - else if (type.IsPrimitive || typeof(Enum).IsAssignableFrom(type) || type.Name == "Nullable`1" || type == typeof(decimal)) - WritePrimitiveOrEnum(o, w); - else if (type == typeof(string)) - WriteString((string)o, w); - else if (type == typeof(Color)) - WriteColor((Color)o, w, tabLevel); - else if (typeof(Array).IsAssignableFrom(type)) - WriteArray((Array)o, w, context, tabLevel); - else if (typeof(IEnumerable).IsAssignableFrom(type) && type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 1 || m.GetParameters().Length == 2).Any() - // these types should not be serialized as normal dictionaries/sets! - && !typeof(IReferenceEnumerable).IsAssignableFrom(type)) - WriteCollection((IEnumerable)o, w, context, tabLevel); - else - WriteObject(o, w, context, tabLevel); - - // flush the stream if we're all done - if (tabLevel == 0) - w.Flush(); - } - - private static object Deserialize(TextReader r, Type desiredType, bool isRoot, ObjectGraphContext context = null, StringBuilder log = null) - { - // set up our serialization context if we haven't already - if (context == null) - context = new ObjectGraphContext(); - - if (isRoot) - { - // clear out our tasks - propertySetterTasks = new List(); - } - - // find data type - var typename = r.ReadTo(':', log).Trim(); - Type type; - if (string.IsNullOrWhiteSpace(typename)) - type = desiredType; - else - { - type = ObjectGraphContext.KnownTypes[typename]; - if (type == null) - { - try - { - // HACK - for old savegame compatibility - typename = Regex.Replace(typename, @"IOrder`1\[\[.*?\]\]", "IOrder"); - typename = Regex.Replace(typename, @"AddOrderCommand`1\[\[.*?\]\]", "AddOrderCommand"); - typename = Regex.Replace(typename, @"RemoveOrderCommand`1\[\[.*?\]\]", "RemoveOrderCommand"); - - type = new SafeType(typename).Type; - } - catch (Exception ex) - { - try - { - typename = typename.Replace("mscorlib", "System.Private.CoreLib"); // in case we have a legacy .NET Framework generated save - type = new SafeType(typename).Type; - } - catch (Exception ex2) - { - throw new SerializationException("Unknown data type '" + typename + "'. Perhaps this data was serialized with an incompatible version of the application?", ex2); - } - } - } - if (type == null) - throw new SerializationException("Unable to determine object type from type string \"" + typename + "\""); - } - - if (!ObjectGraphContext.KnownTypes.ContainsKey(GetShortTypeName(type))) - { - // add to known types - ObjectGraphContext.KnownTypes.Add(GetShortTypeName(type), type); - } - - // check type so we don't bother trying to create an object only to find it's the wrong type later - if (!desiredType.IsAssignableFrom(type)) - { -#if DEBUG - return null; -#endif -#if RELEASE - throw new SerializationException("Expected " + desiredType + ", got " + type + " when parsing new object."); -#endif - } - - // the object! - object o; - - if (StringifierLibrary.Instance.All?.Any(x => x.SupportedType.IsAssignableFrom(type)) ?? false) - { - o = DeserializeStringifiedObject(r, type, context, log); - } - else if (type.IsPrimitive || type == typeof(decimal)) - { - // parse primitive types - var val = r.ReadToEndOfLine(';', log); - o = Convert.ChangeType(val, type); - } - else if (type == typeof(string)) - { - // parse strings - o = DeserializeString(r, context, log); - } - else if (type == typeof(Color)) - { - // HACK - Color implmentation varies between .NET and Mono, so treat it as raw ARGB values - var argb = r.ReadToEndOfLine(';', log).Split(','); - if (argb.Length != 4) - throw new SerializationException("Colors must have 4 ARGB values."); - byte a, rv, g, b; - if (!byte.TryParse(argb[0], out a) || !byte.TryParse(argb[1], out rv) || !byte.TryParse(argb[2], out g) || !byte.TryParse(argb[3], out b)) - throw new SerializationException("Could not parse one of the ARGB values in \"" + argb + "\"."); - o = Color.FromArgb(a, rv, g, b); - } - else if (typeof(Enum).IsAssignableFrom(type)) - { - // parse enums - var val = r.ReadToEndOfLine(';', log); - o = val.ParseEnum(type); - } - else if (typeof(Array).IsAssignableFrom(type)) - { - // parse arrays - o = DeserializeArray(r, type, context, log); - } - else if (typeof(IEnumerable).IsAssignableFrom(type) && type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 1 || m.GetParameters().Length == 2).Any() && !typeof(IReferenceEnumerable).IsAssignableFrom(type)) - { - // parse collections - o = DeserializeCollection(r, type, context, log); - } - else - { - // parse objects - o = DeserializeObject(r, type, context, log); - } - - /*if (isRoot) - { - // wait for tasks to complete - Action awaitTask = async t => await t; - propertySetterTasks.RunTasks(awaitTask); - }*/ - - // return our new object - return o; - } - - private static Array DeserializeArray(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) - { - // arrays - Array o; - // read bounds or id number - var fin = r.Read(); - while (fin != 0 && char.IsWhiteSpace((char)fin)) - { - if (log != null) - log.Append((char)fin); - fin = r.Read(); - } - if (fin != 0 && log != null) - log.Append((char)fin); - if (fin == 'a') - { - var boundsStrs = r.ReadTo(':', log).Split(','); - if (boundsStrs.Length < 1) - throw new SerializationException("Arrays cannot have zero dimensions."); - - if (boundsStrs.Length == 1) - { - int min, max; - var bounds1Strs = boundsStrs[0].Split('_'); - if (!int.TryParse(bounds1Strs[0], out min)) - throw new SerializationException("Expected integer, got \"" + bounds1Strs[0] + "\" when parsing array bounds."); - if (!int.TryParse(bounds1Strs[1], out max)) - throw new SerializationException("Expected integer, got \"" + bounds1Strs[1] + "\" when parsing array bounds."); - // HACK - figure out how to set min and max bounds, in case it matters (VB?) - var array = Array.CreateInstance(type.GetElementType(), max - min + 1); - for (int i = min; i <= max; i++) - array.SetValue(Deserialize(r, type.GetElementType(), false, context, log), i); - o = array; - } - else if (boundsStrs.Length == 2) - { - int min1, max1, min2, max2; - var bounds1Strs = boundsStrs[0].Split('_'); - var bounds2Strs = boundsStrs[1].Split('_'); - if (!int.TryParse(bounds1Strs[0], out min1)) - throw new SerializationException("Expected integer, got \"" + bounds1Strs[0] + "\" when parsing array bounds."); - if (!int.TryParse(bounds1Strs[1], out max1)) - throw new SerializationException("Expected integer, got \"" + bounds1Strs[1] + "\" when parsing array bounds."); - if (!int.TryParse(bounds2Strs[0], out min2)) - throw new SerializationException("Expected integer, got \"" + bounds2Strs[0] + "\" when parsing array bounds."); - if (!int.TryParse(bounds2Strs[1], out max2)) - throw new SerializationException("Expected integer, got \"" + bounds2Strs[1] + "\" when parsing array bounds."); - // HACK - figure out how to set min and max bounds, in case it matters (VB?) - var array = Array.CreateInstance(type.GetElementType(), max1 - min1 + 1, max2 - min2 + 1); - for (int x = min1; x <= max1; x++) - { - for (int y = min2; y <= max2; y++) - array.SetValue(Deserialize(r, type.GetElementType(), false, context, log), x, y); - } - o = array; - context.Add(o); - } - else - throw new SerializationException("Arrays with more than two dimensions are not supported."); - - // clean up - ReadSemicolon(r, type, log); - } - else if (fin == 'i') - { - // ID - need to find known object - int id; - string s = r.ReadToEndOfLine(';', log); - if (!int.TryParse(s, out id)) - throw new SerializationException("Expected integer, got \"" + s + "\" when parsing object ID."); - - // do we have it? - if (!context.KnownObjects.ContainsKey(type) || context.KnownObjects[type].Count <= id) - throw new SerializationException("No known object of type " + type + " has an ID of " + id + "."); - - // found it! - o = (Array)context.KnownObjects[type][id]; - } - else if (fin == 'n') - { - // null object! - o = null; - - // clean up - ReadSemicolon(r, type, log); - } - else - throw new SerializationException("Expected 'a'/'i'/'n', got '" + (char)fin + "' when parsing " + type + "."); - return o; - } - - private static IEnumerable DeserializeDictionary(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) - { - IEnumerable o; - int size; - var sizeStr = r.ReadTo(':', log); - if (!int.TryParse(sizeStr, out size)) - throw new SerializationException("Expected integer, got \"" + sizeStr + "\" when parsing collection size."); - var coll = type.Instantiate(); - context.Add(coll); - var adder = type.GetMethods().Single(m => m.Name == "Add" && m.GetParameters().Length == 2); - Type itemType; - if (type.GetGenericArguments().Count() == 2) - itemType = typeof(KeyValuePair<,>).MakeGenericType(type.GetGenericArguments()); - else if (type == typeof(DynamicDictionary)) - itemType = typeof(KeyValuePair); - else - // HACK - Resources inherits from a dictionary type - itemType = typeof(KeyValuePair<,>).MakeGenericType(type.BaseType.GetGenericArguments()); - - var collParm = Expression.Parameter(typeof(object), "coll"); - var keyParm = Expression.Parameter(typeof(object), "key"); - var valParm = Expression.Parameter(typeof(object), "val"); - var keyprop = ObjectGraphContext.GetKnownProperties(itemType, true)["Key"]; - var valprop = ObjectGraphContext.GetKnownProperties(itemType, true)["Value"]; - Delegate lambdaAdder; - if (ObjectGraphContext.CollectionAdders[type] == null) - { - // lambda has not been created yet, so create it - ObjectGraphContext.CollectionAdders[type] = - Expression.Lambda(Expression.Call( - Expression.Convert(collParm, type), - adder, - Expression.Convert(keyParm, keyprop.PropertyType), - Expression.Convert(valParm, valprop.PropertyType) - ), collParm, keyParm, valParm).Compile(); - } - - // get lambda - lambdaAdder = ObjectGraphContext.CollectionAdders[type]; - - // load items and add them - for (int i = 0; i < size; i++) - { - var key = Deserialize(r, keyprop.PropertyType, false, context, log); - var val = Deserialize(r, valprop.PropertyType, false, context, log); - lambdaAdder.DynamicInvoke(coll, key, val); - } - - o = (IEnumerable)coll; - - // clean up - ReadSemicolon(r, type, log); - - return o; - } - - private static IEnumerable DeserializeList(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) - { - IEnumerable o; - int size; - var sizeStr = r.ReadTo(':', log); - if (!int.TryParse(sizeStr, out size)) - throw new SerializationException("Expected integer, got \"" + sizeStr + "\" when parsing collection size."); - var coll = Activator.CreateInstance(type); - context.Add(coll); - var adder = type.GetMethods().Single(m => m.Name == "Add" && m.GetParameters().Length == 1); - Type itemType; - if (typeof(DynamicDictionary).IsAssignableFrom(type)) - { - itemType = typeof(KeyValuePair); - } - else if (type.GetGenericArguments().Length == 2) - { - // HACK - assume it's a dictionary, no real way to test - itemType = typeof(KeyValuePair<,>).MakeGenericType(type.GetGenericArguments()); - } - else if (type.GetGenericArguments().Length == 1) - { - // HACK - assume it's a collection, no real way to test - itemType = type.GetGenericArguments()[0]; - } - else - { - // no generic type? probably a list of objects? - itemType = typeof(object); - } - var collParm = Expression.Parameter(type, "coll"); - var objParm = Expression.Parameter(itemType, "obj"); - Delegate lambdaAdder; - if (ObjectGraphContext.CollectionAdders[type] == null) - { - // lambda has not been created yet, so create it - try - { - ObjectGraphContext.CollectionAdders[type] = - Expression.Lambda(Expression.Call( - collParm, // the collection to add to - adder, // the add method to call - objParm), // the object to add - collParm, objParm).Compile(); - } - catch (Exception ex) - { - throw new SerializationException("Could not create lambda to add {0} items to {1}.".F(itemType, type), ex); - } - } - - // get lambda - lambdaAdder = ObjectGraphContext.CollectionAdders[type]; - - // load items and add them - for (int i = 0; i < size; i++) - { - var item = Deserialize(r, itemType, false, context, log); - lambdaAdder.DynamicInvoke(coll, item); - } - o = (IEnumerable)coll; - - // clean up - ReadSemicolon(r, type, log); - - return o; - } - - private static IEnumerable DeserializeCollection(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) - { - IEnumerable o = null; - // collections - // read size or id number - var fin = r.Read(); - while (fin != 0 && char.IsWhiteSpace((char)fin)) - { - if (log != null) - log.Append((char)fin); - fin = r.Read(); - } - if (fin != 0 && log != null) - log.Append((char)fin); - if (fin == 'c') - { - o = DeserializeList(r, type, context, log); - } - else if (fin == 'c') - { - o = DeserializeList(r, type, context, log); - } - else if (fin == 'd') - { - o = DeserializeDictionary(r, type, context, log); - } - else if (fin == 'i') - { - // ID - need to find known object - int id; - string s = r.ReadToEndOfLine(';', log); - if (!int.TryParse(s, out id)) - throw new SerializationException("Expected integer, got \"" + s + "\" when parsing object ID."); - - // do we have it? - if (!context.KnownObjects.ContainsKey(type) || context.KnownObjects[type].Count <= id) - throw new SerializationException("No known object of type " + type + " has an ID of " + id + "."); - - // found it! - o = (IEnumerable)context.KnownObjects[type][id]; - } - else if (fin == 'n') - { - // null object! - o = null; - - // clean up - ReadSemicolon(r, type, log); - } - else - throw new SerializationException("Expected 'c'/'d'/'i'/'n', got '" + (char)fin + "' when parsing " + type + "."); - return o; - } - - private static object DeserializeStringifiedObject(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) - { - object o; - // read tag to see if it's actually a stringified object - var fin = r.Read(); - while (fin != 0 && char.IsWhiteSpace((char)fin)) - { - if (log != null) - log.Append((char)fin); - fin = r.Read(); - } - if (fin != 0 && log != null) - log.Append((char)fin); - if (fin == 's') - { - IStringifier stringifier = null; - var t = type; - while (stringifier == null && t != null) - { - stringifier = StringifierLibrary.Instance.All.SingleOrDefault(x => x.SupportedType == t); - t = t.BaseType; - } - if (stringifier == null) - throw new Exception("Can't find stringifier to deserialize " + type); - var dummy = r.ReadTo(':', log); - var val = r.ReadToEndOfLine(';', log); - o = stringifier.Destringify(val); - } - else if (fin == 'p') - { - o = DeserializeObjectWithProperties(r, type, context, log); - } - else if (fin == 'i') - { - o = DeserializeObjectWithID(r, type, context, log); - } - else if (fin == 'n') - { - // null object! - o = null; - - // clean up - ReadSemicolon(r, type, log); - } - else if (fin == 'd') - { - o = DeserializeDictionary(r, type, context, log); - } - else if (fin == 'c') - { - o = DeserializeList(r, type, context, log); - } - else - throw new Exception("Unknown data tag " + fin + ", was expecting s/p/i/n/d/c."); - if (!context.KnownObjects.ContainsKey(type) || !context.KnownObjects[type].Contains(o)) - context.Add(o); - return o; - } - - private static object DeserializeObjectWithProperties(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) - { - // create object and add it to our context - var o = type.Instantiate(); - context.Add(o); - - // properties count - need to create object and populate properties - int count; - string s = r.ReadTo(':', log); - if (!int.TryParse(s, out count)) - throw new SerializationException("Expected integer, got \"" + s + "\" when parsing property count."); - - - var dict = new SafeDictionary(); - - // deserialize the properties - var props = ObjectGraphContext.GetKnownProperties(type, true); - for (int i = 0; i < count; i++) - { - var pname = r.ReadTo(':', log).Trim(); - if (type == typeof(Game.Objects.Civilization.Empire) && pname == "StoredResources") - { - - } - if (props.ContainsKey(pname)) - { - // TODO - get base class recursively, not just derived class and declaring type - var prop = type.GetProperty(pname, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) ?? props[pname]; // get concrete type property in case it has DoNotSerialize and the abstract type doesn't - if (prop != null) - { - if (prop.Name == "StarSystemNames") - { - - } - var data = Deserialize(r, prop.PropertyType, false, context, log); - if (prop.HasAttribute()) - prop.SetValue(o, data); // TODO - use cached reflection lambdas - if (!prop.HasAttribute()) - dict[pname] = data; - } - else - r.ReadToEndOfLine(';', log); // throw away this property, we don't need it - // if p is null or has do not serialize attribute, it must be data from an old version with different property names, so don't crash - } - } - - //propertySetterTasks.Add(Task.Factory.StartNew(() => - //{ - o.SetData(dict, context); - //})); - - // clean up - ReadSemicolon(r, type, log); - - return o; - } - - private static object DeserializeObjectWithID(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) - { - // ID - need to find known object - int id; - string s = r.ReadToEndOfLine(';', log); - if (!int.TryParse(s, out id)) - throw new SerializationException("Expected integer, got \"" + s + "\" when parsing object ID."); - - // do we have it? - if (!context.KnownObjects.ContainsKey(type) || context.KnownObjects[type].Count <= id) - throw new SerializationException("No known object of type " + type + " has an ID of " + id + "."); - - // found it! - return context.KnownObjects[type][id]; - } - - private static object DeserializeObject(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) - { - // read property count or id number - object o; - var fin = r.Read(); - while (fin != 0 && char.IsWhiteSpace((char)fin)) - { - if (log != null) - log.Append((char)fin); - fin = r.Read(); - } - if (fin != 0 && log != null) - log.Append((char)fin); - if (fin == 'p') - o = DeserializeObjectWithProperties(r, type, context, log); - else if (fin == 'i') - { - o = DeserializeObjectWithID(r, type, context, log); - } - else if (fin == 'n') - { - // null object! - o = null; - - // clean up - ReadSemicolon(r, type, log); - } - else - throw new SerializationException("Expected 'p'/'i'/'n', got '" + (char)fin + "' when parsing " + type + "."); - return o; - } - - private static string DeserializeString(TextReader r, ObjectGraphContext context, StringBuilder log) - { - string o; - bool foundRealSemicolon = false; - StringBuilder sb = new StringBuilder(); - int quotes = 0; - while (!foundRealSemicolon) - { - var ns = r.ReadToEndOfLine(';', log); - quotes += ns.Count(c => c == '"'); // TODO - don't count escaped quotes - sb.Append(ns); - if (!ns.EndsWith("\\") && quotes % 2 == 0) - foundRealSemicolon = true; - } - var s = sb.ToString(); - if (s == "n") - o = null; - else - { - o = s.Trim(); - if (o.StartsWith("\"")) - o = o.Substring(1); - if (o.EndsWith("\"")) - o = o.Substring(0, o.Length - 1); - o = o.Replace("\\\"", "\"").Replace("\\;", ";").Replace("\\\\", "\\"); - } - return o; - } - - private static int GetSerializationPriority(PropertyInfo p) - { - var atts = p.GetCustomAttributes(true).OfType(); - if (atts.Any()) - return atts.Min(att => att.Priority); - return int.MaxValue; - } - - private static void ReadSemicolon(TextReader r, Type type, StringBuilder log) - { - // read the semicolon at the end and any whitespace - int ender; - do - { - ender = r.Read(); - if (log != null) - log.Append((char)ender); - if (ender == 0 || ender != ';' && !char.IsWhiteSpace((char)ender)) - throw new SerializationException("Expected ';', got '" + (char)ender + "' at the end of " + type + "."); - } while (ender != ';'); - } - - private static void Serialize(T o, Stream s, ObjectGraphContext context = null, int tabLevel = 0) - { - var sw = new StreamWriter(new BufferedStream(s)); - Serialize(o, sw, context); - sw.Flush(); - } - - private static void WriteArray(Array array, TextWriter w, ObjectGraphContext context, int tabLevel) - { - var tabs = new string('\t', tabLevel); - - // arrays get size and elements listed out - var bounds = new List(); - for (var rank = 0; rank < array.Rank; rank++) - bounds.Add(array.GetLowerBound(rank) + "_" + array.GetUpperBound(rank)); - w.WriteLine("a" + string.Join(",", bounds.ToArray()) + ":" + tabs); - var type = array.GetType(); - var itemtype = type.GetElementType(); - if (array.Rank == 1) - { - foreach (var item in array) - Serialize(item, w, itemtype, context, tabLevel + 1); - } - else if (array.Rank == 2) - { - for (int x = array.GetLowerBound(0); x <= array.GetUpperBound(0); x++) - { - for (int y = array.GetLowerBound(1); y <= array.GetUpperBound(1); y++) - Serialize(array.GetValue(x, y), w, itemtype, context, tabLevel + 1); - } - } - else - throw new SerializationException("Arrays with more than 2 dimensions are not supported."); - - // write end object - for (int i = 0; i < tabLevel; i++) - w.Write('\t'); - w.WriteLine(";"); - } - - private static void WriteCollection(IEnumerable list, TextWriter w, ObjectGraphContext context, int tabLevel) - { - var tabs = new string('\t', tabLevel); - - // collections get size and elements listed out - Type itemType; - var type = list.GetType(); - bool isDict = false; - if (type.GetGenericArguments().Length == 2) - { - // HACK - assume it's a dictionary, no real way to test - itemType = typeof(KeyValuePair<,>).MakeGenericType(type.GetGenericArguments()); - w.WriteLine("d" + list.Cast().Count() + ":" + tabs); - isDict = true; - } - else if (type.BaseType.GetGenericArguments().Length == 2) - { - // HACK - Resources inherits from a dictionary type - itemType = typeof(KeyValuePair<,>).MakeGenericType(type.BaseType.GetGenericArguments()); - w.WriteLine("d" + list.Cast().Count() + ":" + tabs); - isDict = true; - } - else if (type == typeof(DynamicDictionary)) - { - itemType = typeof(KeyValuePair); - w.WriteLine("d" + list.Cast().Count() + ":" + tabs); - isDict = true; - } - else if (type.GetGenericArguments().Length == 1) - { - // HACK - assume it's a collection, no real way to test - itemType = type.GetGenericArguments()[0]; - w.WriteLine("c" + list.Cast().Count() + ":" + tabs); - } - else - { - // no generic type? probably a list of objects? - itemType = typeof(object); - w.WriteLine("c" + list.Cast().Count() + ":" + tabs); - } - foreach (var item in list) - { - if (isDict) - { - var keyprop = ObjectGraphContext.GetKnownProperties(itemType)["Key"]; - var valprop = ObjectGraphContext.GetKnownProperties(itemType)["Value"]; - Serialize(context.GetObjectProperty(item, keyprop), w, keyprop.PropertyType, context, tabLevel + 1); - Serialize(context.GetObjectProperty(item, valprop), w, valprop.PropertyType, context, tabLevel + 1); - } - else - Serialize(item, w, itemType, context, tabLevel + 1); - } - - // write end object - for (int i = 0; i < tabLevel; i++) - w.Write('\t'); - w.WriteLine(";"); - } - - private static void WriteColor(Color c, TextWriter w, int tabLevel) - { - // HACK - Mono's implmentation of Color is different from .NET's so we need to save just the ARGB values in a consistent format - w.Write(c.A); - w.Write(","); - w.Write(c.R); - w.Write(","); - w.Write(c.G); - w.Write(","); - w.Write(c.B); - w.WriteLine(";"); - } - - private static void WriteObject(object o, TextWriter w, ObjectGraphContext context, int tabLevel) - { - // serialize object type and field count - if (o is IDataObject) - { - // use data object code! :D - var type = o.GetType(); - var data = (o as IDataObject).Data; - w.WriteLine("p" + data.Count + ":"); - foreach (var kvp in data) - { - var pname = kvp.Key; - var val = kvp.Value; - var prop = ObjectGraphContext.GetKnownProperties(type)[pname]; - if (prop != null) - { - var ptype = prop.PropertyType; - WriteProperty(w, o, ptype, pname, val, context, tabLevel); - } - else - { - // TODO - if property doesn't exist, log a warning somewhere? - WriteProperty(w, o, typeof(object), pname, val, context, tabLevel); - } - } - } - else - { - // use reflection :( - var type = o.GetType(); - var props = ObjectGraphContext.GetKnownProperties(type).Values.Where(p => - p.HasAttribute() || // force serialization of property even if value is null/default? - !p.GetValue(o, null).SafeEquals(p.PropertyType.DefaultValue())); // property value is not null/default? - w.WriteLine("p" + props.Count() + ":"); - foreach (var p in props.OrderBy(p => GetSerializationPriority(p))) - WriteProperty(w, o, p.PropertyType, p.Name, context.GetObjectProperty(o, p), context, tabLevel); - } - - // write end object - for (int i = 0; i < tabLevel; i++) - w.Write('\t'); - w.WriteLine(";"); - } - - private static void WritePrimitiveOrEnum(object o, TextWriter w) - { - // just serialize the primitive type - w.Write(o); - - // write end object - w.WriteLine(";"); - } - - private static void WriteProperty(TextWriter w, object o, Type ptype, string pname, object val, ObjectGraphContext context, int tabLevel) - { - var tabs = new string('\t', tabLevel); - var moreTabs = new string('\t', tabLevel + 1); - - // serialize property name and value - try - { - w.Write(moreTabs); - w.Write(pname); - w.Write(":\n"); - Serialize(val, w, ptype, context, tabLevel + 2); - } - catch (Exception ex) - { - throw new SerializationException("Could not serialize property " + pname + " of " + o + " because the property accessor threw an exception: " + ex.Message, ex); - } - } - - private static void WriteString(string s, TextWriter w) - { - if (s == null) - w.Write("n"); - else - { - // quote strings and escape any backslashes and semicolons inside them - w.Write('"' + s.Replace("\\", "\\\\").Replace(";", "\\;").Replace("\"", "\\\"") + '"'); - } - - // write end object - w.WriteLine(";"); - } - - private static void WriteStringifiedObject(object o, TextWriter w) - { - IStringifier stringifier = null; - var t = o.GetType(); - while (stringifier == null && t != null) - { - stringifier = StringifierLibrary.Instance.All.SingleOrDefault(x => x.SupportedType == t); - t = t.BaseType; - } - if (stringifier == null) - throw new Exception("Can't find stringifier to deserialize " + o.GetType()); - w.WriteLine("s:" + stringifier.Stringify(o) + ";"); - } - } -} +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Extensions; +using FrEee.Serialization.Stringifiers; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Runtime.Serialization; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Serialization +{ + internal static class LegacySerializer + { + private static IList propertySetterTasks = new List(); + + public static object Deserialize(Stream s, Type desiredType, ObjectGraphContext context = null, StringBuilder log = null) + { + var sr = new StreamReader(s); + var result = Deserialize(sr, desiredType, true, context, log); + sr.Close(); + return result; + } + + internal static T Deserialize(Stream s, ObjectGraphContext context = null) + { + var sr = new StreamReader(new BufferedStream(s)); + var result = Deserialize(sr, context); + return result; + } + + internal static T Deserialize(TextReader r, ObjectGraphContext context = null) + { + return (T)LegacySerializer.Deserialize(r, typeof(T), true, context); + } + + internal static void Serialize(T o, TextWriter w, ObjectGraphContext context = null, int tabLevel = 0) + { + if (o == null) + Serialize(o, w, typeof(T), context, tabLevel); + else + Serialize(o, w, o.GetType(), context, tabLevel); + } + + private static string GetShortTypeName(Type t) + { + return SafeType.GetShortTypeName(t); + } + + internal static void Serialize(object o, TextWriter w, Type desiredType, ObjectGraphContext context = null, int tabLevel = 0) + { + var tabs = new string('\t', tabLevel); + + // type checking! + if (o is Type) + throw new SerializationException("Cannot serialize objects of type System.Type."); + if (o != null && !desiredType.IsAssignableFrom(o.GetType())) + throw new SerializationException("Attempting to serialize " + o.GetType() + " as " + desiredType + "."); + + // set up our serialization context if we haven't already + if (context == null) + context = new ObjectGraphContext(); + + // write some tabs to improve readability + for (int i = 0; i < tabLevel; i++) + w.Write('\t'); + + // deal with nulls + if (o == null) + { + if (!ObjectGraphContext.KnownTypes.ContainsKey(GetShortTypeName(desiredType))) + { + ObjectGraphContext.KnownTypes.Add(GetShortTypeName(desiredType), desiredType); + ObjectGraphContext.AddProperties(desiredType); + } + w.Write(GetShortTypeName(desiredType)); + w.WriteLine(":n;"); + return; + } + + var type = o.GetType(); + + int? id = null; + if (!type.IsValueType && type != typeof(string) && !(StringifierLibrary.Instance.All?.Any(x => x.SupportedType == type) ?? false)) + id = context.GetID(o); + + if (!ObjectGraphContext.KnownTypes.ContainsKey(GetShortTypeName(type))) + { + // register type + ObjectGraphContext.KnownTypes.Add(GetShortTypeName(type), type); + ObjectGraphContext.AddProperties(type); + } + + // write the type name if it's not the same as the desired type + if (type == desiredType) + w.Write(":"); + else + w.WriteLine(GetShortTypeName(type) + ":"); + + if (id == null && !type.IsValueType && type != typeof(string) && !typeof(Array).IsAssignableFrom(type)) + { + // add to context + context.Add(o); + } + + // deal with refs + if (id != null) + { + // already seen this object, just write an ID + if (type != desiredType) + w.Write(tabs); + w.Write("i"); + w.Write(id); + + // write end object + w.WriteLine(";"); + + // done + return; + } + + // write some tabs + if (type != desiredType) + w.Write(tabs); + + // serialize the object + if (StringifierLibrary.Instance.All?.Any(x => x.SupportedType.IsAssignableFrom(type)) ?? false) + WriteStringifiedObject(o, w); + else if (type.IsPrimitive || typeof(Enum).IsAssignableFrom(type) || type.Name == "Nullable`1" || type == typeof(decimal)) + WritePrimitiveOrEnum(o, w); + else if (type == typeof(string)) + WriteString((string)o, w); + else if (type == typeof(Color)) + WriteColor((Color)o, w, tabLevel); + else if (typeof(Array).IsAssignableFrom(type)) + WriteArray((Array)o, w, context, tabLevel); + else if (typeof(IEnumerable).IsAssignableFrom(type) && type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 1 || m.GetParameters().Length == 2).Any() + // these types should not be serialized as normal dictionaries/sets! + && !typeof(IReferenceEnumerable).IsAssignableFrom(type)) + WriteCollection((IEnumerable)o, w, context, tabLevel); + else + WriteObject(o, w, context, tabLevel); + + // flush the stream if we're all done + if (tabLevel == 0) + w.Flush(); + } + + private static object Deserialize(TextReader r, Type desiredType, bool isRoot, ObjectGraphContext context = null, StringBuilder log = null) + { + // set up our serialization context if we haven't already + if (context == null) + context = new ObjectGraphContext(); + + if (isRoot) + { + // clear out our tasks + propertySetterTasks = new List(); + } + + // find data type + var typename = r.ReadTo(':', log).Trim(); + Type type; + if (string.IsNullOrWhiteSpace(typename)) + type = desiredType; + else + { + type = ObjectGraphContext.KnownTypes[typename]; + if (type == null) + { + try + { + // HACK - for old savegame compatibility + typename = Regex.Replace(typename, @"IOrder`1\[\[.*?\]\]", "IOrder"); + typename = Regex.Replace(typename, @"AddOrderCommand`1\[\[.*?\]\]", "AddOrderCommand"); + typename = Regex.Replace(typename, @"RemoveOrderCommand`1\[\[.*?\]\]", "RemoveOrderCommand"); + + type = new SafeType(typename).Type; + } + catch (Exception ex) + { + try + { + typename = typename.Replace("mscorlib", "System.Private.CoreLib"); // in case we have a legacy .NET Framework generated save + type = new SafeType(typename).Type; + } + catch (Exception ex2) + { + throw new SerializationException("Unknown data type '" + typename + "'. Perhaps this data was serialized with an incompatible version of the application?", ex2); + } + } + } + if (type == null) + throw new SerializationException("Unable to determine object type from type string \"" + typename + "\""); + } + + if (!ObjectGraphContext.KnownTypes.ContainsKey(GetShortTypeName(type))) + { + // add to known types + ObjectGraphContext.KnownTypes.Add(GetShortTypeName(type), type); + } + + // check type so we don't bother trying to create an object only to find it's the wrong type later + if (!desiredType.IsAssignableFrom(type)) + { +#if DEBUG + return null; +#endif +#if RELEASE + throw new SerializationException("Expected " + desiredType + ", got " + type + " when parsing new object."); +#endif + } + + // the object! + object o; + + if (StringifierLibrary.Instance.All?.Any(x => x.SupportedType.IsAssignableFrom(type)) ?? false) + { + o = DeserializeStringifiedObject(r, type, context, log); + } + else if (type.IsPrimitive || type == typeof(decimal)) + { + // parse primitive types + var val = r.ReadToEndOfLine(';', log); + o = Convert.ChangeType(val, type); + } + else if (type == typeof(string)) + { + // parse strings + o = DeserializeString(r, context, log); + } + else if (type == typeof(Color)) + { + // HACK - Color implmentation varies between .NET and Mono, so treat it as raw ARGB values + var argb = r.ReadToEndOfLine(';', log).Split(','); + if (argb.Length != 4) + throw new SerializationException("Colors must have 4 ARGB values."); + byte a, rv, g, b; + if (!byte.TryParse(argb[0], out a) || !byte.TryParse(argb[1], out rv) || !byte.TryParse(argb[2], out g) || !byte.TryParse(argb[3], out b)) + throw new SerializationException("Could not parse one of the ARGB values in \"" + argb + "\"."); + o = Color.FromArgb(a, rv, g, b); + } + else if (typeof(Enum).IsAssignableFrom(type)) + { + // parse enums + var val = r.ReadToEndOfLine(';', log); + o = val.ParseEnum(type); + } + else if (typeof(Array).IsAssignableFrom(type)) + { + // parse arrays + o = DeserializeArray(r, type, context, log); + } + else if (typeof(IEnumerable).IsAssignableFrom(type) && type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 1 || m.GetParameters().Length == 2).Any() && !typeof(IReferenceEnumerable).IsAssignableFrom(type)) + { + // parse collections + o = DeserializeCollection(r, type, context, log); + } + else + { + // parse objects + o = DeserializeObject(r, type, context, log); + } + + /*if (isRoot) + { + // wait for tasks to complete + Action awaitTask = async t => await t; + propertySetterTasks.RunTasks(awaitTask); + }*/ + + // return our new object + return o; + } + + private static Array DeserializeArray(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) + { + // arrays + Array o; + // read bounds or id number + var fin = r.Read(); + while (fin != 0 && char.IsWhiteSpace((char)fin)) + { + if (log != null) + log.Append((char)fin); + fin = r.Read(); + } + if (fin != 0 && log != null) + log.Append((char)fin); + if (fin == 'a') + { + var boundsStrs = r.ReadTo(':', log).Split(','); + if (boundsStrs.Length < 1) + throw new SerializationException("Arrays cannot have zero dimensions."); + + if (boundsStrs.Length == 1) + { + int min, max; + var bounds1Strs = boundsStrs[0].Split('_'); + if (!int.TryParse(bounds1Strs[0], out min)) + throw new SerializationException("Expected integer, got \"" + bounds1Strs[0] + "\" when parsing array bounds."); + if (!int.TryParse(bounds1Strs[1], out max)) + throw new SerializationException("Expected integer, got \"" + bounds1Strs[1] + "\" when parsing array bounds."); + // HACK - figure out how to set min and max bounds, in case it matters (VB?) + var array = Array.CreateInstance(type.GetElementType(), max - min + 1); + for (int i = min; i <= max; i++) + array.SetValue(Deserialize(r, type.GetElementType(), false, context, log), i); + o = array; + } + else if (boundsStrs.Length == 2) + { + int min1, max1, min2, max2; + var bounds1Strs = boundsStrs[0].Split('_'); + var bounds2Strs = boundsStrs[1].Split('_'); + if (!int.TryParse(bounds1Strs[0], out min1)) + throw new SerializationException("Expected integer, got \"" + bounds1Strs[0] + "\" when parsing array bounds."); + if (!int.TryParse(bounds1Strs[1], out max1)) + throw new SerializationException("Expected integer, got \"" + bounds1Strs[1] + "\" when parsing array bounds."); + if (!int.TryParse(bounds2Strs[0], out min2)) + throw new SerializationException("Expected integer, got \"" + bounds2Strs[0] + "\" when parsing array bounds."); + if (!int.TryParse(bounds2Strs[1], out max2)) + throw new SerializationException("Expected integer, got \"" + bounds2Strs[1] + "\" when parsing array bounds."); + // HACK - figure out how to set min and max bounds, in case it matters (VB?) + var array = Array.CreateInstance(type.GetElementType(), max1 - min1 + 1, max2 - min2 + 1); + for (int x = min1; x <= max1; x++) + { + for (int y = min2; y <= max2; y++) + array.SetValue(Deserialize(r, type.GetElementType(), false, context, log), x, y); + } + o = array; + context.Add(o); + } + else + throw new SerializationException("Arrays with more than two dimensions are not supported."); + + // clean up + ReadSemicolon(r, type, log); + } + else if (fin == 'i') + { + // ID - need to find known object + int id; + string s = r.ReadToEndOfLine(';', log); + if (!int.TryParse(s, out id)) + throw new SerializationException("Expected integer, got \"" + s + "\" when parsing object ID."); + + // do we have it? + if (!context.KnownObjects.ContainsKey(type) || context.KnownObjects[type].Count <= id) + throw new SerializationException("No known object of type " + type + " has an ID of " + id + "."); + + // found it! + o = (Array)context.KnownObjects[type][id]; + } + else if (fin == 'n') + { + // null object! + o = null; + + // clean up + ReadSemicolon(r, type, log); + } + else + throw new SerializationException("Expected 'a'/'i'/'n', got '" + (char)fin + "' when parsing " + type + "."); + return o; + } + + private static IEnumerable DeserializeDictionary(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) + { + IEnumerable o; + int size; + var sizeStr = r.ReadTo(':', log); + if (!int.TryParse(sizeStr, out size)) + throw new SerializationException("Expected integer, got \"" + sizeStr + "\" when parsing collection size."); + var coll = type.Instantiate(); + context.Add(coll); + var adder = type.GetMethods().Single(m => m.Name == "Add" && m.GetParameters().Length == 2); + Type itemType; + if (type.GetGenericArguments().Count() == 2) + itemType = typeof(KeyValuePair<,>).MakeGenericType(type.GetGenericArguments()); + else if (type == typeof(DynamicDictionary)) + itemType = typeof(KeyValuePair); + else + // HACK - Resources inherits from a dictionary type + itemType = typeof(KeyValuePair<,>).MakeGenericType(type.BaseType.GetGenericArguments()); + + var collParm = Expression.Parameter(typeof(object), "coll"); + var keyParm = Expression.Parameter(typeof(object), "key"); + var valParm = Expression.Parameter(typeof(object), "val"); + var keyprop = ObjectGraphContext.GetKnownProperties(itemType, true)["Key"]; + var valprop = ObjectGraphContext.GetKnownProperties(itemType, true)["Value"]; + Delegate lambdaAdder; + if (ObjectGraphContext.CollectionAdders[type] == null) + { + // lambda has not been created yet, so create it + ObjectGraphContext.CollectionAdders[type] = + Expression.Lambda(Expression.Call( + Expression.Convert(collParm, type), + adder, + Expression.Convert(keyParm, keyprop.PropertyType), + Expression.Convert(valParm, valprop.PropertyType) + ), collParm, keyParm, valParm).Compile(); + } + + // get lambda + lambdaAdder = ObjectGraphContext.CollectionAdders[type]; + + // load items and add them + for (int i = 0; i < size; i++) + { + var key = Deserialize(r, keyprop.PropertyType, false, context, log); + var val = Deserialize(r, valprop.PropertyType, false, context, log); + lambdaAdder.DynamicInvoke(coll, key, val); + } + + o = (IEnumerable)coll; + + // clean up + ReadSemicolon(r, type, log); + + return o; + } + + private static IEnumerable DeserializeList(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) + { + IEnumerable o; + int size; + var sizeStr = r.ReadTo(':', log); + if (!int.TryParse(sizeStr, out size)) + throw new SerializationException("Expected integer, got \"" + sizeStr + "\" when parsing collection size."); + var coll = Activator.CreateInstance(type); + context.Add(coll); + var adder = type.GetMethods().Single(m => m.Name == "Add" && m.GetParameters().Length == 1); + Type itemType; + if (typeof(DynamicDictionary).IsAssignableFrom(type)) + { + itemType = typeof(KeyValuePair); + } + else if (type.GetGenericArguments().Length == 2) + { + // HACK - assume it's a dictionary, no real way to test + itemType = typeof(KeyValuePair<,>).MakeGenericType(type.GetGenericArguments()); + } + else if (type.GetGenericArguments().Length == 1) + { + // HACK - assume it's a collection, no real way to test + itemType = type.GetGenericArguments()[0]; + } + else + { + // no generic type? probably a list of objects? + itemType = typeof(object); + } + var collParm = Expression.Parameter(type, "coll"); + var objParm = Expression.Parameter(itemType, "obj"); + Delegate lambdaAdder; + if (ObjectGraphContext.CollectionAdders[type] == null) + { + // lambda has not been created yet, so create it + try + { + ObjectGraphContext.CollectionAdders[type] = + Expression.Lambda(Expression.Call( + collParm, // the collection to add to + adder, // the add method to call + objParm), // the object to add + collParm, objParm).Compile(); + } + catch (Exception ex) + { + throw new SerializationException("Could not create lambda to add {0} items to {1}.".F(itemType, type), ex); + } + } + + // get lambda + lambdaAdder = ObjectGraphContext.CollectionAdders[type]; + + // load items and add them + for (int i = 0; i < size; i++) + { + var item = Deserialize(r, itemType, false, context, log); + lambdaAdder.DynamicInvoke(coll, item); + } + o = (IEnumerable)coll; + + // clean up + ReadSemicolon(r, type, log); + + return o; + } + + private static IEnumerable DeserializeCollection(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) + { + IEnumerable o = null; + // collections + // read size or id number + var fin = r.Read(); + while (fin != 0 && char.IsWhiteSpace((char)fin)) + { + if (log != null) + log.Append((char)fin); + fin = r.Read(); + } + if (fin != 0 && log != null) + log.Append((char)fin); + if (fin == 'c') + { + o = DeserializeList(r, type, context, log); + } + else if (fin == 'c') + { + o = DeserializeList(r, type, context, log); + } + else if (fin == 'd') + { + o = DeserializeDictionary(r, type, context, log); + } + else if (fin == 'i') + { + // ID - need to find known object + int id; + string s = r.ReadToEndOfLine(';', log); + if (!int.TryParse(s, out id)) + throw new SerializationException("Expected integer, got \"" + s + "\" when parsing object ID."); + + // do we have it? + if (!context.KnownObjects.ContainsKey(type) || context.KnownObjects[type].Count <= id) + throw new SerializationException("No known object of type " + type + " has an ID of " + id + "."); + + // found it! + o = (IEnumerable)context.KnownObjects[type][id]; + } + else if (fin == 'n') + { + // null object! + o = null; + + // clean up + ReadSemicolon(r, type, log); + } + else + throw new SerializationException("Expected 'c'/'d'/'i'/'n', got '" + (char)fin + "' when parsing " + type + "."); + return o; + } + + private static object DeserializeStringifiedObject(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) + { + object o; + // read tag to see if it's actually a stringified object + var fin = r.Read(); + while (fin != 0 && char.IsWhiteSpace((char)fin)) + { + if (log != null) + log.Append((char)fin); + fin = r.Read(); + } + if (fin != 0 && log != null) + log.Append((char)fin); + if (fin == 's') + { + IStringifier stringifier = null; + var t = type; + while (stringifier == null && t != null) + { + stringifier = StringifierLibrary.Instance.All.SingleOrDefault(x => x.SupportedType == t); + t = t.BaseType; + } + if (stringifier == null) + throw new Exception("Can't find stringifier to deserialize " + type); + var dummy = r.ReadTo(':', log); + var val = r.ReadToEndOfLine(';', log); + o = stringifier.Destringify(val); + } + else if (fin == 'p') + { + o = DeserializeObjectWithProperties(r, type, context, log); + } + else if (fin == 'i') + { + o = DeserializeObjectWithID(r, type, context, log); + } + else if (fin == 'n') + { + // null object! + o = null; + + // clean up + ReadSemicolon(r, type, log); + } + else if (fin == 'd') + { + o = DeserializeDictionary(r, type, context, log); + } + else if (fin == 'c') + { + o = DeserializeList(r, type, context, log); + } + else + throw new Exception("Unknown data tag " + fin + ", was expecting s/p/i/n/d/c."); + if (!context.KnownObjects.ContainsKey(type) || !context.KnownObjects[type].Contains(o)) + context.Add(o); + return o; + } + + private static object DeserializeObjectWithProperties(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) + { + // create object and add it to our context + var o = type.Instantiate(); + context.Add(o); + + // properties count - need to create object and populate properties + int count; + string s = r.ReadTo(':', log); + if (!int.TryParse(s, out count)) + throw new SerializationException("Expected integer, got \"" + s + "\" when parsing property count."); + + + var dict = new SafeDictionary(); + + // deserialize the properties + var props = ObjectGraphContext.GetKnownProperties(type, true); + for (int i = 0; i < count; i++) + { + var pname = r.ReadTo(':', log).Trim(); + if (type == typeof(Objects.Civilization.Empire) && pname == "StoredResources") + { + + } + if (props.ContainsKey(pname)) + { + // TODO - get base class recursively, not just derived class and declaring type + var prop = type.GetProperty(pname, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) ?? props[pname]; // get concrete type property in case it has DoNotSerialize and the abstract type doesn't + if (prop != null) + { + if (prop.Name == "StarSystemNames") + { + + } + var data = Deserialize(r, prop.PropertyType, false, context, log); + if (prop.HasAttribute()) + prop.SetValue(o, data); // TODO - use cached reflection lambdas + if (!prop.HasAttribute()) + dict[pname] = data; + } + else + r.ReadToEndOfLine(';', log); // throw away this property, we don't need it + // if p is null or has do not serialize attribute, it must be data from an old version with different property names, so don't crash + } + } + + //propertySetterTasks.Add(Task.Factory.StartNew(() => + //{ + o.SetData(dict, context); + //})); + + // clean up + ReadSemicolon(r, type, log); + + return o; + } + + private static object DeserializeObjectWithID(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) + { + // ID - need to find known object + int id; + string s = r.ReadToEndOfLine(';', log); + if (!int.TryParse(s, out id)) + throw new SerializationException("Expected integer, got \"" + s + "\" when parsing object ID."); + + // do we have it? + if (!context.KnownObjects.ContainsKey(type) || context.KnownObjects[type].Count <= id) + throw new SerializationException("No known object of type " + type + " has an ID of " + id + "."); + + // found it! + return context.KnownObjects[type][id]; + } + + private static object DeserializeObject(TextReader r, Type type, ObjectGraphContext context, StringBuilder log) + { + // read property count or id number + object o; + var fin = r.Read(); + while (fin != 0 && char.IsWhiteSpace((char)fin)) + { + if (log != null) + log.Append((char)fin); + fin = r.Read(); + } + if (fin != 0 && log != null) + log.Append((char)fin); + if (fin == 'p') + o = DeserializeObjectWithProperties(r, type, context, log); + else if (fin == 'i') + { + o = DeserializeObjectWithID(r, type, context, log); + } + else if (fin == 'n') + { + // null object! + o = null; + + // clean up + ReadSemicolon(r, type, log); + } + else + throw new SerializationException("Expected 'p'/'i'/'n', got '" + (char)fin + "' when parsing " + type + "."); + return o; + } + + private static string DeserializeString(TextReader r, ObjectGraphContext context, StringBuilder log) + { + string o; + bool foundRealSemicolon = false; + StringBuilder sb = new StringBuilder(); + int quotes = 0; + while (!foundRealSemicolon) + { + var ns = r.ReadToEndOfLine(';', log); + quotes += ns.Count(c => c == '"'); // TODO - don't count escaped quotes + sb.Append(ns); + if (!ns.EndsWith("\\") && quotes % 2 == 0) + foundRealSemicolon = true; + } + var s = sb.ToString(); + if (s == "n") + o = null; + else + { + o = s.Trim(); + if (o.StartsWith("\"")) + o = o.Substring(1); + if (o.EndsWith("\"")) + o = o.Substring(0, o.Length - 1); + o = o.Replace("\\\"", "\"").Replace("\\;", ";").Replace("\\\\", "\\"); + } + return o; + } + + private static int GetSerializationPriority(PropertyInfo p) + { + var atts = p.GetCustomAttributes(true).OfType(); + if (atts.Any()) + return atts.Min(att => att.Priority); + return int.MaxValue; + } + + private static void ReadSemicolon(TextReader r, Type type, StringBuilder log) + { + // read the semicolon at the end and any whitespace + int ender; + do + { + ender = r.Read(); + if (log != null) + log.Append((char)ender); + if (ender == 0 || ender != ';' && !char.IsWhiteSpace((char)ender)) + throw new SerializationException("Expected ';', got '" + (char)ender + "' at the end of " + type + "."); + } while (ender != ';'); + } + + private static void Serialize(T o, Stream s, ObjectGraphContext context = null, int tabLevel = 0) + { + var sw = new StreamWriter(new BufferedStream(s)); + Serialize(o, sw, context); + sw.Flush(); + } + + private static void WriteArray(Array array, TextWriter w, ObjectGraphContext context, int tabLevel) + { + var tabs = new string('\t', tabLevel); + + // arrays get size and elements listed out + var bounds = new List(); + for (var rank = 0; rank < array.Rank; rank++) + bounds.Add(array.GetLowerBound(rank) + "_" + array.GetUpperBound(rank)); + w.WriteLine("a" + string.Join(",", bounds.ToArray()) + ":" + tabs); + var type = array.GetType(); + var itemtype = type.GetElementType(); + if (array.Rank == 1) + { + foreach (var item in array) + Serialize(item, w, itemtype, context, tabLevel + 1); + } + else if (array.Rank == 2) + { + for (int x = array.GetLowerBound(0); x <= array.GetUpperBound(0); x++) + { + for (int y = array.GetLowerBound(1); y <= array.GetUpperBound(1); y++) + Serialize(array.GetValue(x, y), w, itemtype, context, tabLevel + 1); + } + } + else + throw new SerializationException("Arrays with more than 2 dimensions are not supported."); + + // write end object + for (int i = 0; i < tabLevel; i++) + w.Write('\t'); + w.WriteLine(";"); + } + + private static void WriteCollection(IEnumerable list, TextWriter w, ObjectGraphContext context, int tabLevel) + { + var tabs = new string('\t', tabLevel); + + // collections get size and elements listed out + Type itemType; + var type = list.GetType(); + bool isDict = false; + if (type.GetGenericArguments().Length == 2) + { + // HACK - assume it's a dictionary, no real way to test + itemType = typeof(KeyValuePair<,>).MakeGenericType(type.GetGenericArguments()); + w.WriteLine("d" + list.Cast().Count() + ":" + tabs); + isDict = true; + } + else if (type.BaseType.GetGenericArguments().Length == 2) + { + // HACK - Resources inherits from a dictionary type + itemType = typeof(KeyValuePair<,>).MakeGenericType(type.BaseType.GetGenericArguments()); + w.WriteLine("d" + list.Cast().Count() + ":" + tabs); + isDict = true; + } + else if (type == typeof(DynamicDictionary)) + { + itemType = typeof(KeyValuePair); + w.WriteLine("d" + list.Cast().Count() + ":" + tabs); + isDict = true; + } + else if (type.GetGenericArguments().Length == 1) + { + // HACK - assume it's a collection, no real way to test + itemType = type.GetGenericArguments()[0]; + w.WriteLine("c" + list.Cast().Count() + ":" + tabs); + } + else + { + // no generic type? probably a list of objects? + itemType = typeof(object); + w.WriteLine("c" + list.Cast().Count() + ":" + tabs); + } + foreach (var item in list) + { + if (isDict) + { + var keyprop = ObjectGraphContext.GetKnownProperties(itemType)["Key"]; + var valprop = ObjectGraphContext.GetKnownProperties(itemType)["Value"]; + Serialize(context.GetObjectProperty(item, keyprop), w, keyprop.PropertyType, context, tabLevel + 1); + Serialize(context.GetObjectProperty(item, valprop), w, valprop.PropertyType, context, tabLevel + 1); + } + else + Serialize(item, w, itemType, context, tabLevel + 1); + } + + // write end object + for (int i = 0; i < tabLevel; i++) + w.Write('\t'); + w.WriteLine(";"); + } + + private static void WriteColor(Color c, TextWriter w, int tabLevel) + { + // HACK - Mono's implmentation of Color is different from .NET's so we need to save just the ARGB values in a consistent format + w.Write(c.A); + w.Write(","); + w.Write(c.R); + w.Write(","); + w.Write(c.G); + w.Write(","); + w.Write(c.B); + w.WriteLine(";"); + } + + private static void WriteObject(object o, TextWriter w, ObjectGraphContext context, int tabLevel) + { + // serialize object type and field count + if (o is IDataObject) + { + // use data object code! :D + var type = o.GetType(); + var data = (o as IDataObject).Data; + w.WriteLine("p" + data.Count + ":"); + foreach (var kvp in data) + { + var pname = kvp.Key; + var val = kvp.Value; + var prop = ObjectGraphContext.GetKnownProperties(type)[pname]; + if (prop != null) + { + var ptype = prop.PropertyType; + WriteProperty(w, o, ptype, pname, val, context, tabLevel); + } + else + { + // TODO - if property doesn't exist, log a warning somewhere? + WriteProperty(w, o, typeof(object), pname, val, context, tabLevel); + } + } + } + else + { + // use reflection :( + var type = o.GetType(); + var props = ObjectGraphContext.GetKnownProperties(type).Values.Where(p => + p.HasAttribute() || // force serialization of property even if value is null/default? + !p.GetValue(o, null).SafeEquals(p.PropertyType.DefaultValue())); // property value is not null/default? + w.WriteLine("p" + props.Count() + ":"); + foreach (var p in props.OrderBy(p => GetSerializationPriority(p))) + WriteProperty(w, o, p.PropertyType, p.Name, context.GetObjectProperty(o, p), context, tabLevel); + } + + // write end object + for (int i = 0; i < tabLevel; i++) + w.Write('\t'); + w.WriteLine(";"); + } + + private static void WritePrimitiveOrEnum(object o, TextWriter w) + { + // just serialize the primitive type + w.Write(o); + + // write end object + w.WriteLine(";"); + } + + private static void WriteProperty(TextWriter w, object o, Type ptype, string pname, object val, ObjectGraphContext context, int tabLevel) + { + var tabs = new string('\t', tabLevel); + var moreTabs = new string('\t', tabLevel + 1); + + // serialize property name and value + try + { + w.Write(moreTabs); + w.Write(pname); + w.Write(":\n"); + Serialize(val, w, ptype, context, tabLevel + 2); + } + catch (Exception ex) + { + throw new SerializationException("Could not serialize property " + pname + " of " + o + " because the property accessor threw an exception: " + ex.Message, ex); + } + } + + private static void WriteString(string s, TextWriter w) + { + if (s == null) + w.Write("n"); + else + { + // quote strings and escape any backslashes and semicolons inside them + w.Write('"' + s.Replace("\\", "\\\\").Replace(";", "\\;").Replace("\"", "\\\"") + '"'); + } + + // write end object + w.WriteLine(";"); + } + + private static void WriteStringifiedObject(object o, TextWriter w) + { + IStringifier stringifier = null; + var t = o.GetType(); + while (stringifier == null && t != null) + { + stringifier = StringifierLibrary.Instance.All.SingleOrDefault(x => x.SupportedType == t); + t = t.BaseType; + } + if (stringifier == null) + throw new Exception("Can't find stringifier to deserialize " + o.GetType()); + w.WriteLine("s:" + stringifier.Stringify(o) + ";"); + } + } +} diff --git a/FrEee/Utility/ObjectGraphParser.cs b/FrEee/Serialization/ObjectGraphParser.cs similarity index 96% rename from FrEee/Utility/ObjectGraphParser.cs rename to FrEee/Serialization/ObjectGraphParser.cs index 2e4090b75..761ea5d38 100644 --- a/FrEee/Utility/ObjectGraphParser.cs +++ b/FrEee/Serialization/ObjectGraphParser.cs @@ -1,481 +1,482 @@ -using FrEee.Utility.Extensions; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; -using System.Linq.Expressions; -using System.Reflection; - -namespace FrEee.Utility -{ - /// - /// Prevents an property or class's value from being copied when the containing object is copied. - /// Instead, the original value will be used, or the known copy if the value has already been copied. - /// - [AttributeUsage(AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = true, AllowMultiple = false)] - public class DoNotCopyAttribute : Attribute - { - public DoNotCopyAttribute(bool allowSafeCopy = true) - { - AllowSafeCopy = allowSafeCopy; - } - - /// - /// Is "safe" copying (using the original property value) allowed? - /// If false, even this will not be attempted, and the property will be completely ignored. - /// Setting to false is useful for properties whose setters throw NotSupportedException. - /// - public bool AllowSafeCopy { get; private set; } - } - - /// - /// Context for object graph operations. - /// - [Serializable] - public class ObjectGraphContext - { - static ObjectGraphContext() - { - KnownTypes = new SafeDictionary(); - KnownPropertiesIncludingDoNotSerialize = new SafeDictionary>(); - KnownPropertiesExcludingDoNotSerialize = new SafeDictionary>(); - PropertyGetters = new SafeDictionary(); - PropertySetters = new SafeDictionary(); - CollectionAdders = new SafeDictionary(); - } - - public ObjectGraphContext() - { - KnownObjects = new SafeDictionary>(); - KnownIDs = new SafeDictionary>(); - objectStack = new Stack(); - propertyStack = new Stack(); - ObjectQueue = new Queue(); - } - - /// - /// Adder methods for collection/dictionary types. - /// - public static SafeDictionary CollectionAdders { get; private set; } - - /// - /// Known data types. - /// - public static IDictionary KnownTypes { get; private set; } - - /// - /// Getters for properties. - /// - public static SafeDictionary PropertyGetters { get; private set; } - - /// - /// Setters for properties. - /// - public static SafeDictionary PropertySetters { get; private set; } - - /// - /// The known IDs of objects. - /// - public SafeDictionary> KnownIDs { get; private set; } - - /// - /// The known objects, grouped by type. Their IDs are their indices in the lists. - /// - [field: NonSerialized] - public SafeDictionary> KnownObjects { get; private set; } - - /// - /// Stack/path of objects to the current object being parsed. - /// - public IEnumerable ObjectStack { get { return objectStack; } } - - /// - /// Stack/path of properties to the current object being parsed. - /// - public IEnumerable PropertyStack { get { return propertyStack; } } - - [field: NonSerialized] - internal Queue ObjectQueue { get; set; } - - [NonSerialized] - internal Stack objectStack; - - internal Stack propertyStack; - - /// - /// Known properties for each object type. - /// - private static SafeDictionary> KnownPropertiesIncludingDoNotSerialize { get; set; } - - /// - /// Known properties for each object type. - /// - private static SafeDictionary> KnownPropertiesExcludingDoNotSerialize { get; set; } - - /// - /// Adds the properties for a type. - /// - /// - public static void AddProperties(Type type) - { - if (!KnownPropertiesIncludingDoNotSerialize.ContainsKey(type)) - { - // list out the object's properties that aren't marked nonserializable - var props = new Dictionary(); - var t = type; - int i = 0; // how far removed in the type hierarchy? - while (t != null) - { - var newprops = t.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Where(f => - type.IsGenericType && type.GetGenericTypeDefinition() == typeof(KeyValuePair<,>) - || - ( - // hopefully put "quicker to check" and "easier to fail" conditions up top - f.GetIndexParameters().Length == 0 // we don't support indexed properties - && (f.GetGetMethod(true) != null && f.GetSetMethod(true) != null) - ) - ); - foreach (var prop in newprops) - props.Add(prop, i); - t = t.BaseType; - i++; - } - // Mono seems to place inherited properties on the derived type too so we need a consistent ordering - var props2 = props.Distinct().GroupBy(p => p.Key.Name).Select(g => g.Single(p2 => p2.Value == g.Max(p3 => p3.Value))).Select(kvp => kvp.Key).OrderBy(p => p.Name); - KnownPropertiesIncludingDoNotSerialize.Add(type, props2.ToDictionary(p => p.Name)); - KnownPropertiesExcludingDoNotSerialize.Add(type, props2.Where(x => !x.HasAttribute()).ToDictionary(p => p.Name, p => p)); - foreach (var prop in props2) - { - var objParm = Expression.Parameter(prop.DeclaringType); - var valParm = Expression.Parameter(prop.PropertyType, "val"); - var getMethod = prop.GetGetMethod(true); - var setMethod = prop.GetSetMethod(true); - if (getMethod != null) - { - var getter = Expression.Call(objParm, getMethod); - PropertyGetters[prop] = Expression.Lambda(getter, objParm).Compile(); - } - if (setMethod != null) - { - var setter = Expression.Call(objParm, setMethod, valParm); - PropertySetters[prop] = Expression.Lambda(setter, objParm, valParm).Compile(); - } - } - } - } - - public static IDictionary GetKnownProperties(Type t, bool includeDoNotSerializeProperties = false) - { - var kp = includeDoNotSerializeProperties ? KnownPropertiesIncludingDoNotSerialize : KnownPropertiesExcludingDoNotSerialize; - if (kp[t] == null) - AddProperties(t); - return kp[t]; - } - - /// - /// Adds an object. - /// - /// - /// The object's ID. IDs are unique within any any given object type but not across types. - public int Add(object o) - { - if (o == null) - return -1; - var type = o.GetType(); - if (!KnownTypes.ContainsKey(type.AssemblyQualifiedName)) - KnownTypes.Add(type.AssemblyQualifiedName, type); - if (!KnownObjects.ContainsKey(type)) - KnownObjects.Add(type, new List()); -// if (!KnownObjects[type].Contains(o)) - KnownObjects[type].Add(o); - if (!KnownIDs.ContainsKey(type)) - KnownIDs.Add(type, new SafeDictionary()); - var id = KnownObjects[type].Count - 1; - KnownIDs[type].Add(o, id); - AddProperties(type); - return id; - } - - /// - /// Gets the ID for an object, or null if the object is unknown. - /// - /// - /// - public int? GetID(object o) - { - if (o == null) - return null; - var type = o.GetType(); - if (KnownIDs.ContainsKey(type) && KnownIDs[type].ContainsKey(o)) - return KnownIDs[type][o]; - return null; - } - - public object GetObjectProperty(object obj, PropertyInfo prop) - { - AddProperties(obj.GetType()); - // lambda expressions don't seem to work on structs - if (obj.GetType().IsValueType) - return prop.GetValue(obj, new object[] { }); - else - return PropertyGetters[prop].DynamicInvoke(obj); - } - - public IDictionary GetProperties(Type type, bool includeDoNotSerialize = false) - { - AddProperties(type); - return includeDoNotSerialize ? KnownPropertiesIncludingDoNotSerialize[type] : KnownPropertiesExcludingDoNotSerialize[type]; - } - - public void SetObjectProperty(object obj, PropertyInfo prop, object val) - { - if (obj is Type) - throw new InvalidOperationException("Cannot set properties on an object of type System.Type."); - if (obj == null) - throw new ArgumentNullException(nameof(obj), "Can't set properties on a null object."); - // lambda expressions don't seem to work on structs - try - { - if (obj.GetType().IsValueType) - prop.SetValue(obj, val, new object[] { }); - else - PropertySetters[prop].DynamicInvoke(obj, val); - } - catch (NullReferenceException ex) - { - throw new InvalidOperationException($"Could not set property {prop} on object {obj} of type {obj.GetType()}. Does the type actually have this property?", ex); - } - } - - private class ReferenceEqualityComparer : IEqualityComparer - { - static ReferenceEqualityComparer() - { - Instance = new ReferenceEqualityComparer(); - } - - private ReferenceEqualityComparer() - { - } - - public static ReferenceEqualityComparer Instance { get; private set; } - - public new bool Equals(object x, object y) - { - return ReferenceEquals(x, y); - } - - public int GetHashCode(object obj) - { - return obj.GetHashCode(); - } - } - } - - /// - /// Parses object graphs and generates events when objects are detected. - /// - public class ObjectGraphParser - { - public IDictionary> Parse(object o, ObjectGraphContext context = null) - { - // set up our context if we haven't already - if (context == null) - context = new ObjectGraphContext(); - - // fire up the queue - context.ObjectQueue.Enqueue(o); - while (context.ObjectQueue.Any()) - { - o = context.ObjectQueue.Dequeue(); - context.objectStack.Push(o); - - // deal with nulls - if (o == null) - { - if (Null != null) - Null(null); - context.objectStack.Pop(); - continue; - } - - var type = o.GetType(); - - int? id = null; - if (!type.IsValueType && type != typeof(string)) - id = context.GetID(o); - - if (!ObjectGraphContext.KnownTypes.ContainsKey(type.AssemblyQualifiedName)) - { - // register type - ObjectGraphContext.KnownTypes.Add(type.AssemblyQualifiedName, type); - ObjectGraphContext.AddProperties(type); - } - - if (!type.IsValueType && type != typeof(string) && !typeof(Array).IsAssignableFrom(type)) - { - if (id == null) - { - // add to context - context.Add(o); - } - else - { - if (KnownObject != null) - KnownObject(o); - - // done - context.objectStack.Pop(); - continue; - } - } - - // object was found - if (StartObject != null) - StartObject(o); - - // parse sub objects - if (type.IsPrimitive || typeof(Enum).IsAssignableFrom(type) || type == typeof(string)) - { - // nothing to do, no sub objects - } - else if (type == typeof(Color)) - ParseColor((Color)o, context); - else if (typeof(Array).IsAssignableFrom(type)) - ParseArray((Array)o, context); - else if (typeof(IEnumerable).IsAssignableFrom(type) && type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 1 || m.GetParameters().Length == 2).Any()) - ParseCollection((IEnumerable)o, context); - else - ParseObject(o, context); - - // done parsing object - if (EndObject != null) - EndObject(o); - context.objectStack.Pop(); - } - - return context.KnownObjects; - } - - private void ParseArray(Array array, ObjectGraphContext context) - { - if (ArrayDimensions != null) - { - var bounds = new List(); - for (var rank = 0; rank < array.Rank; rank++) - bounds.Add(array.GetLength(rank)); - ArrayDimensions(bounds); - } - foreach (var item in array) - { - context.propertyStack.Push("(Array Item)"); - if (Item != null) - Item(item); - context.ObjectQueue.Enqueue(item); - context.propertyStack.Pop(); - } - } - - private void ParseCollection(IEnumerable list, ObjectGraphContext context) - { - foreach (var item in list.Cast().ToArray()) - { - context.propertyStack.Push("(Collection Item)"); - if (Item != null) - Item(item); - context.ObjectQueue.Enqueue(item); - context.propertyStack.Pop(); - } - } - - private void ParseColor(Color c, ObjectGraphContext context) - { - // HACK - Mono's implmentation of Color is different from .NET's so we need to save just the ARGB values in a consistent format - ParseProperty("A", c, c.A, context); - ParseProperty("R", c, c.R, context); - ParseProperty("G", c, c.G, context); - ParseProperty("B", c, c.B, context); - } - - private void ParseObject(object o, ObjectGraphContext context) - { - var type = o.GetType(); - var props = ObjectGraphContext.GetKnownProperties(type); - foreach (var p in props.Values) - { - var val = p.GetValue(o, new object[] { }); - ParseProperty(p.Name, o, val, context); - } - } - - private void ParseProperty(string propertyName, object o, object val, ObjectGraphContext context) - { - context.propertyStack.Push(propertyName); - bool recurse = true; // if no event handler, assume we are parsing recursively (really adding subproperties to queue) - if (Property != null) - recurse = Property(propertyName, o, val); - if (recurse) - { - context.ObjectQueue.Enqueue(val); - } - context.propertyStack.Pop(); - } - - /// - /// Raised when a new array is encountered. - /// - public event ArrayDimensionsDelegate ArrayDimensions; - - /// - /// Raised when a new object is finished being parsed. - /// - public event ObjectDelegate EndObject; - - /// - /// Raised when an item in a collection is encountered. - /// - public event ObjectDelegate Item; - - /// - /// Raised when a previously encountered object is encountered again. - /// - public event ObjectDelegate KnownObject; - - /// - /// Raised when a null reference is encountered. - /// - public event ObjectDelegate Null; - - /// - /// Raised when an object's property is encountered. - /// - public event PropertyDelegate Property; - - /// - /// Raised when a new object is encountered. - /// - public event ObjectDelegate StartObject; - - /// - /// Delegate for when an array's dimensions are encountered. - /// - /// The array dimensions. - public delegate void ArrayDimensionsDelegate(IEnumerable dimensions); - - /// - /// Delegate for when an object is encountered. - /// - /// The object encountered. - public delegate void ObjectDelegate(object o); - - /// - /// Delegate for when an object's property is encountered. - /// - /// The name of the property. - /// The object possessing the property. - /// The value of the property. - /// true to recursively parse the property value, false to skip it - public delegate bool PropertyDelegate(string propertyName, object o, object val); - } -} \ No newline at end of file +using FrEee.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; + +namespace FrEee.Serialization +{ + /// + /// Prevents an property or class's value from being copied when the containing object is copied. + /// Instead, the original value will be used, or the known copy if the value has already been copied. + /// + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = true, AllowMultiple = false)] + public class DoNotCopyAttribute : Attribute + { + public DoNotCopyAttribute(bool allowSafeCopy = true) + { + AllowSafeCopy = allowSafeCopy; + } + + /// + /// Is "safe" copying (using the original property value) allowed? + /// If false, even this will not be attempted, and the property will be completely ignored. + /// Setting to false is useful for properties whose setters throw NotSupportedException. + /// + public bool AllowSafeCopy { get; private set; } + } + + /// + /// Context for object graph operations. + /// + [Serializable] + public class ObjectGraphContext + { + static ObjectGraphContext() + { + KnownTypes = new SafeDictionary(); + KnownPropertiesIncludingDoNotSerialize = new SafeDictionary>(); + KnownPropertiesExcludingDoNotSerialize = new SafeDictionary>(); + PropertyGetters = new SafeDictionary(); + PropertySetters = new SafeDictionary(); + CollectionAdders = new SafeDictionary(); + } + + public ObjectGraphContext() + { + KnownObjects = new SafeDictionary>(); + KnownIDs = new SafeDictionary>(); + objectStack = new Stack(); + propertyStack = new Stack(); + ObjectQueue = new Queue(); + } + + /// + /// Adder methods for collection/dictionary types. + /// + public static SafeDictionary CollectionAdders { get; private set; } + + /// + /// Known data types. + /// + public static IDictionary KnownTypes { get; private set; } + + /// + /// Getters for properties. + /// + public static SafeDictionary PropertyGetters { get; private set; } + + /// + /// Setters for properties. + /// + public static SafeDictionary PropertySetters { get; private set; } + + /// + /// The known IDs of objects. + /// + public SafeDictionary> KnownIDs { get; private set; } + + /// + /// The known objects, grouped by type. Their IDs are their indices in the lists. + /// + [field: NonSerialized] + public SafeDictionary> KnownObjects { get; private set; } + + /// + /// Stack/path of objects to the current object being parsed. + /// + public IEnumerable ObjectStack { get { return objectStack; } } + + /// + /// Stack/path of properties to the current object being parsed. + /// + public IEnumerable PropertyStack { get { return propertyStack; } } + + [field: NonSerialized] + internal Queue ObjectQueue { get; set; } + + [NonSerialized] + internal Stack objectStack; + + internal Stack propertyStack; + + /// + /// Known properties for each object type. + /// + private static SafeDictionary> KnownPropertiesIncludingDoNotSerialize { get; set; } + + /// + /// Known properties for each object type. + /// + private static SafeDictionary> KnownPropertiesExcludingDoNotSerialize { get; set; } + + /// + /// Adds the properties for a type. + /// + /// + public static void AddProperties(Type type) + { + if (!KnownPropertiesIncludingDoNotSerialize.ContainsKey(type)) + { + // list out the object's properties that aren't marked nonserializable + var props = new Dictionary(); + var t = type; + int i = 0; // how far removed in the type hierarchy? + while (t != null) + { + var newprops = t.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Where(f => + type.IsGenericType && type.GetGenericTypeDefinition() == typeof(KeyValuePair<,>) + || + ( + // hopefully put "quicker to check" and "easier to fail" conditions up top + f.GetIndexParameters().Length == 0 // we don't support indexed properties + && (f.GetGetMethod(true) != null && f.GetSetMethod(true) != null) + ) + ); + foreach (var prop in newprops) + props.Add(prop, i); + t = t.BaseType; + i++; + } + // Mono seems to place inherited properties on the derived type too so we need a consistent ordering + var props2 = props.Distinct().GroupBy(p => p.Key.Name).Select(g => g.Single(p2 => p2.Value == g.Max(p3 => p3.Value))).Select(kvp => kvp.Key).OrderBy(p => p.Name); + KnownPropertiesIncludingDoNotSerialize.Add(type, props2.ToDictionary(p => p.Name)); + KnownPropertiesExcludingDoNotSerialize.Add(type, props2.Where(x => !x.HasAttribute()).ToDictionary(p => p.Name, p => p)); + foreach (var prop in props2) + { + var objParm = Expression.Parameter(prop.DeclaringType); + var valParm = Expression.Parameter(prop.PropertyType, "val"); + var getMethod = prop.GetGetMethod(true); + var setMethod = prop.GetSetMethod(true); + if (getMethod != null) + { + var getter = Expression.Call(objParm, getMethod); + PropertyGetters[prop] = Expression.Lambda(getter, objParm).Compile(); + } + if (setMethod != null) + { + var setter = Expression.Call(objParm, setMethod, valParm); + PropertySetters[prop] = Expression.Lambda(setter, objParm, valParm).Compile(); + } + } + } + } + + public static IDictionary GetKnownProperties(Type t, bool includeDoNotSerializeProperties = false) + { + var kp = includeDoNotSerializeProperties ? KnownPropertiesIncludingDoNotSerialize : KnownPropertiesExcludingDoNotSerialize; + if (kp[t] == null) + AddProperties(t); + return kp[t]; + } + + /// + /// Adds an object. + /// + /// + /// The object's ID. IDs are unique within any any given object type but not across types. + public int Add(object o) + { + if (o == null) + return -1; + var type = o.GetType(); + if (!KnownTypes.ContainsKey(type.AssemblyQualifiedName)) + KnownTypes.Add(type.AssemblyQualifiedName, type); + if (!KnownObjects.ContainsKey(type)) + KnownObjects.Add(type, new List()); +// if (!KnownObjects[type].Contains(o)) + KnownObjects[type].Add(o); + if (!KnownIDs.ContainsKey(type)) + KnownIDs.Add(type, new SafeDictionary()); + var id = KnownObjects[type].Count - 1; + KnownIDs[type].Add(o, id); + AddProperties(type); + return id; + } + + /// + /// Gets the ID for an object, or null if the object is unknown. + /// + /// + /// + public int? GetID(object o) + { + if (o == null) + return null; + var type = o.GetType(); + if (KnownIDs.ContainsKey(type) && KnownIDs[type].ContainsKey(o)) + return KnownIDs[type][o]; + return null; + } + + public object GetObjectProperty(object obj, PropertyInfo prop) + { + AddProperties(obj.GetType()); + // lambda expressions don't seem to work on structs + if (obj.GetType().IsValueType) + return prop.GetValue(obj, new object[] { }); + else + return PropertyGetters[prop].DynamicInvoke(obj); + } + + public IDictionary GetProperties(Type type, bool includeDoNotSerialize = false) + { + AddProperties(type); + return includeDoNotSerialize ? KnownPropertiesIncludingDoNotSerialize[type] : KnownPropertiesExcludingDoNotSerialize[type]; + } + + public void SetObjectProperty(object obj, PropertyInfo prop, object val) + { + if (obj is Type) + throw new InvalidOperationException("Cannot set properties on an object of type System.Type."); + if (obj == null) + throw new ArgumentNullException(nameof(obj), "Can't set properties on a null object."); + // lambda expressions don't seem to work on structs + try + { + if (obj.GetType().IsValueType) + prop.SetValue(obj, val, new object[] { }); + else + PropertySetters[prop].DynamicInvoke(obj, val); + } + catch (NullReferenceException ex) + { + throw new InvalidOperationException($"Could not set property {prop} on object {obj} of type {obj.GetType()}. Does the type actually have this property?", ex); + } + } + + private class ReferenceEqualityComparer : IEqualityComparer + { + static ReferenceEqualityComparer() + { + Instance = new ReferenceEqualityComparer(); + } + + private ReferenceEqualityComparer() + { + } + + public static ReferenceEqualityComparer Instance { get; private set; } + + public new bool Equals(object x, object y) + { + return ReferenceEquals(x, y); + } + + public int GetHashCode(object obj) + { + return obj.GetHashCode(); + } + } + } + + /// + /// Parses object graphs and generates events when objects are detected. + /// + public class ObjectGraphParser + { + public IDictionary> Parse(object o, ObjectGraphContext context = null) + { + // set up our context if we haven't already + if (context == null) + context = new ObjectGraphContext(); + + // fire up the queue + context.ObjectQueue.Enqueue(o); + while (context.ObjectQueue.Any()) + { + o = context.ObjectQueue.Dequeue(); + context.objectStack.Push(o); + + // deal with nulls + if (o == null) + { + if (Null != null) + Null(null); + context.objectStack.Pop(); + continue; + } + + var type = o.GetType(); + + int? id = null; + if (!type.IsValueType && type != typeof(string)) + id = context.GetID(o); + + if (!ObjectGraphContext.KnownTypes.ContainsKey(type.AssemblyQualifiedName)) + { + // register type + ObjectGraphContext.KnownTypes.Add(type.AssemblyQualifiedName, type); + ObjectGraphContext.AddProperties(type); + } + + if (!type.IsValueType && type != typeof(string) && !typeof(Array).IsAssignableFrom(type)) + { + if (id == null) + { + // add to context + context.Add(o); + } + else + { + if (KnownObject != null) + KnownObject(o); + + // done + context.objectStack.Pop(); + continue; + } + } + + // object was found + if (StartObject != null) + StartObject(o); + + // parse sub objects + if (type.IsPrimitive || typeof(Enum).IsAssignableFrom(type) || type == typeof(string)) + { + // nothing to do, no sub objects + } + else if (type == typeof(Color)) + ParseColor((Color)o, context); + else if (typeof(Array).IsAssignableFrom(type)) + ParseArray((Array)o, context); + else if (typeof(IEnumerable).IsAssignableFrom(type) && type.GetMethods().Where(m => m.Name == "Add" && m.GetParameters().Length == 1 || m.GetParameters().Length == 2).Any()) + ParseCollection((IEnumerable)o, context); + else + ParseObject(o, context); + + // done parsing object + if (EndObject != null) + EndObject(o); + context.objectStack.Pop(); + } + + return context.KnownObjects; + } + + private void ParseArray(Array array, ObjectGraphContext context) + { + if (ArrayDimensions != null) + { + var bounds = new List(); + for (var rank = 0; rank < array.Rank; rank++) + bounds.Add(array.GetLength(rank)); + ArrayDimensions(bounds); + } + foreach (var item in array) + { + context.propertyStack.Push("(Array Item)"); + if (Item != null) + Item(item); + context.ObjectQueue.Enqueue(item); + context.propertyStack.Pop(); + } + } + + private void ParseCollection(IEnumerable list, ObjectGraphContext context) + { + foreach (var item in list.Cast().ToArray()) + { + context.propertyStack.Push("(Collection Item)"); + if (Item != null) + Item(item); + context.ObjectQueue.Enqueue(item); + context.propertyStack.Pop(); + } + } + + private void ParseColor(Color c, ObjectGraphContext context) + { + // HACK - Mono's implmentation of Color is different from .NET's so we need to save just the ARGB values in a consistent format + ParseProperty("A", c, c.A, context); + ParseProperty("R", c, c.R, context); + ParseProperty("G", c, c.G, context); + ParseProperty("B", c, c.B, context); + } + + private void ParseObject(object o, ObjectGraphContext context) + { + var type = o.GetType(); + var props = ObjectGraphContext.GetKnownProperties(type); + foreach (var p in props.Values) + { + var val = p.GetValue(o, new object[] { }); + ParseProperty(p.Name, o, val, context); + } + } + + private void ParseProperty(string propertyName, object o, object val, ObjectGraphContext context) + { + context.propertyStack.Push(propertyName); + bool recurse = true; // if no event handler, assume we are parsing recursively (really adding subproperties to queue) + if (Property != null) + recurse = Property(propertyName, o, val); + if (recurse) + { + context.ObjectQueue.Enqueue(val); + } + context.propertyStack.Pop(); + } + + /// + /// Raised when a new array is encountered. + /// + public event ArrayDimensionsDelegate ArrayDimensions; + + /// + /// Raised when a new object is finished being parsed. + /// + public event ObjectDelegate EndObject; + + /// + /// Raised when an item in a collection is encountered. + /// + public event ObjectDelegate Item; + + /// + /// Raised when a previously encountered object is encountered again. + /// + public event ObjectDelegate KnownObject; + + /// + /// Raised when a null reference is encountered. + /// + public event ObjectDelegate Null; + + /// + /// Raised when an object's property is encountered. + /// + public event PropertyDelegate Property; + + /// + /// Raised when a new object is encountered. + /// + public event ObjectDelegate StartObject; + + /// + /// Delegate for when an array's dimensions are encountered. + /// + /// The array dimensions. + public delegate void ArrayDimensionsDelegate(IEnumerable dimensions); + + /// + /// Delegate for when an object is encountered. + /// + /// The object encountered. + public delegate void ObjectDelegate(object o); + + /// + /// Delegate for when an object's property is encountered. + /// + /// The name of the property. + /// The object possessing the property. + /// The value of the property. + /// true to recursively parse the property value, false to skip it + public delegate bool PropertyDelegate(string propertyName, object o, object val); + } +} diff --git a/FrEee/Utility/ReferenceKeyedDictionary.cs b/FrEee/Serialization/ReferenceKeyedDictionary.cs similarity index 90% rename from FrEee/Utility/ReferenceKeyedDictionary.cs rename to FrEee/Serialization/ReferenceKeyedDictionary.cs index 2a60ccf18..5d6890dd2 100644 --- a/FrEee/Utility/ReferenceKeyedDictionary.cs +++ b/FrEee/Serialization/ReferenceKeyedDictionary.cs @@ -1,199 +1,200 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Utility -{ - public class GalaxyReferenceKeyedDictionary : ReferenceKeyedDictionary, TKey, TValue> - where TKey : IReferrable - { - private SafeDictionary dict = new SafeDictionary(); - - protected override long ExtractID(TKey key) - { - return key.ID; - } - - protected override TKey LookUp(long id) - { - if (!dict.ContainsKey(id)) - dict[id] = (TKey)Galaxy.Current.GetReferrable(id); - return dict[id]; - } - } - - public class ModReferenceKeyedDictionary : ReferenceKeyedDictionary, TKey, TValue> - where TKey : IModObject - { - private SafeDictionary dict = new SafeDictionary(); - - protected override string ExtractID(TKey key) - { - return key.ModID; - } - - protected override TKey LookUp(string id) - { - if (!dict.ContainsKey(id)) - dict[id] = (TKey)Mod.Current.Find(id); - return dict[id]; - } - } - - /// - /// A safe dictionary keyed with transparent references. - /// - public abstract class ReferenceKeyedDictionary : IDictionary, IPromotable, IReferenceEnumerable - where TRef : IReference - { - public ReferenceKeyedDictionary() - { - InitDict(); - } - - public int Count - { - get { InitDict(); return dict.Count; } - } - - public bool IsReadOnly - { - get { InitDict(); return dict.IsReadOnly; } - } - - public ICollection Keys - { - get { InitDict(); return dict.Keys.Select(k => LookUp(k)).ToList(); } - } - - public ICollection Values - { - get { InitDict(); return dict.Values; } - } - - private SafeDictionary dict { get; set; } - - public TValue this[TKey key] - { - get - { - InitDict(); - return dict[ExtractID(key)]; - } - set - { - InitDict(); - var id = ExtractID(key); - dict[id] = value; - } - } - - public void Add(TKey key, TValue value) - { - InitDict(); - var id = ExtractID(key); - dict.Add(id, value); - } - - public void Add(KeyValuePair item) - { - InitDict(); - var id = ExtractID(item.Key); - dict.Add(id, item.Value); - } - - public void Clear() - { - InitDict(); - dict.Clear(); - } - - public bool Contains(KeyValuePair item) - { - InitDict(); - return dict.Contains(new KeyValuePair(ExtractID(item.Key), item.Value)); - } - - public bool ContainsKey(TKey key) - { - InitDict(); - return dict.ContainsKey(ExtractID(key)); - } - - public void CopyTo(KeyValuePair[] array, int arrayIndex) - { - InitDict(); - var d2 = (ICollection>)dict.Select(kvp => new KeyValuePair(LookUp(kvp.Key), kvp.Value)).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); - d2.CopyTo(array, arrayIndex); - } - - public IEnumerator> GetEnumerator() - { - InitDict(); - var objs = dict.Select(kvp => new { Key = kvp.Key, KeyValue = LookUp(kvp.Key), Value = kvp.Value }); - foreach (var obj in objs) - { - if (obj.KeyValue == null) - throw new Exception("Key {0} is an invalid reference.".F(obj.Key)); - } - return objs.Select(obj => new KeyValuePair(obj.KeyValue, obj.Value)).GetEnumerator(); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public bool Remove(TKey key) - { - InitDict(); - return dict.Remove(ExtractID(key)); - } - - public bool Remove(KeyValuePair item) - { - InitDict(); - return dict.Remove(ExtractID(item.Key)); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - InitDict(); - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - foreach (var r in dict.Keys) - { - if (r is IPromotable) - (r as IPromotable).ReplaceClientIDs(idmap, done); - } - } - } - - public bool TryGetValue(TKey key, out TValue value) - { - InitDict(); - return dict.TryGetValue(ExtractID(key), out value); - } - - protected abstract TID ExtractID(TKey key); - - protected abstract TKey LookUp(TID id); - - /// - /// Somehow we can't guarantee that dict will be initialized on freshly instantiated objects otherwise... - /// - private void InitDict() - { - if (dict == null) - dict = new SafeDictionary(); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; +using FrEee.Utility; + +namespace FrEee.Serialization +{ + public class GalaxyReferenceKeyedDictionary : ReferenceKeyedDictionary, TKey, TValue> + where TKey : IReferrable + { + private SafeDictionary dict = new SafeDictionary(); + + protected override long ExtractID(TKey key) + { + return key.ID; + } + + protected override TKey LookUp(long id) + { + if (!dict.ContainsKey(id)) + dict[id] = (TKey)Galaxy.Current.GetReferrable(id); + return dict[id]; + } + } + + public class ModReferenceKeyedDictionary : ReferenceKeyedDictionary, TKey, TValue> + where TKey : IModObject + { + private SafeDictionary dict = new SafeDictionary(); + + protected override string ExtractID(TKey key) + { + return key.ModID; + } + + protected override TKey LookUp(string id) + { + if (!dict.ContainsKey(id)) + dict[id] = Mod.Current.Find(id); + return dict[id]; + } + } + + /// + /// A safe dictionary keyed with transparent references. + /// + public abstract class ReferenceKeyedDictionary : IDictionary, IPromotable, IReferenceEnumerable + where TRef : IReference + { + public ReferenceKeyedDictionary() + { + InitDict(); + } + + public int Count + { + get { InitDict(); return dict.Count; } + } + + public bool IsReadOnly + { + get { InitDict(); return dict.IsReadOnly; } + } + + public ICollection Keys + { + get { InitDict(); return dict.Keys.Select(k => LookUp(k)).ToList(); } + } + + public ICollection Values + { + get { InitDict(); return dict.Values; } + } + + private SafeDictionary dict { get; set; } + + public TValue this[TKey key] + { + get + { + InitDict(); + return dict[ExtractID(key)]; + } + set + { + InitDict(); + var id = ExtractID(key); + dict[id] = value; + } + } + + public void Add(TKey key, TValue value) + { + InitDict(); + var id = ExtractID(key); + dict.Add(id, value); + } + + public void Add(KeyValuePair item) + { + InitDict(); + var id = ExtractID(item.Key); + dict.Add(id, item.Value); + } + + public void Clear() + { + InitDict(); + dict.Clear(); + } + + public bool Contains(KeyValuePair item) + { + InitDict(); + return dict.Contains(new KeyValuePair(ExtractID(item.Key), item.Value)); + } + + public bool ContainsKey(TKey key) + { + InitDict(); + return dict.ContainsKey(ExtractID(key)); + } + + public void CopyTo(KeyValuePair[] array, int arrayIndex) + { + InitDict(); + var d2 = (ICollection>)dict.Select(kvp => new KeyValuePair(LookUp(kvp.Key), kvp.Value)).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + d2.CopyTo(array, arrayIndex); + } + + public IEnumerator> GetEnumerator() + { + InitDict(); + var objs = dict.Select(kvp => new { kvp.Key, KeyValue = LookUp(kvp.Key), kvp.Value }); + foreach (var obj in objs) + { + if (obj.KeyValue == null) + throw new Exception("Key {0} is an invalid reference.".F(obj.Key)); + } + return objs.Select(obj => new KeyValuePair(obj.KeyValue, obj.Value)).GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public bool Remove(TKey key) + { + InitDict(); + return dict.Remove(ExtractID(key)); + } + + public bool Remove(KeyValuePair item) + { + InitDict(); + return dict.Remove(ExtractID(item.Key)); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + InitDict(); + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + foreach (var r in dict.Keys) + { + if (r is IPromotable) + (r as IPromotable).ReplaceClientIDs(idmap, done); + } + } + } + + public bool TryGetValue(TKey key, out TValue value) + { + InitDict(); + return dict.TryGetValue(ExtractID(key), out value); + } + + protected abstract TID ExtractID(TKey key); + + protected abstract TKey LookUp(TID id); + + /// + /// Somehow we can't guarantee that dict will be initialized on freshly instantiated objects otherwise... + /// + private void InitDict() + { + if (dict == null) + dict = new SafeDictionary(); + } + } } \ No newline at end of file diff --git a/FrEee/Utility/ReferenceList.cs b/FrEee/Serialization/ReferenceList.cs similarity index 90% rename from FrEee/Utility/ReferenceList.cs rename to FrEee/Serialization/ReferenceList.cs index aca327ef7..73254f6d4 100644 --- a/FrEee/Utility/ReferenceList.cs +++ b/FrEee/Serialization/ReferenceList.cs @@ -1,131 +1,131 @@ -using System.Collections.Generic; -using System.Linq; -using FrEee.Game.Interfaces; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility.Extensions; - -namespace FrEee.Utility -{ - public class GalaxyReferenceList : ReferenceList, T> - where T : IReferrable - { - } - - public class ModReferenceList : ReferenceList, T> - where T : IModObject - { - } - - public class ReferenceList : IList, IReferenceEnumerable, IPromotable - where TRef : IReference - { - public ReferenceList() - { - list = new List(); - } - - public int Count - { - get { return list.Count; } - } - - public bool IsReadOnly - { - get { return list.IsReadOnly; } - } - - private IList list { get; set; } - - public T this[int index] - { - get - { - return list[index].Value; - } - set - { - list[index] = MakeReference(value); - } - } - - public void Add(T item) - { - list.Add(MakeReference(item)); - } - - public void Clear() - { - list.Clear(); - } - - public bool Contains(T item) - { - return list.Any(r => r.Value.Equals(item)); - } - - public void CopyTo(T[] array, int arrayIndex) - { - list.Select(x => x.Value).ToList().CopyTo(array, arrayIndex); - } - - public IEnumerator GetEnumerator() - { - return list.Select(x => x.Value).GetEnumerator(); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public int IndexOf(T item) - { - if (!list.Any(r => r.Value.Equals(item))) - return -1; - return list.Select((x, i) => new { Item = x, Index = i }).First(x => x.Item.Value.Equals(item)).Index; - } - - public void Insert(int index, T item) - { - list.Insert(index, MakeReference(item)); - } - - public bool Remove(T item) - { - var i = IndexOf(item); - if (i >= 0) - { - list.RemoveAt(i); - return true; - } - else - return false; - } - - public void RemoveAt(int index) - { - list.RemoveAt(index); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - foreach (var r in list) - { - if (r is IPromotable) - (r as IPromotable).ReplaceClientIDs(idmap, done); - } - } - } - - private static TRef MakeReference(T item) - { - return (TRef)typeof(TRef).Instantiate(item); - } - } -} \ No newline at end of file +using System.Collections.Generic; +using System.Linq; +using FrEee.Interfaces; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Extensions; + +namespace FrEee.Serialization +{ + public class GalaxyReferenceList : ReferenceList, T> + where T : IReferrable + { + } + + public class ModReferenceList : ReferenceList, T> + where T : IModObject + { + } + + public class ReferenceList : IList, IReferenceEnumerable, IPromotable + where TRef : IReference + { + public ReferenceList() + { + list = new List(); + } + + public int Count + { + get { return list.Count; } + } + + public bool IsReadOnly + { + get { return list.IsReadOnly; } + } + + private IList list { get; set; } + + public T this[int index] + { + get + { + return list[index].Value; + } + set + { + list[index] = MakeReference(value); + } + } + + public void Add(T item) + { + list.Add(MakeReference(item)); + } + + public void Clear() + { + list.Clear(); + } + + public bool Contains(T item) + { + return list.Any(r => r.Value.Equals(item)); + } + + public void CopyTo(T[] array, int arrayIndex) + { + list.Select(x => x.Value).ToList().CopyTo(array, arrayIndex); + } + + public IEnumerator GetEnumerator() + { + return list.Select(x => x.Value).GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public int IndexOf(T item) + { + if (!list.Any(r => r.Value.Equals(item))) + return -1; + return list.Select((x, i) => new { Item = x, Index = i }).First(x => x.Item.Value.Equals(item)).Index; + } + + public void Insert(int index, T item) + { + list.Insert(index, MakeReference(item)); + } + + public bool Remove(T item) + { + var i = IndexOf(item); + if (i >= 0) + { + list.RemoveAt(i); + return true; + } + else + return false; + } + + public void RemoveAt(int index) + { + list.RemoveAt(index); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + foreach (var r in list) + { + if (r is IPromotable) + (r as IPromotable).ReplaceClientIDs(idmap, done); + } + } + } + + private static TRef MakeReference(T item) + { + return (TRef)typeof(TRef).Instantiate(item); + } + } +} diff --git a/FrEee/Utility/ReferenceSet.cs b/FrEee/Serialization/ReferenceSet.cs similarity index 76% rename from FrEee/Utility/ReferenceSet.cs rename to FrEee/Serialization/ReferenceSet.cs index 152f6fbaf..e7ecec022 100644 --- a/FrEee/Utility/ReferenceSet.cs +++ b/FrEee/Serialization/ReferenceSet.cs @@ -1,226 +1,226 @@ -using FrEee.Game.Interfaces; -using FrEee.Modding; -using FrEee.Modding.Interfaces; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Utility -{ - [Serializable] - public class GalaxyReferenceSet : ReferenceSet, T> - where T : IReferrable - { - public GalaxyReferenceSet() - : base() - { - } - - public GalaxyReferenceSet(IEnumerable objs) - : base(objs) - { - } - } - - [Serializable] - public class ModReferenceSet : ReferenceSet, T> - where T : IModObject - { - public ModReferenceSet() - : base() - { - } - - public ModReferenceSet(IEnumerable objs) - : base(objs) - { - } - } - - /// - /// A set of references. - /// - /// - [Serializable] - public class ReferenceSet : ISet, IPromotable, IReferenceEnumerable - where TRef : IReference - { - public ReferenceSet() - { - set = new HashSet(); - } - - public ReferenceSet(IEnumerable objs) - : this() - { - foreach (var obj in objs) - Add(obj); - } - - public int Count - { - get { return set.Count; } - } - - public bool IsReadOnly - { - get { return false; } - } - - private HashSet set { get; set; } - - private bool isSetDirty = true; - - private ISet _Set; - - private ISet Set - { - get - { - if (isSetDirty) - { - _Set = new HashSet(set.Select(r => r.Value)); - isSetDirty = false; - } - return _Set; - } - } - - public bool Add(T item) - { - isSetDirty = true; - return set.Add(MakeReference(item)); - } - - void ICollection.Add(T item) - { - isSetDirty = true; - set.Add(MakeReference(item)); - } - - public void Clear() - { - isSetDirty = true; - set.Clear(); - } - - public bool Contains(T item) - { - return Set.Contains(item); - } - - public void CopyTo(T[] array, int arrayIndex) - { - Set.CopyTo(array, arrayIndex); - } - - public void ExceptWith(IEnumerable other) - { - isSetDirty = true; - set.Clear(); - var result = Set; - result.ExceptWith(other); - foreach (var item in result) - Add(item); - } - - public IEnumerator GetEnumerator() - { - return Set.GetEnumerator(); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - public void IntersectWith(IEnumerable other) - { - isSetDirty = true; - set.Clear(); - var result = Set; - result.IntersectWith(other); - foreach (var item in result) - Add(item); - } - - public bool IsProperSubsetOf(IEnumerable other) - { - return Set.IsProperSubsetOf(other); - } - - public bool IsProperSupersetOf(IEnumerable other) - { - return Set.IsProperSupersetOf(other); - } - - public bool IsSubsetOf(IEnumerable other) - { - return Set.IsSubsetOf(other); - } - - public bool IsSupersetOf(IEnumerable other) - { - return Set.IsSupersetOf(other); - } - - public bool Overlaps(IEnumerable other) - { - return Set.Overlaps(other); - } - - public bool Remove(T item) - { - isSetDirty = true; - if (item == null) - return set.RemoveWhere(x => !x.HasValue) > 0; // TODO - remvoe only one null? - else - return set.Remove(MakeReference(item)); - } - - public void ReplaceClientIDs(IDictionary idmap, ISet done = null) - { - if (done == null) - done = new HashSet(); - if (!done.Contains(this)) - { - done.Add(this); - foreach (var r in set.OfType()) - r.ReplaceClientIDs(idmap, done); - } - } - - public bool SetEquals(IEnumerable other) - { - return Set.SetEquals(other); - } - - public void SymmetricExceptWith(IEnumerable other) - { - isSetDirty = true; - set.Clear(); - var result = Set; - result.SymmetricExceptWith(other); - foreach (var item in result) - Add(item); - } - - public void UnionWith(IEnumerable other) - { - isSetDirty = true; - set.Clear(); - var result = Set; - result.UnionWith(other); - foreach (var item in result) - Add(item); - } - - private static TRef MakeReference(T item) - { - if (item == null) - return (TRef)typeof(TRef).Instantiate(); - return (TRef)typeof(TRef).Instantiate(item); - } - } +using FrEee.Interfaces; +using FrEee.Modding; +using FrEee.Modding.Interfaces; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Serialization +{ + [Serializable] + public class GalaxyReferenceSet : ReferenceSet, T> + where T : IReferrable + { + public GalaxyReferenceSet() + : base() + { + } + + public GalaxyReferenceSet(IEnumerable objs) + : base(objs) + { + } + } + + [Serializable] + public class ModReferenceSet : ReferenceSet, T> + where T : IModObject + { + public ModReferenceSet() + : base() + { + } + + public ModReferenceSet(IEnumerable objs) + : base(objs) + { + } + } + + /// + /// A set of references. + /// + /// + [Serializable] + public class ReferenceSet : ISet, IPromotable, IReferenceEnumerable + where TRef : IReference + { + public ReferenceSet() + { + set = new HashSet(); + } + + public ReferenceSet(IEnumerable objs) + : this() + { + foreach (var obj in objs) + Add(obj); + } + + public int Count + { + get { return set.Count; } + } + + public bool IsReadOnly + { + get { return false; } + } + + private HashSet set { get; set; } + + private bool isSetDirty = true; + + private ISet _Set; + + private ISet Set + { + get + { + if (isSetDirty) + { + _Set = new HashSet(set.Select(r => r.Value)); + isSetDirty = false; + } + return _Set; + } + } + + public bool Add(T item) + { + isSetDirty = true; + return set.Add(MakeReference(item)); + } + + void ICollection.Add(T item) + { + isSetDirty = true; + set.Add(MakeReference(item)); + } + + public void Clear() + { + isSetDirty = true; + set.Clear(); + } + + public bool Contains(T item) + { + return Set.Contains(item); + } + + public void CopyTo(T[] array, int arrayIndex) + { + Set.CopyTo(array, arrayIndex); + } + + public void ExceptWith(IEnumerable other) + { + isSetDirty = true; + set.Clear(); + var result = Set; + result.ExceptWith(other); + foreach (var item in result) + Add(item); + } + + public IEnumerator GetEnumerator() + { + return Set.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public void IntersectWith(IEnumerable other) + { + isSetDirty = true; + set.Clear(); + var result = Set; + result.IntersectWith(other); + foreach (var item in result) + Add(item); + } + + public bool IsProperSubsetOf(IEnumerable other) + { + return Set.IsProperSubsetOf(other); + } + + public bool IsProperSupersetOf(IEnumerable other) + { + return Set.IsProperSupersetOf(other); + } + + public bool IsSubsetOf(IEnumerable other) + { + return Set.IsSubsetOf(other); + } + + public bool IsSupersetOf(IEnumerable other) + { + return Set.IsSupersetOf(other); + } + + public bool Overlaps(IEnumerable other) + { + return Set.Overlaps(other); + } + + public bool Remove(T item) + { + isSetDirty = true; + if (item == null) + return set.RemoveWhere(x => !x.HasValue) > 0; // TODO - remvoe only one null? + else + return set.Remove(MakeReference(item)); + } + + public void ReplaceClientIDs(IDictionary idmap, ISet done = null) + { + if (done == null) + done = new HashSet(); + if (!done.Contains(this)) + { + done.Add(this); + foreach (var r in set.OfType()) + r.ReplaceClientIDs(idmap, done); + } + } + + public bool SetEquals(IEnumerable other) + { + return Set.SetEquals(other); + } + + public void SymmetricExceptWith(IEnumerable other) + { + isSetDirty = true; + set.Clear(); + var result = Set; + result.SymmetricExceptWith(other); + foreach (var item in result) + Add(item); + } + + public void UnionWith(IEnumerable other) + { + isSetDirty = true; + set.Clear(); + var result = Set; + result.UnionWith(other); + foreach (var item in result) + Add(item); + } + + private static TRef MakeReference(T item) + { + if (item == null) + return (TRef)typeof(TRef).Instantiate(); + return (TRef)typeof(TRef).Instantiate(item); + } + } } \ No newline at end of file diff --git a/FrEee/Serialization/Serializer.cs b/FrEee/Serialization/Serializer.cs new file mode 100644 index 000000000..04305b075 --- /dev/null +++ b/FrEee/Serialization/Serializer.cs @@ -0,0 +1,161 @@ +using Newtonsoft.Json; +using System; +using System.IO; +using System.Runtime.Serialization; +using System.Text; + +namespace FrEee.Serialization; + +/// +/// Serializes and deserializes objects. +/// +public static class Serializer +{ + private const bool EnableJsonSerializer = false; + + public static bool IsDeserializing { get; private set; } + + public static T Deserialize(string s) + { + IsDeserializing = true; + T t; + using (MemoryStream stream = new MemoryStream()) + { + var sw = new StreamWriter(stream); + sw.Write(s); + sw.Flush(); + stream.Seek(0, SeekOrigin.Begin); + t = Deserialize(stream); + } + IsDeserializing = false; + return t; + } + + public static T Deserialize(Stream str) + { + return (T)Deserialize(str); + } + + public static object Deserialize(Stream str) + { + try + { + // TODO - enable JSON serializer + IsDeserializing = true; + var result = LegacySerializer.Deserialize(str); + IsDeserializing = false; + return result; + } + catch (JsonException ex) + { + Console.Error.WriteLine("Could not deserialize using JSON serializer. Attempting to use legacy serializer. Error dump follows:"); + Console.Error.WriteLine(ex); + try + { + return LegacySerializer.Deserialize(str); + } + catch (SerializationException ex2) + { + Console.Error.WriteLine("Could not deserialize using legacy serializer. Error dump follows:"); + Console.Error.WriteLine(ex2); + } + throw new Exception("Unable to deserialize. Please check stderr.txt for details."); + + } + } + + public static T DeserializeFromString(string s) + { + return (T)DeserializeFromString(s); + } + + public static object DeserializeFromString(string s) + { + if (EnableJsonSerializer) + { + // warning disabled because code waits for the TODO - enable JSON serializer +#pragma warning disable CS0162 // Unreachable code detected + var js = new JsonSerializer(); + return js.DeserializeFromString(s); +#pragma warning restore CS0162 // Unreachable code detected + } + else + { + IsDeserializing = true; + var sr = new StringReader(s); + var result = LegacySerializer.Deserialize(sr); + IsDeserializing = false; + return result; + } + } + + public static void Serialize(object o, TextWriter w) + { + if (EnableJsonSerializer) + { + // TODO - enable JSON serializer + throw new Exception("JSON serializer isn't configured"); + } + else + LegacySerializer.Serialize(o, w, typeof(object)); + } + + public static void Serialize(object o, Stream s) + { + var sw = new StreamWriter(s); + Serialize(o, sw); + sw.Flush(); + } + + public static string SerializeToString(object o) + { + if (EnableJsonSerializer) + { + // warning disabled because code waits for the TODO - enable JSON serializer +#pragma warning disable CS0162 // Unreachable code detected + var js = new JsonSerializer(); + return js.SerializeToString(o); +#pragma warning restore CS0162 // Unreachable code detected + } + else + { + var sw = new StringWriter(); + LegacySerializer.Serialize(o, sw, typeof(object)); + return sw.ToString(); + } + } +} + +/// +/// Prevents a property from being serialized, or copied when the containing object is copied. +/// +[AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = false)] +public sealed class DoNotSerializeAttribute : DoNotCopyAttribute +{ + public DoNotSerializeAttribute(bool allowSafeCopy = true) + : base(allowSafeCopy) + { + } +} + +[AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = false)] +public sealed class SerializationPriorityAttribute : Attribute +{ + public SerializationPriorityAttribute(int priority) + { + Priority = priority; + } + + public int Priority { get; private set; } +} + +/// +/// Forces serialization of a property even when it has a default value, e.g. null or zero. +/// +[AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = false)] +public sealed class ForceSerializationWhenDefaultValueAttribute : Attribute +{ + public ForceSerializationWhenDefaultValueAttribute() + { + } +} diff --git a/FrEee/Utility/SimpleDataObject.cs b/FrEee/Serialization/SimpleDataObject.cs similarity index 93% rename from FrEee/Utility/SimpleDataObject.cs rename to FrEee/Serialization/SimpleDataObject.cs index bbf512826..c36cf5835 100644 --- a/FrEee/Utility/SimpleDataObject.cs +++ b/FrEee/Serialization/SimpleDataObject.cs @@ -1,187 +1,188 @@ -using FrEee.Utility.Extensions; -using Newtonsoft.Json; -using System; -using static FrEee.Utility.Extensions.CommonExtensions; - -namespace FrEee.Utility -{ - public interface ISimpleDataObject : IDataObject - { - ObjectGraphContext Context { get; set; } - int ID { get; } - - SafeDictionary SimpleData - { - get; set; - } - - object Value { get; } - - void InitializeData(ObjectGraphContext ctx = null); - - void InitializeValue(ObjectGraphContext ctx = null); - } - - /// - /// A data object which breaks objects down into scalars and references. - /// - public class SimpleDataObject : MarshalByRefObject, ISimpleDataObject - { - public SimpleDataObject() - { - Context = new ObjectGraphContext(); - Type = typeof(object); - } - - public SimpleDataObject(object o, ObjectGraphContext ctx = null) - { - Context = ctx ?? new ObjectGraphContext(); - if (o != null) - { - Type = o.GetType(); - if (Context.GetID(o) == null) - ID = Context.Add(o); - Data = o.GetData(ctx); - } - else - { - Type = null; - Data = new SafeDictionary(); - ID = -1; - } - } - - public SimpleDataObject(SafeDictionary simpleData, ObjectGraphContext ctx = null) - { - SimpleData = simpleData; - Context = ctx ?? new ObjectGraphContext(); - } - - [JsonIgnore] - [field: NonSerialized] - public ObjectGraphContext Context { get; set; } - - [JsonIgnore] - public SafeDictionary Data - { - get - { - var dict = new SafeDictionary(); - foreach (var pname in SimpleData.Keys.ExceptSingle("!type").ExceptSingle("!id")) - dict[pname] = SimpleData[pname]?.Value; - return dict; - } - set - { - var id = ID; // save it off so we don't forget - SimpleData = new SafeDictionary(); - ID = id; // restore it - SimpleData["!type"] = new DataScalar(new SafeType(Type).Name); - if (Context == null) - Context = new ObjectGraphContext(); - foreach (var pname in value.Keys) - { - var pval = value[pname]; - if (pval == null) - SimpleData[pname] = null; - else if (pval.GetType().IsScalar()) - SimpleData[pname] = DataScalar.Create(pval); - else - SimpleData[pname] = (IData)typeof(DataReference<>).MakeGenericType(pval.GetType()).Instantiate(Context, pval); - } - } - } - - [JsonIgnore] - public int ID - { - get - { - if (SimpleData == null) - return 0; - return (int?)SimpleData["!id"]?.Value ?? 0; - } - private set - { - if (SimpleData == null) - SimpleData = new SafeDictionary(); - SimpleData["!id"] = new DataScalar(value); - } - } - - public SafeDictionary SimpleData - { - get; set; - } - - public SafeType Type { get; private set; } - - [JsonIgnore] - public object Value - { - get - { - if (value == null) - { - var kos = Context.KnownObjects[Type]; - if (kos != null && kos.Count > ID) - value = kos[ID]; - else - { - var t = Type.Type.Instantiate(); - Context.Add(t); - value = t; - } - } - return value; - } - set - { - Data = value.GetData(Context); - } - } - - object ISimpleDataObject.Value - { - get { return Value; } - } - - [NonSerialized] - private object value; - - public static ISimpleDataObject Create(object o, ObjectGraphContext ctx = null) - { - if (o == null) - return null; - var t = o.GetType(); - return new SimpleDataObject(o, ctx); - } - - public static ISimpleDataObject Load(SafeDictionary simpleData, ObjectGraphContext ctx = null) - { - if (simpleData == null) - return null; - var t = new SafeType(simpleData["!type"].Value as string).Type; - return new SimpleDataObject(simpleData, ctx); - } - - public void InitializeData(ObjectGraphContext ctx = null) - { - Data = Value.GetData(ctx ?? Context); - } - - public void InitializeValue(ObjectGraphContext ctx = null) - { - if (Context.GetID(Value) == null) - Context.Add(Value); - Value.SetData(Data, ctx ?? Context); - } - - public T Reconstitute(ObjectGraphContext ctx = null) - { - var result = (T)typeof(T).Instantiate(); - result.SetData(Data, ctx ?? new ObjectGraphContext()); - return result; - } - } -} \ No newline at end of file +using FrEee.Extensions; +using FrEee.Utility; using FrEee.Serialization; +using Newtonsoft.Json; +using System; +using static FrEee.Extensions.CommonExtensions; + +namespace FrEee.Serialization +{ + public interface ISimpleDataObject : IDataObject + { + ObjectGraphContext Context { get; set; } + int ID { get; } + + SafeDictionary SimpleData + { + get; set; + } + + object Value { get; } + + void InitializeData(ObjectGraphContext ctx = null); + + void InitializeValue(ObjectGraphContext ctx = null); + } + + /// + /// A data object which breaks objects down into scalars and references. + /// + public class SimpleDataObject : MarshalByRefObject, ISimpleDataObject + { + public SimpleDataObject() + { + Context = new ObjectGraphContext(); + Type = typeof(object); + } + + public SimpleDataObject(object o, ObjectGraphContext ctx = null) + { + Context = ctx ?? new ObjectGraphContext(); + if (o != null) + { + Type = o.GetType(); + if (Context.GetID(o) == null) + ID = Context.Add(o); + Data = o.GetData(ctx); + } + else + { + Type = null; + Data = new SafeDictionary(); + ID = -1; + } + } + + public SimpleDataObject(SafeDictionary simpleData, ObjectGraphContext ctx = null) + { + SimpleData = simpleData; + Context = ctx ?? new ObjectGraphContext(); + } + + [JsonIgnore] + [field: NonSerialized] + public ObjectGraphContext Context { get; set; } + + [JsonIgnore] + public SafeDictionary Data + { + get + { + var dict = new SafeDictionary(); + foreach (var pname in SimpleData.Keys.ExceptSingle("!type").ExceptSingle("!id")) + dict[pname] = SimpleData[pname]?.Value; + return dict; + } + set + { + var id = ID; // save it off so we don't forget + SimpleData = new SafeDictionary(); + ID = id; // restore it + SimpleData["!type"] = new DataScalar(new SafeType(Type).Name); + if (Context == null) + Context = new ObjectGraphContext(); + foreach (var pname in value.Keys) + { + var pval = value[pname]; + if (pval == null) + SimpleData[pname] = null; + else if (pval.GetType().IsScalar()) + SimpleData[pname] = DataScalar.Create(pval); + else + SimpleData[pname] = (IData)typeof(DataReference<>).MakeGenericType(pval.GetType()).Instantiate(Context, pval); + } + } + } + + [JsonIgnore] + public int ID + { + get + { + if (SimpleData == null) + return 0; + return (int?)SimpleData["!id"]?.Value ?? 0; + } + private set + { + if (SimpleData == null) + SimpleData = new SafeDictionary(); + SimpleData["!id"] = new DataScalar(value); + } + } + + public SafeDictionary SimpleData + { + get; set; + } + + public SafeType Type { get; private set; } + + [JsonIgnore] + public object Value + { + get + { + if (value == null) + { + var kos = Context.KnownObjects[Type]; + if (kos != null && kos.Count > ID) + value = kos[ID]; + else + { + var t = Type.Type.Instantiate(); + Context.Add(t); + value = t; + } + } + return value; + } + set + { + Data = value.GetData(Context); + } + } + + object ISimpleDataObject.Value + { + get { return Value; } + } + + [NonSerialized] + private object value; + + public static ISimpleDataObject Create(object o, ObjectGraphContext ctx = null) + { + if (o == null) + return null; + var t = o.GetType(); + return new SimpleDataObject(o, ctx); + } + + public static ISimpleDataObject Load(SafeDictionary simpleData, ObjectGraphContext ctx = null) + { + if (simpleData == null) + return null; + var t = new SafeType(simpleData["!type"].Value as string).Type; + return new SimpleDataObject(simpleData, ctx); + } + + public void InitializeData(ObjectGraphContext ctx = null) + { + Data = Value.GetData(ctx ?? Context); + } + + public void InitializeValue(ObjectGraphContext ctx = null) + { + if (Context.GetID(Value) == null) + Context.Add(Value); + Value.SetData(Data, ctx ?? Context); + } + + public T Reconstitute(ObjectGraphContext ctx = null) + { + var result = (T)typeof(T).Instantiate(); + result.SetData(Data, ctx ?? new ObjectGraphContext()); + return result; + } + } +} diff --git a/FrEee/Utility/Stringifiers/DoubleLiteralFormulaStringifier.cs b/FrEee/Serialization/Stringifiers/DoubleLiteralFormulaStringifier.cs similarity index 85% rename from FrEee/Utility/Stringifiers/DoubleLiteralFormulaStringifier.cs rename to FrEee/Serialization/Stringifiers/DoubleLiteralFormulaStringifier.cs index a61de712d..d0e74e1d1 100644 --- a/FrEee/Utility/Stringifiers/DoubleLiteralFormulaStringifier.cs +++ b/FrEee/Serialization/Stringifiers/DoubleLiteralFormulaStringifier.cs @@ -1,25 +1,25 @@ -using FrEee.Modding; -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Stringifiers -{ - [Export(typeof(IStringifier))] - public class DoubleLiteralFormulaStringifier : Stringifier> - { - public override LiteralFormula Destringify(string s) - { - return new LiteralFormula(s); - } - - public override string Stringify(LiteralFormula t) - { - return t.Text; - } - } -} +using FrEee.Modding; +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Serialization.Stringifiers +{ + [Export(typeof(IStringifier))] + public class DoubleLiteralFormulaStringifier : Stringifier> + { + public override LiteralFormula Destringify(string s) + { + return new LiteralFormula(s); + } + + public override string Stringify(LiteralFormula t) + { + return t.Text; + } + } +} diff --git a/FrEee/Utility/Stringifiers/IStringifier.cs b/FrEee/Serialization/Stringifiers/IStringifier.cs similarity index 86% rename from FrEee/Utility/Stringifiers/IStringifier.cs rename to FrEee/Serialization/Stringifiers/IStringifier.cs index 8c8f4534a..05db03d58 100644 --- a/FrEee/Utility/Stringifiers/IStringifier.cs +++ b/FrEee/Serialization/Stringifiers/IStringifier.cs @@ -1,21 +1,21 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Stringifiers -{ - public interface IStringifier - { - Type SupportedType { get; } - string Stringify(object o); - object Destringify(string s); - } - - public interface IStringifier : IStringifier - { - string Stringify(T t); - new T Destringify(string s); - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Serialization.Stringifiers +{ + public interface IStringifier + { + Type SupportedType { get; } + string Stringify(object o); + object Destringify(string s); + } + + public interface IStringifier : IStringifier + { + string Stringify(T t); + new T Destringify(string s); + } +} diff --git a/FrEee/Utility/Stringifiers/IntLiteralFormulaStringifier.cs b/FrEee/Serialization/Stringifiers/IntLiteralFormulaStringifier.cs similarity index 89% rename from FrEee/Utility/Stringifiers/IntLiteralFormulaStringifier.cs rename to FrEee/Serialization/Stringifiers/IntLiteralFormulaStringifier.cs index 075cb8d3b..2444fd1ce 100644 --- a/FrEee/Utility/Stringifiers/IntLiteralFormulaStringifier.cs +++ b/FrEee/Serialization/Stringifiers/IntLiteralFormulaStringifier.cs @@ -1,25 +1,25 @@ -using FrEee.Modding; -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Stringifiers -{ - [Export(typeof(IStringifier))] - public class IntLiteralFormulaStringifier : Stringifier> - { - public override LiteralFormula Destringify(string s) - { - return new LiteralFormula(s); - } - - public override string Stringify(LiteralFormula t) - { - return t.Text; - } - } -} +using FrEee.Modding; +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Serialization.Stringifiers +{ + [Export(typeof(IStringifier))] + public class IntLiteralFormulaStringifier : Stringifier> + { + public override LiteralFormula Destringify(string s) + { + return new LiteralFormula(s); + } + + public override string Stringify(LiteralFormula t) + { + return t.Text; + } + } +} diff --git a/FrEee/Utility/Stringifiers/PointStringifier.cs b/FrEee/Serialization/Stringifiers/PointStringifier.cs similarity index 89% rename from FrEee/Utility/Stringifiers/PointStringifier.cs rename to FrEee/Serialization/Stringifiers/PointStringifier.cs index 1835784f0..9b8f753fd 100644 --- a/FrEee/Utility/Stringifiers/PointStringifier.cs +++ b/FrEee/Serialization/Stringifiers/PointStringifier.cs @@ -1,25 +1,25 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Stringifiers -{ - [Export(typeof(IStringifier))] - public class SizeStringifier : Stringifier - { - public override Size Destringify(string s) - { - var split = s.Split(',').Select(x => x.Trim()).ToArray(); - return new Size(int.Parse(split[0]), int.Parse(split[1])); - } - - public override string Stringify(Size t) - { - return $"{t.Width}, {t.Height}"; - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Serialization.Stringifiers +{ + [Export(typeof(IStringifier))] + public class SizeStringifier : Stringifier + { + public override Size Destringify(string s) + { + var split = s.Split(',').Select(x => x.Trim()).ToArray(); + return new Size(int.Parse(split[0]), int.Parse(split[1])); + } + + public override string Stringify(Size t) + { + return $"{t.Width}, {t.Height}"; + } + } +} diff --git a/FrEee/Utility/Stringifiers/PopulationModifierStringifier.cs b/FrEee/Serialization/Stringifiers/PopulationModifierStringifier.cs similarity index 91% rename from FrEee/Utility/Stringifiers/PopulationModifierStringifier.cs rename to FrEee/Serialization/Stringifiers/PopulationModifierStringifier.cs index 94918d593..25db84163 100644 --- a/FrEee/Utility/Stringifiers/PopulationModifierStringifier.cs +++ b/FrEee/Serialization/Stringifiers/PopulationModifierStringifier.cs @@ -1,31 +1,31 @@ -using FrEee.Modding; -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Stringifiers -{ - [Export(typeof(IStringifier))] - public class PopulationModifierStringifier : Stringifier - { - public override PopulationModifier Destringify(string s) - { - var split = s.Split(',').Select(x => x.Trim()).ToArray(); - return new PopulationModifier - { - PopulationAmount = long.Parse(split[0]), - ProductionRate = int.Parse(split[1]), - ConstructionRate = int.Parse(split[2]), - }; - } - - public override string Stringify(PopulationModifier t) - { - return $"{t.PopulationAmount}, {t.ProductionRate}, {t.ConstructionRate}"; - } - } -} +using FrEee.Modding; +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Serialization.Stringifiers +{ + [Export(typeof(IStringifier))] + public class PopulationModifierStringifier : Stringifier + { + public override PopulationModifier Destringify(string s) + { + var split = s.Split(',').Select(x => x.Trim()).ToArray(); + return new PopulationModifier + { + PopulationAmount = long.Parse(split[0]), + ProductionRate = int.Parse(split[1]), + ConstructionRate = int.Parse(split[2]), + }; + } + + public override string Stringify(PopulationModifier t) + { + return $"{t.PopulationAmount}, {t.ProductionRate}, {t.ConstructionRate}"; + } + } +} diff --git a/FrEee/Utility/Stringifiers/ResourceQuantityStringifier.cs b/FrEee/Serialization/Stringifiers/ResourceQuantityStringifier.cs similarity index 84% rename from FrEee/Utility/Stringifiers/ResourceQuantityStringifier.cs rename to FrEee/Serialization/Stringifiers/ResourceQuantityStringifier.cs index ca01a9036..c94074c83 100644 --- a/FrEee/Utility/Stringifiers/ResourceQuantityStringifier.cs +++ b/FrEee/Serialization/Stringifiers/ResourceQuantityStringifier.cs @@ -1,25 +1,26 @@ -using FrEee.Modding; -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Stringifiers -{ - [Export(typeof(IStringifier))] - public class ResourceQuantityStringifier : Stringifier - { - public override ResourceQuantity Destringify(string s) - { - return ResourceQuantity.Parse(s); - } - - public override string Stringify(ResourceQuantity t) - { - return t.ToString(); - } - } -} +using FrEee.Modding; +using FrEee.Utility; +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Serialization.Stringifiers +{ + [Export(typeof(IStringifier))] + public class ResourceQuantityStringifier : Stringifier + { + public override ResourceQuantity Destringify(string s) + { + return ResourceQuantity.Parse(s); + } + + public override string Stringify(ResourceQuantity t) + { + return t.ToString(); + } + } +} diff --git a/FrEee/Utility/Stringifiers/SizeStringifier.cs b/FrEee/Serialization/Stringifiers/SizeStringifier.cs similarity index 89% rename from FrEee/Utility/Stringifiers/SizeStringifier.cs rename to FrEee/Serialization/Stringifiers/SizeStringifier.cs index d5a1c50a4..9123cfdd2 100644 --- a/FrEee/Utility/Stringifiers/SizeStringifier.cs +++ b/FrEee/Serialization/Stringifiers/SizeStringifier.cs @@ -1,25 +1,25 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Stringifiers -{ - [Export(typeof(IStringifier))] - public class PointStringifier : Stringifier - { - public override Point Destringify(string s) - { - var split = s.Split(',').Select(x => x.Trim()).ToArray(); - return new Point(int.Parse(split[0]), int.Parse(split[1])); - } - - public override string Stringify(Point t) - { - return $"{t.X}, {t.Y}"; - } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Serialization.Stringifiers +{ + [Export(typeof(IStringifier))] + public class PointStringifier : Stringifier + { + public override Point Destringify(string s) + { + var split = s.Split(',').Select(x => x.Trim()).ToArray(); + return new Point(int.Parse(split[0]), int.Parse(split[1])); + } + + public override string Stringify(Point t) + { + return $"{t.X}, {t.Y}"; + } + } +} diff --git a/FrEee/Utility/Stringifiers/StringLiteralFormulaStringifier.cs b/FrEee/Serialization/Stringifiers/StringLiteralFormulaStringifier.cs similarity index 89% rename from FrEee/Utility/Stringifiers/StringLiteralFormulaStringifier.cs rename to FrEee/Serialization/Stringifiers/StringLiteralFormulaStringifier.cs index 2ed03eb65..1d0a6be6b 100644 --- a/FrEee/Utility/Stringifiers/StringLiteralFormulaStringifier.cs +++ b/FrEee/Serialization/Stringifiers/StringLiteralFormulaStringifier.cs @@ -1,25 +1,25 @@ -using FrEee.Modding; -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Stringifiers -{ - [Export(typeof(IStringifier))] - public class StringLiteralFormulaStringifier : Stringifier> - { - public override LiteralFormula Destringify(string s) - { - return new LiteralFormula(s); - } - - public override string Stringify(LiteralFormula t) - { - return t.Text; - } - } -} +using FrEee.Modding; +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Serialization.Stringifiers +{ + [Export(typeof(IStringifier))] + public class StringLiteralFormulaStringifier : Stringifier> + { + public override LiteralFormula Destringify(string s) + { + return new LiteralFormula(s); + } + + public override string Stringify(LiteralFormula t) + { + return t.Text; + } + } +} diff --git a/FrEee/Utility/Stringifiers/Stringifier.cs b/FrEee/Serialization/Stringifiers/Stringifier.cs similarity index 86% rename from FrEee/Utility/Stringifiers/Stringifier.cs rename to FrEee/Serialization/Stringifiers/Stringifier.cs index 0b4ce7b04..9aab42fb3 100644 --- a/FrEee/Utility/Stringifiers/Stringifier.cs +++ b/FrEee/Serialization/Stringifiers/Stringifier.cs @@ -1,32 +1,32 @@ -using FrEee.Game.Objects.Space; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Stringifiers -{ - public abstract class Stringifier : IStringifier - { - public Type SupportedType => typeof(T); - - public abstract T Destringify(string s); - - public abstract string Stringify(T t); - - public string Stringify(object o) - { - if (o == null) - return null; - if (typeof(T).IsAssignableFrom(o.GetType())) - return Stringify((T)o); - throw new ArgumentException($"Stringifier of type {typeof(T)} can't stringify objects of type {o.GetType()}"); - } - - object IStringifier.Destringify(string s) - { - return Destringify(s); - } - } -} +using FrEee.Objects.Space; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Serialization.Stringifiers +{ + public abstract class Stringifier : IStringifier + { + public Type SupportedType => typeof(T); + + public abstract T Destringify(string s); + + public abstract string Stringify(T t); + + public string Stringify(object o) + { + if (o == null) + return null; + if (typeof(T).IsAssignableFrom(o.GetType())) + return Stringify((T)o); + throw new ArgumentException($"Stringifier of type {typeof(T)} can't stringify objects of type {o.GetType()}"); + } + + object IStringifier.Destringify(string s) + { + return Destringify(s); + } + } +} diff --git a/FrEee/Utility/Stringifiers/StringifierLibrary.cs b/FrEee/Serialization/Stringifiers/StringifierLibrary.cs similarity index 91% rename from FrEee/Utility/Stringifiers/StringifierLibrary.cs rename to FrEee/Serialization/Stringifiers/StringifierLibrary.cs index dad880a66..45c9ecdfd 100644 --- a/FrEee/Utility/Stringifiers/StringifierLibrary.cs +++ b/FrEee/Serialization/Stringifiers/StringifierLibrary.cs @@ -1,28 +1,28 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.Composition; -using System.ComponentModel.Composition.Hosting; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace FrEee.Utility.Stringifiers -{ - public class StringifierLibrary - { - private CompositionContainer container; - - public static StringifierLibrary Instance { get; private set; } = new StringifierLibrary(); - - private StringifierLibrary() - { - var catalog = new AggregateCatalog(); - catalog.Catalogs.Add(new AssemblyCatalog(typeof(IStringifier).Assembly)); - container = new CompositionContainer(catalog); - container.ComposeParts(this); - } - - [ImportMany(typeof(IStringifier))] - public IEnumerable All { get; private set; } - } -} +using System; +using System.Collections.Generic; +using System.ComponentModel.Composition; +using System.ComponentModel.Composition.Hosting; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FrEee.Serialization.Stringifiers +{ + public class StringifierLibrary + { + private CompositionContainer container; + + public static StringifierLibrary Instance { get; private set; } = new StringifierLibrary(); + + private StringifierLibrary() + { + var catalog = new AggregateCatalog(); + catalog.Catalogs.Add(new AssemblyCatalog(typeof(IStringifier).Assembly)); + container = new CompositionContainer(catalog); + container.ComposeParts(this); + } + + [ImportMany(typeof(IStringifier))] + public IEnumerable All { get; private set; } + } +} diff --git a/FrEee/Game/Setup/EmpireTemplate.cs b/FrEee/Setup/EmpireTemplate.cs similarity index 93% rename from FrEee/Game/Setup/EmpireTemplate.cs rename to FrEee/Setup/EmpireTemplate.cs index c4fbc2daa..62d9f6872 100644 --- a/FrEee/Game/Setup/EmpireTemplate.cs +++ b/FrEee/Setup/EmpireTemplate.cs @@ -1,191 +1,191 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Modding; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; - -namespace FrEee.Game.Setup -{ - /// - /// A template for configuring an empire. - /// - public class EmpireTemplate : ITemplate - { - public EmpireTemplate() - { - } - - /// - /// The name of the AI used by this empire. - /// - public string AIName { get; set; } - - /// - /// Can random AI empires use this empire template? - /// - public bool AIsCanUse { get; set; } - - /// - /// The color used to represent this empire. - /// - public Color Color { get; set; } - - /// - /// The empire's culture. - /// - [DoNotSerialize] - public Culture Culture - { - get { return Mod.Current.Cultures.SingleOrDefault(c => c.Name == CultureName); } - set { CultureName = value == null ? null : value.Name; } - } - - public string CultureName { get; set; } - - /// - /// The insignia of the empire. - /// - public Image Insignia - { - get - { - return Pictures.GetIcon(this); - } - } - - /// - /// The name of this empire's insignia. - /// - public string InsigniaName { get; set; } - - /// - /// Is this a minor empire? Minor empires cannot use warp points. - /// - public bool IsMinorEmpire { get; set; } - - /// - /// Is this empire controlled by a human player? - /// - public bool IsPlayerEmpire { get; set; } - - /// - /// The name of the leader of this empire. - /// - public string LeaderName { get; set; } - - /// - /// The name of the leader portrait used by this empire. - /// - public string LeaderPortraitName { get; set; } - - /// - /// The name of the empire. - /// - public string Name { get; set; } - - /// - /// Empire setup points spent. - /// - public int PointsSpent - { - get - { - int result = 0; - foreach (var t in PrimaryRace.Traits) - result += t.Cost.Value; - result += PrimaryRace.Aptitudes.Sum(kvp => Aptitude.All.FindByName(kvp.Key).GetCost(kvp.Value)); - return result; - } - } - - /// - /// The native race of this empire. - /// - public Race PrimaryRace { get; set; } - - /// - /// The name of the shipset used by this empire. - /// - public string ShipsetName { get; set; } - - /// - /// The name of the design names file used by this empire. - /// - public string DesignNamesFile { get; set; } - - public static EmpireTemplate Load(string filename) - { - var fs = new FileStream(filename, FileMode.Open); - var race = Serializer.Deserialize(fs); - fs.Close(); fs.Dispose(); - return race; - } - - public IEnumerable GetWarnings(int maxPoints) - { - if (PrimaryRace == null) - yield return "You must specify a primary race for your empire."; - else - { - foreach (var w in PrimaryRace.Warnings) - yield return w; - } - if (string.IsNullOrWhiteSpace(Name)) - yield return "You must specify a name for your empire."; - if (string.IsNullOrWhiteSpace(LeaderName)) - yield return "You must specify a leader name for your empire."; - if (string.IsNullOrWhiteSpace(LeaderPortraitName)) - yield return "You must specify a leader portrait for your empire."; - if (string.IsNullOrWhiteSpace(InsigniaName)) - yield return "You must specify an insignia for your empire."; - if (string.IsNullOrWhiteSpace(ShipsetName)) - yield return "You must specify a shipset for your empire."; - if (Color.R < 85 && Color.G < 85 & Color.B < 85) - yield return "The color you specified for your empire is too dark to be visible. Please make sure that at least one of the RGB values is 85 or more."; - if (Color.A < 255) - yield return "Transparent empire colors are not allowed."; - if (Culture == null) - yield return "You must specify a culture for your empire."; - if (!IsPlayerEmpire && Mod.Current.EmpireAIs.FindByName(AIName) == null) - yield return "AI empires require an AI script."; - if (PointsSpent > maxPoints) - yield return "You have spent too many empire setup points. Only " + maxPoints + " are available."; - } - - public Empire Instantiate() - { - var emp = new Empire(); - emp.Name = Name; - emp.LeaderName = LeaderName; - emp.Color = Color; - emp.PrimaryRace = PrimaryRace; - emp.LeaderPortraitName = LeaderPortraitName; - emp.InsigniaName = InsigniaName ?? PrimaryRace.Name; - emp.ShipsetPath = ShipsetName ?? PrimaryRace.Name; - emp.LeaderPortraitName = LeaderPortraitName ?? PrimaryRace.Name; - emp.Culture = Culture; - emp.IsPlayerEmpire = IsPlayerEmpire; - emp.IsMinorEmpire = IsMinorEmpire; - emp.AI = Mod.Current.EmpireAIs.FindByName(AIName); - emp.DesignNamesFile = DesignNamesFile; - - return emp; - } - - public void Save(string filename) - { - var fs = new FileStream(filename, FileMode.Create); - Serializer.Serialize(this, fs); - fs.Close(); fs.Dispose(); - } - - public override string ToString() - { - return Name; - } - } -} \ No newline at end of file +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Modding; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; + +namespace FrEee.Setup +{ + /// + /// A template for configuring an empire. + /// + public class EmpireTemplate : ITemplate + { + public EmpireTemplate() + { + } + + /// + /// The name of the AI used by this empire. + /// + public string AIName { get; set; } + + /// + /// Can random AI empires use this empire template? + /// + public bool AIsCanUse { get; set; } + + /// + /// The color used to represent this empire. + /// + public Color Color { get; set; } + + /// + /// The empire's culture. + /// + [DoNotSerialize] + public Culture Culture + { + get { return Mod.Current.Cultures.SingleOrDefault(c => c.Name == CultureName); } + set { CultureName = value == null ? null : value.Name; } + } + + public string CultureName { get; set; } + + /// + /// The insignia of the empire. + /// + public Image Insignia + { + get + { + return Pictures.GetIcon(this); + } + } + + /// + /// The name of this empire's insignia. + /// + public string InsigniaName { get; set; } + + /// + /// Is this a minor empire? Minor empires cannot use warp points. + /// + public bool IsMinorEmpire { get; set; } + + /// + /// Is this empire controlled by a human player? + /// + public bool IsPlayerEmpire { get; set; } + + /// + /// The name of the leader of this empire. + /// + public string LeaderName { get; set; } + + /// + /// The name of the leader portrait used by this empire. + /// + public string LeaderPortraitName { get; set; } + + /// + /// The name of the empire. + /// + public string Name { get; set; } + + /// + /// Empire setup points spent. + /// + public int PointsSpent + { + get + { + int result = 0; + foreach (var t in PrimaryRace.Traits) + result += t.Cost.Value; + result += PrimaryRace.Aptitudes.Sum(kvp => Aptitude.All.FindByName(kvp.Key).GetCost(kvp.Value)); + return result; + } + } + + /// + /// The native race of this empire. + /// + public Race PrimaryRace { get; set; } + + /// + /// The name of the shipset used by this empire. + /// + public string ShipsetName { get; set; } + + /// + /// The name of the design names file used by this empire. + /// + public string DesignNamesFile { get; set; } + + public static EmpireTemplate Load(string filename) + { + var fs = new FileStream(filename, FileMode.Open); + var race = Serializer.Deserialize(fs); + fs.Close(); fs.Dispose(); + return race; + } + + public IEnumerable GetWarnings(int maxPoints) + { + if (PrimaryRace == null) + yield return "You must specify a primary race for your empire."; + else + { + foreach (var w in PrimaryRace.Warnings) + yield return w; + } + if (string.IsNullOrWhiteSpace(Name)) + yield return "You must specify a name for your empire."; + if (string.IsNullOrWhiteSpace(LeaderName)) + yield return "You must specify a leader name for your empire."; + if (string.IsNullOrWhiteSpace(LeaderPortraitName)) + yield return "You must specify a leader portrait for your empire."; + if (string.IsNullOrWhiteSpace(InsigniaName)) + yield return "You must specify an insignia for your empire."; + if (string.IsNullOrWhiteSpace(ShipsetName)) + yield return "You must specify a shipset for your empire."; + if (Color.R < 85 && Color.G < 85 & Color.B < 85) + yield return "The color you specified for your empire is too dark to be visible. Please make sure that at least one of the RGB values is 85 or more."; + if (Color.A < 255) + yield return "Transparent empire colors are not allowed."; + if (Culture == null) + yield return "You must specify a culture for your empire."; + if (!IsPlayerEmpire && Mod.Current.EmpireAIs.FindByName(AIName) == null) + yield return "AI empires require an AI script."; + if (PointsSpent > maxPoints) + yield return "You have spent too many empire setup points. Only " + maxPoints + " are available."; + } + + public Empire Instantiate() + { + var emp = new Empire(); + emp.Name = Name; + emp.LeaderName = LeaderName; + emp.Color = Color; + emp.PrimaryRace = PrimaryRace; + emp.LeaderPortraitName = LeaderPortraitName; + emp.InsigniaName = InsigniaName ?? PrimaryRace.Name; + emp.ShipsetPath = ShipsetName ?? PrimaryRace.Name; + emp.LeaderPortraitName = LeaderPortraitName ?? PrimaryRace.Name; + emp.Culture = Culture; + emp.IsPlayerEmpire = IsPlayerEmpire; + emp.IsMinorEmpire = IsMinorEmpire; + emp.AI = Mod.Current.EmpireAIs.FindByName(AIName); + emp.DesignNamesFile = DesignNamesFile; + + return emp; + } + + public void Save(string filename) + { + var fs = new FileStream(filename, FileMode.Create); + Serializer.Serialize(this, fs); + fs.Close(); fs.Dispose(); + } + + public override string ToString() + { + return Name; + } + } +} diff --git a/FrEee/Game/Setup/GameSetup.cs b/FrEee/Setup/GameSetup.cs similarity index 95% rename from FrEee/Game/Setup/GameSetup.cs rename to FrEee/Setup/GameSetup.cs index 7c6cc93ca..ee2aeae4e 100644 --- a/FrEee/Game/Setup/GameSetup.cs +++ b/FrEee/Setup/GameSetup.cs @@ -1,686 +1,686 @@ -using System; -using System.Collections.Generic; -using System.Drawing; -using System.IO; -using System.Linq; -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.VictoryConditions; -using FrEee.Game.Setup.WarpPointPlacementStrategies; -using FrEee.Modding; -using FrEee.Modding.Templates; -using FrEee.Utility; -using FrEee.Utility.Extensions; - -namespace FrEee.Game.Setup -{ - /// - /// Setup parameters for a game. - /// - [Serializable] - public class GameSetup - { - public GameSetup() - { - EmpireTemplates = new List(); - ForbiddenTechnologyNames = new List(); - VictoryConditions = new List(); - VictoryConditions.Add(new TotalEliminationVictoryCondition()); - } - - /// - /// Allowed trades in this game. - /// - public AllowedTrades AllowedTrades { get; set; } - - /// - /// Should all systems start explored for all players? - /// - public bool AllSystemsExplored { get; set; } - - public bool CanColonizeOnlyBreathable { get; set; } - - public bool CanColonizeOnlyHomeworldSurface { get; set; } - - public EmpirePlacement EmpirePlacement { get; set; } - - public int EmpirePoints { get; set; } - - /// - /// Empire templates in this game setup. - /// - public IList EmpireTemplates { get; private set; } - - /// - /// Per mille chance of a random event occurring, per turn, per player. - /// - public double EventFrequency { get; set; } - - /// - /// The maximum event severity in this game. - /// - public EventSeverity MaximumEventSeverity { get; set; } - - /// - /// Technologies that are locked at level zero. - /// - public IList ForbiddenTechnologyNames { get; private set; } - - /// - /// The size of the galaxy. - /// - public System.Drawing.Size GalaxySize { get; set; } - - /// - /// The galaxy template to use. - /// - [DoNotSerialize] - public GalaxyTemplate GalaxyTemplate - { - get { return Mod.Current.GalaxyTemplates.FindByName(GalaxyTemplateName); } - set { GalaxyTemplateName = value.Name; } - } - - public string GalaxyTemplateName - { - get; - private set; - } - - /// - /// The name of the game. Used in save file names. - /// - public string GameName { get; set; } - - public bool GenerateRandomRuins { get; set; } - - public bool GenerateUniqueRuins { get; set; } - - public StellarObjectSize HomeworldSize { get; set; } - - public int HomeworldsPerEmpire { get; set; } - - public int HomeworldValue { get; set; } - - public bool IsAnalysisAllowed { get; set; } - - /// - /// Is this a "humans vs. AI" game? - /// - public bool IsHumansVsAI { get; set; } - - public bool IsIntelligenceAllowed { get; set; } - - /// - /// Are we setting up a single player game? - /// - public bool IsSinglePlayer { get { return EmpireTemplates.Where(et => et.IsPlayerEmpire).Count() == 1; } } - - public bool IsSurrenderAllowed { get; set; } - - public int MaxHomeworldDispersion { get; set; } - - public int MaxPlanetValue { get; set; } - - public int MaxSpawnedAsteroidValue { get; set; } - - public int MaxSpawnedPlanetValue { get; set; } - - public int MinAsteroidValue { get; set; } - - public int MinorEmpires { get; set; } - - public int MinPlanetValue { get; set; } - - public int MinSpawnedAsteroidValue { get; set; } - - public int MinSpawnedPlanetValue { get; set; } - - /// - /// Should players have an omniscient view of all explored systems? - /// Does not prevent cloaking from working; this is just basic sight. - /// Also does not give battle reports for other empires' battles. - /// - public bool OmniscientView { get; set; } - - public int RandomAIs { get; set; } - - /// - /// Model to use for remote mining. - /// - public MiningModel RemoteMiningModel { get; set; } - - /// - /// The research points granted to empires per unspent empire point. - /// - public decimal ResearchPointsPerUnspentEmpirePoint { get; set; } - - public int ResourceStorage { get; set; } - - public ScoreDisplay ScoreDisplay { get; set; } - - public int Seed { get; set; } - - /// - /// Model to use for standard planetary mining. - /// - public MiningModel StandardMiningModel { get; set; } - - /// - /// How many star systems will be in the galaxy? - /// - public int StarSystemCount { get; set; } - - /// - /// Number of groups of connected star systems to generate. - /// 1 = all warp points connected - /// 2 = 2 distinct groups - /// ... - /// StarSystemCount = no warp points - /// - public int StarSystemGroups { get; set; } - - public int StartingResearch { get; set; } - - public int StartingResources { get; set; } - - /// - /// The starting technology level for empires. - /// TODO - have a separate starting tech level setting for neutrals? - /// - public StartingTechnologyLevel StartingTechnologyLevel { get; set; } - - /// - /// Technology research cost formula. - /// Low = Level * BaseCost - /// Medium = BaseCost for level 1, Level ^ 2 * BaseCost / 2 otherwise - /// Hight = Level ^ 2 * BaseCost - /// - public TechnologyCost TechnologyCost { get; set; } - - /// - /// The technology uniqueness factor. - /// Tech cost is increased if other players know a tech and this factor is positive, or decreased if it's negative. - /// - public int TechnologyUniqueness { get; set; } - - /// - /// Game victory conditions. - /// - public IList VictoryConditions { get; private set; } - - /// - /// Delay in turns before victory conditions take effect. - /// - public int VictoryDelay { get; set; } - - /// - /// Problems with this game setup. - /// - public IEnumerable Warnings - { - get - { - if (string.IsNullOrWhiteSpace(GameName)) - yield return "You must specify a name for the game."; - if (GalaxyTemplate == null) // TODO - default to first galaxy template? - yield return "You must specify a galaxy type."; - if (StarSystemCount > GalaxySize.Width * GalaxySize.Height) - yield return "The galaxy is too small to contain " + StarSystemCount + " star systems."; - if (EmpirePlacement != EmpirePlacement.CanStartInSameSystem && EmpireTemplates.Count + RandomAIs + MinorEmpires > StarSystemCount) - yield return "There are not enough star systems to give " + (EmpireTemplates.Count + RandomAIs + MinorEmpires) + " empires and minor races each their own home system."; - if (HomeworldSize == null) - yield return "You must specify a homeworld size."; - if (!EmpireTemplates.Any() && RandomAIs == 0) - yield return "You must add at least one empire."; - foreach (var et in EmpireTemplates) - { - if (et.PointsSpent > EmpirePoints) - yield return "The " + et + " has spent too many empire points."; - } - } - } - - /// - /// Strategy for placing warp points within systems. - /// - public WarpPointPlacementStrategy WarpPointPlacementStrategy { get; set; } - - public static GameSetup Load(string filename) - { - var fs = new FileStream(filename, FileMode.Open); - var gsu = Serializer.Deserialize(fs); - fs.Close(); fs.Dispose(); - return gsu; - } - - // TODO - status messages for the GUI - public void PopulateGalaxy(Galaxy gal, PRNG dice) - { - gal.Name = GameName; - - gal.CleanGameState(); - - // remove forbidden techs - foreach (var tname in ForbiddenTechnologyNames.Distinct()) - Mod.Current.Technologies.Single(t => t.Name == tname).Dispose(); - - // set omniscient view and all systems seen flags - gal.OmniscientView = OmniscientView; - gal.AllSystemsExploredFromStart = AllSystemsExplored; - - // set up mining models and resource stuff - gal.StandardMiningModel = StandardMiningModel; - gal.RemoteMiningModel = RemoteMiningModel; - gal.MinPlanetValue = MinPlanetValue; - gal.MinSpawnedPlanetValue = MinSpawnedPlanetValue; - gal.MaxSpawnedPlanetValue = MaxSpawnedPlanetValue; - gal.MaxPlanetValue = MaxPlanetValue; - gal.MinAsteroidValue = MinAsteroidValue; - gal.MinSpawnedAsteroidValue = MinSpawnedAsteroidValue; - gal.MaxSpawnedAsteroidValue = MaxSpawnedAsteroidValue; - - // set score display setting - gal.ScoreDisplay = ScoreDisplay; - - // set up victory conditions - foreach (var vc in VictoryConditions) - gal.VictoryConditions.Add(vc); - gal.VictoryDelay = VictoryDelay; - - // set up misc. game options - gal.TechnologyCost = TechnologyCost; - gal.TechnologyUniqueness = TechnologyUniqueness; - gal.IsHumansVsAI = IsHumansVsAI; - gal.AllowedTrades = AllowedTrades; - gal.IsSurrenderAllowed = IsSurrenderAllowed; - gal.IsIntelligenceAllowed = IsIntelligenceAllowed; - gal.CanColonizeOnlyBreathable = CanColonizeOnlyBreathable; - gal.CanColonizeOnlyHomeworldSurface = CanColonizeOnlyHomeworldSurface; - gal.WarpPointPlacementStrategy = WarpPointPlacementStrategy; - - // create player empires - foreach (var et in EmpireTemplates) - { - var emp = et.Instantiate(); - gal.Empires.Add(emp); - } - - // TODO - make sure empires don't reuse colors unless we really have to? - - // create random AI empires - for (int i = 1; i <= RandomAIs; i++) - { - // TODO - load saved EMP files for random AI empires - var surface = Mod.Current.StellarObjectTemplates.OfType().Where(p => !p.Size.IsConstructed).Select(p => p.Surface).Distinct().PickRandom(dice); - var atmosphere = Mod.Current.StellarObjectTemplates.OfType().Where(p => !p.Size.IsConstructed && p.Surface == surface).Select(p => p.Atmosphere).Distinct().PickRandom(dice); - var et = new EmpireTemplate - { - Name = "Random Empire #" + i, - LeaderName = "Random Leader #" + i, - PrimaryRace = new Race - { - Name = "Random Race #" + i, - NativeAtmosphere = atmosphere, - NativeSurface = surface, - }, - IsPlayerEmpire = false, - Color = RandomColor(dice), - Culture = Mod.Current.Cultures.PickRandom(dice), - AIName = Mod.Current.EmpireAIs.PickRandom(dice).Name, - }; - foreach (var apt in Aptitude.All) - et.PrimaryRace.Aptitudes[apt.Name] = 100; - var emp = et.Instantiate(); - gal.Empires.Add(emp); - } - - // create minor empires - for (int i = 1; i <= MinorEmpires; i++) - { - // TODO - load saved EMP files for minor empires - var surface = Mod.Current.StellarObjectTemplates.OfType().Where(p => !p.Size.IsConstructed).Select(p => p.Surface).Distinct().PickRandom(dice); - var atmosphere = Mod.Current.StellarObjectTemplates.OfType().Where(p => !p.Size.IsConstructed && p.Surface == surface).Select(p => p.Atmosphere).Distinct().PickRandom(dice); - var et = new EmpireTemplate - { - Name = "Minor Empire #" + i, - LeaderName = "Minor Leader #" + i, - PrimaryRace = new Race - { - Name = "Minor Race #" + i, - NativeAtmosphere = atmosphere, - NativeSurface = surface, - }, - IsPlayerEmpire = false, - IsMinorEmpire = true, - Color = RandomColor(dice), - Culture = Mod.Current.Cultures.PickRandom(dice), - AIName = Mod.Current.EmpireAIs.PickRandom(dice).Name, - }; - foreach (var apt in Aptitude.All) - et.PrimaryRace.Aptitudes[apt.Name] = 100; - var emp = et.Instantiate(); - gal.Empires.Add(emp); - } - - // place empires - // don't do them in any particular order, so P1 and P2 don't always wind up on opposite sides of the galaxy when using equidistant placement - foreach (var emp in gal.Empires.Shuffle(dice)) - PlaceEmpire(gal, emp, dice); - - - //Enabled AI ministers, so the AI's actually can do stuff. - foreach (var emp in gal.Empires.Where(x => !x.IsPlayerEmpire && x.AI != null)) - emp.EnabledMinisters = emp.AI.MinisterNames; - - // remove ruins if they're not allowed - if (!GenerateRandomRuins) - { - foreach (var p in gal.FindSpaceObjects()) - { - foreach (var abil in p.IntrinsicAbilities.ToArray()) - { - if (abil.Rule.Matches("Ancient Ruins")) - p.IntrinsicAbilities.Remove(abil); - } - } - } - if (!GenerateUniqueRuins) - { - foreach (var p in gal.FindSpaceObjects()) - { - foreach (var abil in p.IntrinsicAbilities.ToArray()) - { - if (abil.Rule.Matches("Ancient Ruins Unique")) - p.IntrinsicAbilities.Remove(abil); - } - } - } - - // also remove ruins from homeworlds, that's just silly :P - foreach (var p in gal.FindSpaceObjects().Where(p => p.Colony != null)) - { - foreach (var abil in p.IntrinsicAbilities.ToArray()) - { - if (abil.Rule.Matches("Ancient Ruins") || abil.Rule.Matches("Ancient Ruins Unique")) - p.IntrinsicAbilities.Remove(abil); - } - } - - // set up omniscient view - if (OmniscientView) - { - foreach (var emp in gal.Empires) - { - foreach (var sys in gal.StarSystemLocations.Select(l => l.Item)) - sys.ExploredByEmpires.Add(emp); - } - } - } - - public void Save(string filename) - { - var fs = new FileStream(filename, FileMode.Create); - Serializer.Serialize(this, fs); - fs.Close(); fs.Dispose(); - } - - /// - /// Makes a suitable homeworld for an empire. - /// - /// - private Planet MakeHomeworld(Empire emp, string hwName, PRNG dice) - { - var hw = Mod.Current.StellarObjectTemplates.OfType().Where(p => - p.Surface == emp.PrimaryRace.NativeSurface && - p.Atmosphere == emp.PrimaryRace.NativeAtmosphere && - p.Size == HomeworldSize) - .PickRandom(dice); - if (hw == null) - throw new Exception("No planets found in SectType.txt with surface " + emp.PrimaryRace.NativeSurface + ", atmosphere " + emp.PrimaryRace.NativeAtmosphere + ", and size " + HomeworldSize + ". Such a planet is required for creating the " + emp + " homeworld."); - hw = hw.Instantiate(); - hw.Name = hwName; - hw.Size = HomeworldSize; - hw.ConditionsAmount = Mod.Current.Settings.HomeworldConditions; - return hw; - } - - // TODO - status messages for the GUI - private void PlaceEmpire(Galaxy gal, Empire emp, PRNG dice) - { - if (AllSystemsExplored) - { - // set all systems explored - foreach (var sys in gal.StarSystemLocations.Select(ssl => ssl.Item)) - sys.ExploredByEmpires.Add(emp); - } - - // give empire starting techs - Galaxy.Current.CleanGameState(); // need to know what the techs in the game are! - foreach (var tech in Mod.Current.Technologies.Where(t => !t.IsRacial || emp.Abilities().Any(a => a.Rule.Matches("Tech Area") && a.Value1 == t.RacialTechID))) - { - switch (StartingTechnologyLevel) - { - case StartingTechnologyLevel.Low: - emp.ResearchedTechnologies[tech] = tech.StartLevel; - break; - - case StartingTechnologyLevel.Medium: - emp.ResearchedTechnologies[tech] = Math.Max(tech.StartLevel, tech.RaiseLevel); - break; - - case StartingTechnologyLevel.High: - emp.ResearchedTechnologies[tech] = tech.MaximumLevel; - break; - } - } - - // give empire starting resources and storage capacity - foreach (var r in Resource.All.Where(r => r.IsGlobal)) - { - emp.StoredResources.Add(r, StartingResources); - emp.IntrinsicResourceStorage.Add(r, ResourceStorage); - } - - // give empire starting research - emp.BonusResearch = StartingResearch + (int)(ResearchPointsPerUnspentEmpirePoint * (EmpirePoints - emp.PrimaryRace.PointsSpent)); - - // TODO - moddable colony techs? - string colonyTechName = null; - if ((emp.PrimaryRace.NativeSurface) == "Rock") - colonyTechName = "Rock Planet Colonization"; - else if ((emp.PrimaryRace.NativeSurface) == "Ice") - colonyTechName = "Ice Planet Colonization"; - else if ((emp.PrimaryRace.NativeSurface) == "Gas Giant") - colonyTechName = "Gas Giant Colonization"; - var colonyTech = Mod.Current.Technologies.SingleOrDefault(t => t.Name == colonyTechName); - if (colonyTech != null && emp.ResearchedTechnologies[colonyTech] < 1) - emp.ResearchedTechnologies[colonyTech] = 1; - - // find facilities to place on homeworlds - var facils = emp.UnlockedItems.OfType(); - var sy = facils.LastOrDefault(facil => facil.HasAbility("Space Yard")); - var sp = facils.LastOrDefault(facil => facil.HasAbility("Spaceport")); - var rd = facils.LastOrDefault(facil => facil.HasAbility("Supply Generation")); - var min = facils.WithMax(facil => facil.GetAbilityValue("Resource Generation - Minerals").ToInt()).LastOrDefault(); - var org = facils.WithMax(facil => facil.GetAbilityValue("Resource Generation - Organics").ToInt()).LastOrDefault(); - var rad = facils.WithMax(facil => facil.GetAbilityValue("Resource Generation - Radioactives").ToInt()).LastOrDefault(); - var res = facils.WithMax(facil => facil.GetAbilityValue("Point Generation - Research").ToInt()).LastOrDefault(); - // TODO - game setup option for intel facilities on homeworlds? HomeworldStartingFacilities.txt ala se5? - - // SY rate, for colonies - var rate = new ResourceQuantity(); - if (sy != null) - { - // TODO - define mappings between SY ability numbers and resource names in a mod file - rate.Add(Resource.Minerals, sy.GetAbilityValue("Space Yard", 2, true, true, a => a.Value1 == "1").ToInt()); - rate.Add(Resource.Organics, sy.GetAbilityValue("Space Yard", 2, true, true, a => a.Value1 == "2").ToInt()); - rate.Add(Resource.Radioactives, sy.GetAbilityValue("Space Yard", 2, true, true, a => a.Value1 == "3").ToInt()); - } - - // build connectivity graph for computing warp distance - var graph = new ConnectivityGraph(); - foreach (var s in Galaxy.Current.StarSystemLocations.Select(ssl => ssl.Item)) - graph.Add(s); - foreach (var s in Galaxy.Current.StarSystemLocations.Select(ssl => ssl.Item)) - { - foreach (var wp in s.FindSpaceObjects()) - graph.Connect(s, wp.TargetStarSystemLocation.Item, true); - } - - for (int i = 0; i < HomeworldsPerEmpire; i++) - { - // TODO - respect Empire Placement and Max Homeworld Dispersion settings - var planets = gal.StarSystemLocations.SelectMany(ssl => ssl.Item.FindSpaceObjects(p => p.Owner == null && p.MoonOf == null)); - var okSystems = gal.StarSystemLocations.Select(ssl => ssl.Item).Where(sys => sys.EmpiresCanStartIn); - if (i > 0) - { - // make sure subsequent homeworlds are placed within a limited number of warps from the first homeworld - okSystems = okSystems.Where(sys => graph.ComputeDistance(sys, emp.OwnedSpaceObjects.OfType().First().FindStarSystem()) <= MaxHomeworldDispersion); - } - switch (EmpirePlacement) - { - case EmpirePlacement.CanStartInSameSystem: - // no further filtering - break; - - case EmpirePlacement.DifferentSystems: - // filter to systems containing no other empires' homeworlds - okSystems = okSystems.Where(sys => !sys.FindSpaceObjects(p => p.Owner != null && p.Owner != emp).Any()); - break; - - case EmpirePlacement.Equidistant: - // filter to systems containing no other empires' homeworlds - okSystems = okSystems.Where(sys => !sys.FindSpaceObjects(p => p.Owner != null && p.Owner != emp).Any()); - // filter to systems that are the maximum distance away from any other empire's homeworlds - var otherEmpireHomeSystems = gal.StarSystemLocations.SelectMany(ssl => ssl.Item.FindSpaceObjects(p => p.Owner != null && p.Owner != emp).Select(p => p.FindStarSystem()).Distinct()).ToArray(); - okSystems = okSystems.WithMax(sys => otherEmpireHomeSystems.Min(o => graph.ComputeDistance(sys, o))); - break; - } - okSystems = okSystems.ToArray(); - if (!okSystems.Any()) - { - // replace an inhospitable system with a hospitable one - var convertSys = gal.StarSystemLocations.Select(ssl => ssl.Item).Where(sys => !sys.EmpiresCanStartIn).PickRandom(dice); - if (convertSys == null) - throw new Exception("No suitable system found to place " + emp + "'s homeworld #" + (i + 1) + ". (Try increasing the number of star systems.)"); - var newSys = Mod.Current.StarSystemTemplates.Where(q => q.EmpiresCanStartIn).PickRandom(dice).Instantiate(); - var sid = convertSys.ID; - newSys.CopyTo(convertSys); - convertSys.ID = sid; - convertSys.Name = Mod.Current.StarSystemNames.Except(gal.StarSystemLocations.Select(q => q.Item.Name)).PickRandom(dice); - foreach (var l in Galaxy.Current.StarSystemLocations) - { - foreach (var wp in l.Item.FindSpaceObjects().Where(q => q.Target.StarSystem == convertSys).ToArray()) - { - wp.Dispose(); - WarpPointPlacementStrategy.PlaceWarpPoints(Galaxy.Current.StarSystemLocations.Single(q => q.Item == convertSys), l); - } - } - GalaxyTemplate.NameStellarObjects(convertSys); - okSystems = new[] { convertSys }; - } - Planet hw; - planets = planets.Where(p => okSystems.Contains(p.FindStarSystem())); - if (!planets.Any()) - { - // make sure we're placing the homeworld in a system with at least one empty sector - okSystems = okSystems.Where(sys2 => sys2.Sectors.Any(sec => !sec.SpaceObjects.Any())); - - if (!okSystems.Any()) - throw new Exception("No suitable system found to place " + emp + "'s homeworld #" + (i + 1) + ". (Try regenerating the map or increasing the number of star systems.)"); - - // make brand new planet in an OK system - var sys = okSystems.PickRandom(dice); - var nextNum = sys.FindSpaceObjects(p => p.MoonOf == null).Count() + 1; - hw = MakeHomeworld(emp, sys.Name + " " + nextNum.ToRomanNumeral(), dice); - var okSectors = sys.Sectors.Where(sector => !sector.SpaceObjects.Any()); - okSectors.PickRandom(dice).Place(hw); - } - else - hw = planets.PickRandom(dice); - if (hw.Surface != emp.PrimaryRace.NativeSurface || hw.Atmosphere != emp.PrimaryRace.NativeAtmosphere || hw.Size != HomeworldSize) - { - var replacementHomeworld = MakeHomeworld(emp, hw.Name, dice); - replacementHomeworld.CopyTo(hw); - } - hw.ResourceValue[Resource.Minerals] = hw.ResourceValue[Resource.Organics] = hw.ResourceValue[Resource.Radioactives] = HomeworldValue; - hw.Colony = new Colony - { - Owner = emp, - ConstructionQueue = new ConstructionQueue(hw), - IsHomeworld = true, - }; - hw.AddPopulation(emp.PrimaryRace, hw.Size.MaxPopulation); - if (sy != null && hw.Colony.Facilities.Count < hw.MaxFacilities) - hw.Colony.Facilities.Add(sy.Instantiate()); - if (sp != null && hw.Colony.Facilities.Count < hw.MaxFacilities && (!emp.HasAbility("No Spaceports") || sp.Abilities.Count > 1)) - // natural merchants get spaceports only if spaceports have more than one ability - // of course, if the other abilities are *penalties*... oh well, they can scrap them! - hw.Colony.Facilities.Add(sp.Instantiate()); - if (rd != null && hw.Colony.Facilities.Count < hw.MaxFacilities) - hw.Colony.Facilities.Add(rd.Instantiate()); - var lastCount = 0; - while (hw.Colony.Facilities.Count < hw.MaxFacilities && hw.Colony.Facilities.Count > lastCount) - { - lastCount = hw.Colony.Facilities.Count; - - if (min != null && hw.Colony.Facilities.Count < hw.MaxFacilities) - hw.Colony.Facilities.Add(min.Instantiate()); - if (org != null && hw.Colony.Facilities.Count < hw.MaxFacilities) - hw.Colony.Facilities.Add(org.Instantiate()); - if (rad != null && hw.Colony.Facilities.Count < hw.MaxFacilities) - hw.Colony.Facilities.Add(rad.Instantiate()); - - // no research facilities needed at max tech! - if (StartingTechnologyLevel != StartingTechnologyLevel.High) - { - if (res != null && hw.Colony.Facilities.Count < hw.MaxFacilities) - hw.Colony.Facilities.Add(res.Instantiate()); - } - } - foreach (var f in hw.Colony.Facilities) - f.ConstructionProgress = f.Cost; - } - - // mark home systems explored - foreach (var sys in gal.StarSystemLocations.Select(ssl => ssl.Item)) - { - if (!sys.ExploredByEmpires.Contains(emp) && sys.FindSpaceObjects().Any(planet => planet.Owner == emp)) - sys.ExploredByEmpires.Add(emp); - } - - // in case two empires started in the same system - foreach (var x in gal.FindSpaceObjects().Owned().ToArray()) - x.UpdateEmpireMemories(); - } - - /// - /// Picks a random color from a limited palette of 63 colors. - /// - /// - private Color RandomColor(PRNG dice) - { - int r = 0, g = 0, b = 0; - while (r == 0 && g == 0 && b == 0) - { - r = RandomRGB(dice); - g = RandomRGB(dice); - b = RandomRGB(dice); - } - return Color.FromArgb(r, g, b); - } - - /// - /// Generates a random number used to pick a color from a limited palette of 63 colors. - /// - /// - private int RandomRGB(PRNG dice) - { - return RandomHelper.Range(0, 3, dice) * 85; - } - } -} +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.VictoryConditions; +using FrEee.Setup.WarpPointPlacementStrategies; +using FrEee.Modding; +using FrEee.Modding.Templates; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; + +namespace FrEee.Setup +{ + /// + /// Setup parameters for a game. + /// + [Serializable] + public class GameSetup + { + public GameSetup() + { + EmpireTemplates = new List(); + ForbiddenTechnologyNames = new List(); + VictoryConditions = new List(); + VictoryConditions.Add(new TotalEliminationVictoryCondition()); + } + + /// + /// Allowed trades in this game. + /// + public AllowedTrades AllowedTrades { get; set; } + + /// + /// Should all systems start explored for all players? + /// + public bool AllSystemsExplored { get; set; } + + public bool CanColonizeOnlyBreathable { get; set; } + + public bool CanColonizeOnlyHomeworldSurface { get; set; } + + public EmpirePlacement EmpirePlacement { get; set; } + + public int EmpirePoints { get; set; } + + /// + /// Empire templates in this game setup. + /// + public IList EmpireTemplates { get; private set; } + + /// + /// Per mille chance of a random event occurring, per turn, per player. + /// + public double EventFrequency { get; set; } + + /// + /// The maximum event severity in this game. + /// + public EventSeverity MaximumEventSeverity { get; set; } + + /// + /// Technologies that are locked at level zero. + /// + public IList ForbiddenTechnologyNames { get; private set; } + + /// + /// The size of the galaxy. + /// + public System.Drawing.Size GalaxySize { get; set; } + + /// + /// The galaxy template to use. + /// + [DoNotSerialize] + public GalaxyTemplate GalaxyTemplate + { + get { return Mod.Current.GalaxyTemplates.FindByName(GalaxyTemplateName); } + set { GalaxyTemplateName = value.Name; } + } + + public string GalaxyTemplateName + { + get; + private set; + } + + /// + /// The name of the game. Used in save file names. + /// + public string GameName { get; set; } + + public bool GenerateRandomRuins { get; set; } + + public bool GenerateUniqueRuins { get; set; } + + public StellarObjectSize HomeworldSize { get; set; } + + public int HomeworldsPerEmpire { get; set; } + + public int HomeworldValue { get; set; } + + public bool IsAnalysisAllowed { get; set; } + + /// + /// Is this a "humans vs. AI" game? + /// + public bool IsHumansVsAI { get; set; } + + public bool IsIntelligenceAllowed { get; set; } + + /// + /// Are we setting up a single player game? + /// + public bool IsSinglePlayer { get { return EmpireTemplates.Where(et => et.IsPlayerEmpire).Count() == 1; } } + + public bool IsSurrenderAllowed { get; set; } + + public int MaxHomeworldDispersion { get; set; } + + public int MaxPlanetValue { get; set; } + + public int MaxSpawnedAsteroidValue { get; set; } + + public int MaxSpawnedPlanetValue { get; set; } + + public int MinAsteroidValue { get; set; } + + public int MinorEmpires { get; set; } + + public int MinPlanetValue { get; set; } + + public int MinSpawnedAsteroidValue { get; set; } + + public int MinSpawnedPlanetValue { get; set; } + + /// + /// Should players have an omniscient view of all explored systems? + /// Does not prevent cloaking from working; this is just basic sight. + /// Also does not give battle reports for other empires' battles. + /// + public bool OmniscientView { get; set; } + + public int RandomAIs { get; set; } + + /// + /// Model to use for remote mining. + /// + public MiningModel RemoteMiningModel { get; set; } + + /// + /// The research points granted to empires per unspent empire point. + /// + public decimal ResearchPointsPerUnspentEmpirePoint { get; set; } + + public int ResourceStorage { get; set; } + + public ScoreDisplay ScoreDisplay { get; set; } + + public int Seed { get; set; } + + /// + /// Model to use for standard planetary mining. + /// + public MiningModel StandardMiningModel { get; set; } + + /// + /// How many star systems will be in the galaxy? + /// + public int StarSystemCount { get; set; } + + /// + /// Number of groups of connected star systems to generate. + /// 1 = all warp points connected + /// 2 = 2 distinct groups + /// ... + /// StarSystemCount = no warp points + /// + public int StarSystemGroups { get; set; } + + public int StartingResearch { get; set; } + + public int StartingResources { get; set; } + + /// + /// The starting technology level for empires. + /// TODO - have a separate starting tech level setting for neutrals? + /// + public StartingTechnologyLevel StartingTechnologyLevel { get; set; } + + /// + /// Technology research cost formula. + /// Low = Level * BaseCost + /// Medium = BaseCost for level 1, Level ^ 2 * BaseCost / 2 otherwise + /// Hight = Level ^ 2 * BaseCost + /// + public TechnologyCost TechnologyCost { get; set; } + + /// + /// The technology uniqueness factor. + /// Tech cost is increased if other players know a tech and this factor is positive, or decreased if it's negative. + /// + public int TechnologyUniqueness { get; set; } + + /// + /// Game victory conditions. + /// + public IList VictoryConditions { get; private set; } + + /// + /// Delay in turns before victory conditions take effect. + /// + public int VictoryDelay { get; set; } + + /// + /// Problems with this game setup. + /// + public IEnumerable Warnings + { + get + { + if (string.IsNullOrWhiteSpace(GameName)) + yield return "You must specify a name for the game."; + if (GalaxyTemplate == null) // TODO - default to first galaxy template? + yield return "You must specify a galaxy type."; + if (StarSystemCount > GalaxySize.Width * GalaxySize.Height) + yield return "The galaxy is too small to contain " + StarSystemCount + " star systems."; + if (EmpirePlacement != EmpirePlacement.CanStartInSameSystem && EmpireTemplates.Count + RandomAIs + MinorEmpires > StarSystemCount) + yield return "There are not enough star systems to give " + (EmpireTemplates.Count + RandomAIs + MinorEmpires) + " empires and minor races each their own home system."; + if (HomeworldSize == null) + yield return "You must specify a homeworld size."; + if (!EmpireTemplates.Any() && RandomAIs == 0) + yield return "You must add at least one empire."; + foreach (var et in EmpireTemplates) + { + if (et.PointsSpent > EmpirePoints) + yield return "The " + et + " has spent too many empire points."; + } + } + } + + /// + /// Strategy for placing warp points within systems. + /// + public WarpPointPlacementStrategy WarpPointPlacementStrategy { get; set; } + + public static GameSetup Load(string filename) + { + var fs = new FileStream(filename, FileMode.Open); + var gsu = Serializer.Deserialize(fs); + fs.Close(); fs.Dispose(); + return gsu; + } + + // TODO - status messages for the GUI + public void PopulateGalaxy(Galaxy gal, PRNG dice) + { + gal.Name = GameName; + + gal.CleanGameState(); + + // remove forbidden techs + foreach (var tname in ForbiddenTechnologyNames.Distinct()) + Mod.Current.Technologies.Single(t => t.Name == tname).Dispose(); + + // set omniscient view and all systems seen flags + gal.OmniscientView = OmniscientView; + gal.AllSystemsExploredFromStart = AllSystemsExplored; + + // set up mining models and resource stuff + gal.StandardMiningModel = StandardMiningModel; + gal.RemoteMiningModel = RemoteMiningModel; + gal.MinPlanetValue = MinPlanetValue; + gal.MinSpawnedPlanetValue = MinSpawnedPlanetValue; + gal.MaxSpawnedPlanetValue = MaxSpawnedPlanetValue; + gal.MaxPlanetValue = MaxPlanetValue; + gal.MinAsteroidValue = MinAsteroidValue; + gal.MinSpawnedAsteroidValue = MinSpawnedAsteroidValue; + gal.MaxSpawnedAsteroidValue = MaxSpawnedAsteroidValue; + + // set score display setting + gal.ScoreDisplay = ScoreDisplay; + + // set up victory conditions + foreach (var vc in VictoryConditions) + gal.VictoryConditions.Add(vc); + gal.VictoryDelay = VictoryDelay; + + // set up misc. game options + gal.TechnologyCost = TechnologyCost; + gal.TechnologyUniqueness = TechnologyUniqueness; + gal.IsHumansVsAI = IsHumansVsAI; + gal.AllowedTrades = AllowedTrades; + gal.IsSurrenderAllowed = IsSurrenderAllowed; + gal.IsIntelligenceAllowed = IsIntelligenceAllowed; + gal.CanColonizeOnlyBreathable = CanColonizeOnlyBreathable; + gal.CanColonizeOnlyHomeworldSurface = CanColonizeOnlyHomeworldSurface; + gal.WarpPointPlacementStrategy = WarpPointPlacementStrategy; + + // create player empires + foreach (var et in EmpireTemplates) + { + var emp = et.Instantiate(); + gal.Empires.Add(emp); + } + + // TODO - make sure empires don't reuse colors unless we really have to? + + // create random AI empires + for (int i = 1; i <= RandomAIs; i++) + { + // TODO - load saved EMP files for random AI empires + var surface = Mod.Current.StellarObjectTemplates.OfType().Where(p => !p.Size.IsConstructed).Select(p => p.Surface).Distinct().PickRandom(dice); + var atmosphere = Mod.Current.StellarObjectTemplates.OfType().Where(p => !p.Size.IsConstructed && p.Surface == surface).Select(p => p.Atmosphere).Distinct().PickRandom(dice); + var et = new EmpireTemplate + { + Name = "Random Empire #" + i, + LeaderName = "Random Leader #" + i, + PrimaryRace = new Race + { + Name = "Random Race #" + i, + NativeAtmosphere = atmosphere, + NativeSurface = surface, + }, + IsPlayerEmpire = false, + Color = RandomColor(dice), + Culture = Mod.Current.Cultures.PickRandom(dice), + AIName = Mod.Current.EmpireAIs.PickRandom(dice).Name, + }; + foreach (var apt in Aptitude.All) + et.PrimaryRace.Aptitudes[apt.Name] = 100; + var emp = et.Instantiate(); + gal.Empires.Add(emp); + } + + // create minor empires + for (int i = 1; i <= MinorEmpires; i++) + { + // TODO - load saved EMP files for minor empires + var surface = Mod.Current.StellarObjectTemplates.OfType().Where(p => !p.Size.IsConstructed).Select(p => p.Surface).Distinct().PickRandom(dice); + var atmosphere = Mod.Current.StellarObjectTemplates.OfType().Where(p => !p.Size.IsConstructed && p.Surface == surface).Select(p => p.Atmosphere).Distinct().PickRandom(dice); + var et = new EmpireTemplate + { + Name = "Minor Empire #" + i, + LeaderName = "Minor Leader #" + i, + PrimaryRace = new Race + { + Name = "Minor Race #" + i, + NativeAtmosphere = atmosphere, + NativeSurface = surface, + }, + IsPlayerEmpire = false, + IsMinorEmpire = true, + Color = RandomColor(dice), + Culture = Mod.Current.Cultures.PickRandom(dice), + AIName = Mod.Current.EmpireAIs.PickRandom(dice).Name, + }; + foreach (var apt in Aptitude.All) + et.PrimaryRace.Aptitudes[apt.Name] = 100; + var emp = et.Instantiate(); + gal.Empires.Add(emp); + } + + // place empires + // don't do them in any particular order, so P1 and P2 don't always wind up on opposite sides of the galaxy when using equidistant placement + foreach (var emp in gal.Empires.Shuffle(dice)) + PlaceEmpire(gal, emp, dice); + + + //Enabled AI ministers, so the AI's actually can do stuff. + foreach (var emp in gal.Empires.Where(x => !x.IsPlayerEmpire && x.AI != null)) + emp.EnabledMinisters = emp.AI.MinisterNames; + + // remove ruins if they're not allowed + if (!GenerateRandomRuins) + { + foreach (var p in gal.FindSpaceObjects()) + { + foreach (var abil in p.IntrinsicAbilities.ToArray()) + { + if (abil.Rule.Matches("Ancient Ruins")) + p.IntrinsicAbilities.Remove(abil); + } + } + } + if (!GenerateUniqueRuins) + { + foreach (var p in gal.FindSpaceObjects()) + { + foreach (var abil in p.IntrinsicAbilities.ToArray()) + { + if (abil.Rule.Matches("Ancient Ruins Unique")) + p.IntrinsicAbilities.Remove(abil); + } + } + } + + // also remove ruins from homeworlds, that's just silly :P + foreach (var p in gal.FindSpaceObjects().Where(p => p.Colony != null)) + { + foreach (var abil in p.IntrinsicAbilities.ToArray()) + { + if (abil.Rule.Matches("Ancient Ruins") || abil.Rule.Matches("Ancient Ruins Unique")) + p.IntrinsicAbilities.Remove(abil); + } + } + + // set up omniscient view + if (OmniscientView) + { + foreach (var emp in gal.Empires) + { + foreach (var sys in gal.StarSystemLocations.Select(l => l.Item)) + sys.ExploredByEmpires.Add(emp); + } + } + } + + public void Save(string filename) + { + var fs = new FileStream(filename, FileMode.Create); + Serializer.Serialize(this, fs); + fs.Close(); fs.Dispose(); + } + + /// + /// Makes a suitable homeworld for an empire. + /// + /// + private Planet MakeHomeworld(Empire emp, string hwName, PRNG dice) + { + var hw = Mod.Current.StellarObjectTemplates.OfType().Where(p => + p.Surface == emp.PrimaryRace.NativeSurface && + p.Atmosphere == emp.PrimaryRace.NativeAtmosphere && + p.Size == HomeworldSize) + .PickRandom(dice); + if (hw == null) + throw new Exception("No planets found in SectType.txt with surface " + emp.PrimaryRace.NativeSurface + ", atmosphere " + emp.PrimaryRace.NativeAtmosphere + ", and size " + HomeworldSize + ". Such a planet is required for creating the " + emp + " homeworld."); + hw = hw.Instantiate(); + hw.Name = hwName; + hw.Size = HomeworldSize; + hw.ConditionsAmount = Mod.Current.Settings.HomeworldConditions; + return hw; + } + + // TODO - status messages for the GUI + private void PlaceEmpire(Galaxy gal, Empire emp, PRNG dice) + { + if (AllSystemsExplored) + { + // set all systems explored + foreach (var sys in gal.StarSystemLocations.Select(ssl => ssl.Item)) + sys.ExploredByEmpires.Add(emp); + } + + // give empire starting techs + Galaxy.Current.CleanGameState(); // need to know what the techs in the game are! + foreach (var tech in Mod.Current.Technologies.Where(t => !t.IsRacial || emp.Abilities().Any(a => a.Rule.Matches("Tech Area") && a.Value1 == t.RacialTechID))) + { + switch (StartingTechnologyLevel) + { + case StartingTechnologyLevel.Low: + emp.ResearchedTechnologies[tech] = tech.StartLevel; + break; + + case StartingTechnologyLevel.Medium: + emp.ResearchedTechnologies[tech] = Math.Max(tech.StartLevel, tech.RaiseLevel); + break; + + case StartingTechnologyLevel.High: + emp.ResearchedTechnologies[tech] = tech.MaximumLevel; + break; + } + } + + // give empire starting resources and storage capacity + foreach (var r in Resource.All.Where(r => r.IsGlobal)) + { + emp.StoredResources.Add(r, StartingResources); + emp.IntrinsicResourceStorage.Add(r, ResourceStorage); + } + + // give empire starting research + emp.BonusResearch = StartingResearch + (int)(ResearchPointsPerUnspentEmpirePoint * (EmpirePoints - emp.PrimaryRace.PointsSpent)); + + // TODO - moddable colony techs? + string colonyTechName = null; + if ((emp.PrimaryRace.NativeSurface) == "Rock") + colonyTechName = "Rock Planet Colonization"; + else if ((emp.PrimaryRace.NativeSurface) == "Ice") + colonyTechName = "Ice Planet Colonization"; + else if ((emp.PrimaryRace.NativeSurface) == "Gas Giant") + colonyTechName = "Gas Giant Colonization"; + var colonyTech = Mod.Current.Technologies.SingleOrDefault(t => t.Name == colonyTechName); + if (colonyTech != null && emp.ResearchedTechnologies[colonyTech] < 1) + emp.ResearchedTechnologies[colonyTech] = 1; + + // find facilities to place on homeworlds + var facils = emp.UnlockedItems.OfType(); + var sy = facils.LastOrDefault(facil => facil.HasAbility("Space Yard")); + var sp = facils.LastOrDefault(facil => facil.HasAbility("Spaceport")); + var rd = facils.LastOrDefault(facil => facil.HasAbility("Supply Generation")); + var min = facils.WithMax(facil => facil.GetAbilityValue("Resource Generation - Minerals").ToInt()).LastOrDefault(); + var org = facils.WithMax(facil => facil.GetAbilityValue("Resource Generation - Organics").ToInt()).LastOrDefault(); + var rad = facils.WithMax(facil => facil.GetAbilityValue("Resource Generation - Radioactives").ToInt()).LastOrDefault(); + var res = facils.WithMax(facil => facil.GetAbilityValue("Point Generation - Research").ToInt()).LastOrDefault(); + // TODO - game setup option for intel facilities on homeworlds? HomeworldStartingFacilities.txt ala se5? + + // SY rate, for colonies + var rate = new ResourceQuantity(); + if (sy != null) + { + // TODO - define mappings between SY ability numbers and resource names in a mod file + rate.Add(Resource.Minerals, sy.GetAbilityValue("Space Yard", 2, true, true, a => a.Value1 == "1").ToInt()); + rate.Add(Resource.Organics, sy.GetAbilityValue("Space Yard", 2, true, true, a => a.Value1 == "2").ToInt()); + rate.Add(Resource.Radioactives, sy.GetAbilityValue("Space Yard", 2, true, true, a => a.Value1 == "3").ToInt()); + } + + // build connectivity graph for computing warp distance + var graph = new ConnectivityGraph(); + foreach (var s in Galaxy.Current.StarSystemLocations.Select(ssl => ssl.Item)) + graph.Add(s); + foreach (var s in Galaxy.Current.StarSystemLocations.Select(ssl => ssl.Item)) + { + foreach (var wp in s.FindSpaceObjects()) + graph.Connect(s, wp.TargetStarSystemLocation.Item, true); + } + + for (int i = 0; i < HomeworldsPerEmpire; i++) + { + // TODO - respect Empire Placement and Max Homeworld Dispersion settings + var planets = gal.StarSystemLocations.SelectMany(ssl => ssl.Item.FindSpaceObjects(p => p.Owner == null && p.MoonOf == null)); + var okSystems = gal.StarSystemLocations.Select(ssl => ssl.Item).Where(sys => sys.EmpiresCanStartIn); + if (i > 0) + { + // make sure subsequent homeworlds are placed within a limited number of warps from the first homeworld + okSystems = okSystems.Where(sys => graph.ComputeDistance(sys, emp.OwnedSpaceObjects.OfType().First().FindStarSystem()) <= MaxHomeworldDispersion); + } + switch (EmpirePlacement) + { + case EmpirePlacement.CanStartInSameSystem: + // no further filtering + break; + + case EmpirePlacement.DifferentSystems: + // filter to systems containing no other empires' homeworlds + okSystems = okSystems.Where(sys => !sys.FindSpaceObjects(p => p.Owner != null && p.Owner != emp).Any()); + break; + + case EmpirePlacement.Equidistant: + // filter to systems containing no other empires' homeworlds + okSystems = okSystems.Where(sys => !sys.FindSpaceObjects(p => p.Owner != null && p.Owner != emp).Any()); + // filter to systems that are the maximum distance away from any other empire's homeworlds + var otherEmpireHomeSystems = gal.StarSystemLocations.SelectMany(ssl => ssl.Item.FindSpaceObjects(p => p.Owner != null && p.Owner != emp).Select(p => p.FindStarSystem()).Distinct()).ToArray(); + okSystems = okSystems.WithMax(sys => otherEmpireHomeSystems.Min(o => graph.ComputeDistance(sys, o))); + break; + } + okSystems = okSystems.ToArray(); + if (!okSystems.Any()) + { + // replace an inhospitable system with a hospitable one + var convertSys = gal.StarSystemLocations.Select(ssl => ssl.Item).Where(sys => !sys.EmpiresCanStartIn).PickRandom(dice); + if (convertSys == null) + throw new Exception("No suitable system found to place " + emp + "'s homeworld #" + (i + 1) + ". (Try increasing the number of star systems.)"); + var newSys = Mod.Current.StarSystemTemplates.Where(q => q.EmpiresCanStartIn).PickRandom(dice).Instantiate(); + var sid = convertSys.ID; + newSys.CopyTo(convertSys); + convertSys.ID = sid; + convertSys.Name = Mod.Current.StarSystemNames.Except(gal.StarSystemLocations.Select(q => q.Item.Name)).PickRandom(dice); + foreach (var l in Galaxy.Current.StarSystemLocations) + { + foreach (var wp in l.Item.FindSpaceObjects().Where(q => q.Target.StarSystem == convertSys).ToArray()) + { + wp.Dispose(); + WarpPointPlacementStrategy.PlaceWarpPoints(Galaxy.Current.StarSystemLocations.Single(q => q.Item == convertSys), l); + } + } + GalaxyTemplate.NameStellarObjects(convertSys); + okSystems = new[] { convertSys }; + } + Planet hw; + planets = planets.Where(p => okSystems.Contains(p.FindStarSystem())); + if (!planets.Any()) + { + // make sure we're placing the homeworld in a system with at least one empty sector + okSystems = okSystems.Where(sys2 => sys2.Sectors.Any(sec => !sec.SpaceObjects.Any())); + + if (!okSystems.Any()) + throw new Exception("No suitable system found to place " + emp + "'s homeworld #" + (i + 1) + ". (Try regenerating the map or increasing the number of star systems.)"); + + // make brand new planet in an OK system + var sys = okSystems.PickRandom(dice); + var nextNum = sys.FindSpaceObjects(p => p.MoonOf == null).Count() + 1; + hw = MakeHomeworld(emp, sys.Name + " " + nextNum.ToRomanNumeral(), dice); + var okSectors = sys.Sectors.Where(sector => !sector.SpaceObjects.Any()); + okSectors.PickRandom(dice).Place(hw); + } + else + hw = planets.PickRandom(dice); + if (hw.Surface != emp.PrimaryRace.NativeSurface || hw.Atmosphere != emp.PrimaryRace.NativeAtmosphere || hw.Size != HomeworldSize) + { + var replacementHomeworld = MakeHomeworld(emp, hw.Name, dice); + replacementHomeworld.CopyTo(hw); + } + hw.ResourceValue[Resource.Minerals] = hw.ResourceValue[Resource.Organics] = hw.ResourceValue[Resource.Radioactives] = HomeworldValue; + hw.Colony = new Colony + { + Owner = emp, + ConstructionQueue = new ConstructionQueue(hw), + IsHomeworld = true, + }; + hw.AddPopulation(emp.PrimaryRace, hw.Size.MaxPopulation); + if (sy != null && hw.Colony.Facilities.Count < hw.MaxFacilities) + hw.Colony.Facilities.Add(sy.Instantiate()); + if (sp != null && hw.Colony.Facilities.Count < hw.MaxFacilities && (!emp.HasAbility("No Spaceports") || sp.Abilities.Count > 1)) + // natural merchants get spaceports only if spaceports have more than one ability + // of course, if the other abilities are *penalties*... oh well, they can scrap them! + hw.Colony.Facilities.Add(sp.Instantiate()); + if (rd != null && hw.Colony.Facilities.Count < hw.MaxFacilities) + hw.Colony.Facilities.Add(rd.Instantiate()); + var lastCount = 0; + while (hw.Colony.Facilities.Count < hw.MaxFacilities && hw.Colony.Facilities.Count > lastCount) + { + lastCount = hw.Colony.Facilities.Count; + + if (min != null && hw.Colony.Facilities.Count < hw.MaxFacilities) + hw.Colony.Facilities.Add(min.Instantiate()); + if (org != null && hw.Colony.Facilities.Count < hw.MaxFacilities) + hw.Colony.Facilities.Add(org.Instantiate()); + if (rad != null && hw.Colony.Facilities.Count < hw.MaxFacilities) + hw.Colony.Facilities.Add(rad.Instantiate()); + + // no research facilities needed at max tech! + if (StartingTechnologyLevel != StartingTechnologyLevel.High) + { + if (res != null && hw.Colony.Facilities.Count < hw.MaxFacilities) + hw.Colony.Facilities.Add(res.Instantiate()); + } + } + foreach (var f in hw.Colony.Facilities) + f.ConstructionProgress = f.Cost; + } + + // mark home systems explored + foreach (var sys in gal.StarSystemLocations.Select(ssl => ssl.Item)) + { + if (!sys.ExploredByEmpires.Contains(emp) && sys.FindSpaceObjects().Any(planet => planet.Owner == emp)) + sys.ExploredByEmpires.Add(emp); + } + + // in case two empires started in the same system + foreach (var x in gal.FindSpaceObjects().Owned().ToArray()) + x.UpdateEmpireMemories(); + } + + /// + /// Picks a random color from a limited palette of 63 colors. + /// + /// + private Color RandomColor(PRNG dice) + { + int r = 0, g = 0, b = 0; + while (r == 0 && g == 0 && b == 0) + { + r = RandomRGB(dice); + g = RandomRGB(dice); + b = RandomRGB(dice); + } + return Color.FromArgb(r, g, b); + } + + /// + /// Generates a random number used to pick a color from a limited palette of 63 colors. + /// + /// + private int RandomRGB(PRNG dice) + { + return RandomHelper.Range(0, 3, dice) * 85; + } + } +} diff --git a/FrEee/Game/Setup/StarSystemPlacementStrategies/ClusteredStarSystemPlacementStrategy.cs b/FrEee/Setup/StarSystemPlacementStrategies/ClusteredStarSystemPlacementStrategy.cs similarity index 88% rename from FrEee/Game/Setup/StarSystemPlacementStrategies/ClusteredStarSystemPlacementStrategy.cs rename to FrEee/Setup/StarSystemPlacementStrategies/ClusteredStarSystemPlacementStrategy.cs index dd94da516..c06c366e4 100644 --- a/FrEee/Game/Setup/StarSystemPlacementStrategies/ClusteredStarSystemPlacementStrategy.cs +++ b/FrEee/Setup/StarSystemPlacementStrategies/ClusteredStarSystemPlacementStrategy.cs @@ -1,64 +1,64 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Setup.StarSystemPlacementStrategies -{ - /// - /// Places stars grouped together in tight clusters separated by long distances. - /// - [Serializable] - public class ClusteredStarSystemPlacementStrategy : IStarSystemPlacementStrategy - { - public Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice) - { - var openPositions = bounds.GetAllPoints(); - foreach (var sspos in galaxy.StarSystemLocations.Select(sspos => sspos.Location)) - openPositions = openPositions.BlockOut(sspos, buffer); - if (!openPositions.Any()) - return null; - - // sort positions by distance to nearest star - var ordered = openPositions.Select(p => new - { - Position = p, - Distances = galaxy.StarSystemLocations.Select(sspos => sspos.Location.ManhattanDistance(p)).OrderBy(dist => dist) - }).OrderBy(p => p.Distances.MinOrDefault()); - var minDist = ordered.SelectMany(p => p.Distances).MinOrDefault(); - - if (dice.Next(2) == 0) - { - // place a star near other stars, but not near TOO many other stars - var ok = ordered.Where(item => item.Distances.FirstOrDefault() == minDist); - Dictionary dict; - if (ok.Any()) - { - dict = new Dictionary(); - foreach (var p in ok) - dict.Add(p.Position, 1d / p.Distances.Sum(d => Math.Pow(d, 3))); - } - else - { - // place a star off in the middle of nowhere - dict = new Dictionary(); - foreach (var p in ordered) - dict.Add(p.Position, p.Distances.Sum(d => Math.Pow(d, 3))); - } - return dict.PickWeighted(dice); - } - else - { - // place a star off in the middle of nowhere - var dict = new Dictionary(); - foreach (var p in ordered) - dict.Add(p.Position, p.Distances.Sum(d => Math.Pow(d, 3))); - return dict.PickWeighted(dice); - } - } - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace FrEee.Setup.StarSystemPlacementStrategies +{ + /// + /// Places stars grouped together in tight clusters separated by long distances. + /// + [Serializable] + public class ClusteredStarSystemPlacementStrategy : IStarSystemPlacementStrategy + { + public Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice) + { + var openPositions = bounds.GetAllPoints(); + foreach (var sspos in galaxy.StarSystemLocations.Select(sspos => sspos.Location)) + openPositions = openPositions.BlockOut(sspos, buffer); + if (!openPositions.Any()) + return null; + + // sort positions by distance to nearest star + var ordered = openPositions.Select(p => new + { + Position = p, + Distances = galaxy.StarSystemLocations.Select(sspos => sspos.Location.ManhattanDistance(p)).OrderBy(dist => dist) + }).OrderBy(p => p.Distances.MinOrDefault()); + var minDist = ordered.SelectMany(p => p.Distances).MinOrDefault(); + + if (dice.Next(2) == 0) + { + // place a star near other stars, but not near TOO many other stars + var ok = ordered.Where(item => item.Distances.FirstOrDefault() == minDist); + Dictionary dict; + if (ok.Any()) + { + dict = new Dictionary(); + foreach (var p in ok) + dict.Add(p.Position, 1d / p.Distances.Sum(d => Math.Pow(d, 3))); + } + else + { + // place a star off in the middle of nowhere + dict = new Dictionary(); + foreach (var p in ordered) + dict.Add(p.Position, p.Distances.Sum(d => Math.Pow(d, 3))); + } + return dict.PickWeighted(dice); + } + else + { + // place a star off in the middle of nowhere + var dict = new Dictionary(); + foreach (var p in ordered) + dict.Add(p.Position, p.Distances.Sum(d => Math.Pow(d, 3))); + return dict.PickWeighted(dice); + } + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/StarSystemPlacementStrategies/DiffuseStarSystemPlacementStrategy.cs b/FrEee/Setup/StarSystemPlacementStrategies/DiffuseStarSystemPlacementStrategy.cs similarity index 80% rename from FrEee/Game/Setup/StarSystemPlacementStrategies/DiffuseStarSystemPlacementStrategy.cs rename to FrEee/Setup/StarSystemPlacementStrategies/DiffuseStarSystemPlacementStrategy.cs index 0a0604d33..a0842297c 100644 --- a/FrEee/Game/Setup/StarSystemPlacementStrategies/DiffuseStarSystemPlacementStrategy.cs +++ b/FrEee/Setup/StarSystemPlacementStrategies/DiffuseStarSystemPlacementStrategy.cs @@ -1,32 +1,32 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Setup.StarSystemPlacementStrategies -{ - /// - /// Places stars spaced roughly evenly. - /// - [Serializable] - public class DiffuseStarSystemPlacementStrategy : IStarSystemPlacementStrategy - { - public Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice) - { - var openPositions = bounds.GetAllPoints(); - foreach (var sspos in galaxy.StarSystemLocations.Select(sspos => sspos.Location)) - openPositions = openPositions.BlockOut(sspos, buffer); - if (!openPositions.Any()) - return null; - - // sort positions by distance to nearest star - var ordered = openPositions.OrderBy(p => galaxy.StarSystemLocations.Select(sspos => sspos.Location).MinOrDefault(p2 => p2.ManhattanDistance(p))); - - // place a star off in the middle of nowhere - return ordered.Last(); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Drawing; +using System.Linq; + +namespace FrEee.Setup.StarSystemPlacementStrategies +{ + /// + /// Places stars spaced roughly evenly. + /// + [Serializable] + public class DiffuseStarSystemPlacementStrategy : IStarSystemPlacementStrategy + { + public Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice) + { + var openPositions = bounds.GetAllPoints(); + foreach (var sspos in galaxy.StarSystemLocations.Select(sspos => sspos.Location)) + openPositions = openPositions.BlockOut(sspos, buffer); + if (!openPositions.Any()) + return null; + + // sort positions by distance to nearest star + var ordered = openPositions.OrderBy(p => galaxy.StarSystemLocations.Select(sspos => sspos.Location).MinOrDefault(p2 => p2.ManhattanDistance(p))); + + // place a star off in the middle of nowhere + return ordered.Last(); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/StarSystemPlacementStrategies/GridStarSystemPlacementStrategy.cs b/FrEee/Setup/StarSystemPlacementStrategies/GridStarSystemPlacementStrategy.cs similarity index 86% rename from FrEee/Game/Setup/StarSystemPlacementStrategies/GridStarSystemPlacementStrategy.cs rename to FrEee/Setup/StarSystemPlacementStrategies/GridStarSystemPlacementStrategy.cs index cee88905c..d757761a7 100644 --- a/FrEee/Game/Setup/StarSystemPlacementStrategies/GridStarSystemPlacementStrategy.cs +++ b/FrEee/Setup/StarSystemPlacementStrategies/GridStarSystemPlacementStrategy.cs @@ -1,51 +1,51 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Setup.StarSystemPlacementStrategies -{ - /// - /// Places stars in a grid. - /// - [Serializable] - public class GridStarSystemPlacementStrategy : IStarSystemPlacementStrategy - { - public Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice) - { - var openPositions = bounds.GetAllPoints(); - foreach (var sspos in galaxy.StarSystemLocations.Select(sspos => sspos.Location)) - openPositions = openPositions.BlockOut(sspos, buffer); - if (!openPositions.Any()) - return null; - - int totalStars = starsLeft + galaxy.StarSystemLocations.Count; - double xfactor = Math.Sqrt(totalStars) * (double)bounds.Height / (double)bounds.Width; - double yfactor = Math.Sqrt(totalStars) * (double)bounds.Width / (double)bounds.Height; - int xstars = (int)(totalStars / xfactor); - int ystars = (int)(totalStars / yfactor); - - if (xstars * ystars <= galaxy.StarSystemLocations.Count) - return null; - - int row = galaxy.StarSystemLocations.Count % xstars; - int col = galaxy.StarSystemLocations.Count / xstars; - int rowsize, colsize; - if (xstars == 1) - rowsize = bounds.Width / 2; - else - rowsize = bounds.Width / (xstars - 1); - if (ystars == 1) - colsize = bounds.Height / 2; - else - colsize = bounds.Height / (ystars - 1); - - var idealPos = new Point(row * rowsize + bounds.Left, col * colsize + bounds.Top); - - return openPositions.OrderBy(p => p.ManhattanDistance(idealPos)).First(); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Drawing; +using System.Linq; + +namespace FrEee.Setup.StarSystemPlacementStrategies +{ + /// + /// Places stars in a grid. + /// + [Serializable] + public class GridStarSystemPlacementStrategy : IStarSystemPlacementStrategy + { + public Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice) + { + var openPositions = bounds.GetAllPoints(); + foreach (var sspos in galaxy.StarSystemLocations.Select(sspos => sspos.Location)) + openPositions = openPositions.BlockOut(sspos, buffer); + if (!openPositions.Any()) + return null; + + int totalStars = starsLeft + galaxy.StarSystemLocations.Count; + double xfactor = Math.Sqrt(totalStars) * (double)bounds.Height / (double)bounds.Width; + double yfactor = Math.Sqrt(totalStars) * (double)bounds.Width / (double)bounds.Height; + int xstars = (int)(totalStars / xfactor); + int ystars = (int)(totalStars / yfactor); + + if (xstars * ystars <= galaxy.StarSystemLocations.Count) + return null; + + int row = galaxy.StarSystemLocations.Count % xstars; + int col = galaxy.StarSystemLocations.Count / xstars; + int rowsize, colsize; + if (xstars == 1) + rowsize = bounds.Width / 2; + else + rowsize = bounds.Width / (xstars - 1); + if (ystars == 1) + colsize = bounds.Height / 2; + else + colsize = bounds.Height / (ystars - 1); + + var idealPos = new Point(row * rowsize + bounds.Left, col * colsize + bounds.Top); + + return openPositions.OrderBy(p => p.ManhattanDistance(idealPos)).First(); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/StarSystemPlacementStrategies/RandomStarSystemPlacementStrategy.cs b/FrEee/Setup/StarSystemPlacementStrategies/RandomStarSystemPlacementStrategy.cs similarity index 74% rename from FrEee/Game/Setup/StarSystemPlacementStrategies/RandomStarSystemPlacementStrategy.cs rename to FrEee/Setup/StarSystemPlacementStrategies/RandomStarSystemPlacementStrategy.cs index 14dc8fd84..dae1649af 100644 --- a/FrEee/Game/Setup/StarSystemPlacementStrategies/RandomStarSystemPlacementStrategy.cs +++ b/FrEee/Setup/StarSystemPlacementStrategies/RandomStarSystemPlacementStrategy.cs @@ -1,27 +1,27 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Setup.StarSystemPlacementStrategies -{ - /// - /// Places stars randomly. - /// - [Serializable] - public class RandomStarSystemPlacementStrategy : IStarSystemPlacementStrategy - { - public Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice) - { - var openPositions = bounds.GetAllPoints(); - foreach (var sspos in galaxy.StarSystemLocations) - openPositions = openPositions.BlockOut(sspos.Location, buffer); - if (!openPositions.Any()) - return null; - return openPositions.PickRandom(dice); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Drawing; +using System.Linq; + +namespace FrEee.Setup.StarSystemPlacementStrategies +{ + /// + /// Places stars randomly. + /// + [Serializable] + public class RandomStarSystemPlacementStrategy : IStarSystemPlacementStrategy + { + public Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice) + { + var openPositions = bounds.GetAllPoints(); + foreach (var sspos in galaxy.StarSystemLocations) + openPositions = openPositions.BlockOut(sspos.Location, buffer); + if (!openPositions.Any()) + return null; + return openPositions.PickRandom(dice); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/StarSystemPlacementStrategies/SpiralStarSystemPlacementStrategy.cs b/FrEee/Setup/StarSystemPlacementStrategies/SpiralStarSystemPlacementStrategy.cs similarity index 84% rename from FrEee/Game/Setup/StarSystemPlacementStrategies/SpiralStarSystemPlacementStrategy.cs rename to FrEee/Setup/StarSystemPlacementStrategies/SpiralStarSystemPlacementStrategy.cs index e02db7e79..8f393be2e 100644 --- a/FrEee/Game/Setup/StarSystemPlacementStrategies/SpiralStarSystemPlacementStrategy.cs +++ b/FrEee/Setup/StarSystemPlacementStrategies/SpiralStarSystemPlacementStrategy.cs @@ -1,35 +1,35 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; -using System.Collections.Generic; -using System.Drawing; -using System.Linq; - -namespace FrEee.Game.Setup.StarSystemPlacementStrategies -{ - /// - /// Places stars clustered around the center of the galaxy. - /// - [Serializable] - public class SpiralStarSystemPlacementStrategy : IStarSystemPlacementStrategy - { - public Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice) - { - var openPositions = bounds.GetAllPoints(); - foreach (var sspos in galaxy.StarSystemLocations.Select(sspos => sspos.Location)) - openPositions = openPositions.BlockOut(sspos, buffer); - if (!openPositions.Any()) - return null; - - // weight locations based on gradient from distance to center - var center = new Point(bounds.X + bounds.Width / 2, bounds.Y + bounds.Height / 2); - var ordered = openPositions.Select(p => new KeyValuePair(p, Math.Pow(p.ManhattanDistance(center), 2))).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); - var max = ordered.Max(kvp => kvp.Value); - foreach (var p in ordered.Keys.ToArray()) - ordered[p] = max / ordered[p]; - return ordered.PickWeighted(dice); - } - } +using FrEee.Interfaces; +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace FrEee.Setup.StarSystemPlacementStrategies +{ + /// + /// Places stars clustered around the center of the galaxy. + /// + [Serializable] + public class SpiralStarSystemPlacementStrategy : IStarSystemPlacementStrategy + { + public Point? PlaceStarSystem(Galaxy galaxy, int buffer, Rectangle bounds, int starsLeft, PRNG dice) + { + var openPositions = bounds.GetAllPoints(); + foreach (var sspos in galaxy.StarSystemLocations.Select(sspos => sspos.Location)) + openPositions = openPositions.BlockOut(sspos, buffer); + if (!openPositions.Any()) + return null; + + // weight locations based on gradient from distance to center + var center = new Point(bounds.X + bounds.Width / 2, bounds.Y + bounds.Height / 2); + var ordered = openPositions.Select(p => new KeyValuePair(p, Math.Pow(p.ManhattanDistance(center), 2))).ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + var max = ordered.Max(kvp => kvp.Value); + foreach (var p in ordered.Keys.ToArray()) + ordered[p] = max / ordered[p]; + return ordered.PickWeighted(dice); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/WarpPointPlacementStrategies/CenterWarpPointPlacementStrategy.cs b/FrEee/Setup/WarpPointPlacementStrategies/CenterWarpPointPlacementStrategy.cs similarity index 86% rename from FrEee/Game/Setup/WarpPointPlacementStrategies/CenterWarpPointPlacementStrategy.cs rename to FrEee/Setup/WarpPointPlacementStrategies/CenterWarpPointPlacementStrategy.cs index 761957673..78475930e 100644 --- a/FrEee/Game/Setup/WarpPointPlacementStrategies/CenterWarpPointPlacementStrategy.cs +++ b/FrEee/Setup/WarpPointPlacementStrategies/CenterWarpPointPlacementStrategy.cs @@ -1,27 +1,27 @@ -using FrEee.Game.Objects.Space; - -namespace FrEee.Game.Setup.WarpPointPlacementStrategies -{ - /// - /// Places warp points at the center of the system. Exploration is easy, but so is setting up chokepoints. - /// - public class CenterWarpPointPlacementStrategy : WarpPointPlacementStrategy - { - static CenterWarpPointPlacementStrategy() - { - Instance = new CenterWarpPointPlacementStrategy(); - } - - private CenterWarpPointPlacementStrategy() - : base("Center", "Places warp points at the center of the system. Exploration is easy, but so is setting up chokepoints.") - { - } - - public static CenterWarpPointPlacementStrategy Instance { get; private set; } - - public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) - { - return here.Item.GetSector(0, 0); - } - } +using FrEee.Objects.Space; + +namespace FrEee.Setup.WarpPointPlacementStrategies +{ + /// + /// Places warp points at the center of the system. Exploration is easy, but so is setting up chokepoints. + /// + public class CenterWarpPointPlacementStrategy : WarpPointPlacementStrategy + { + static CenterWarpPointPlacementStrategy() + { + Instance = new CenterWarpPointPlacementStrategy(); + } + + private CenterWarpPointPlacementStrategy() + : base("Center", "Places warp points at the center of the system. Exploration is easy, but so is setting up chokepoints.") + { + } + + public static CenterWarpPointPlacementStrategy Instance { get; private set; } + + public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) + { + return here.Item.GetSector(0, 0); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/WarpPointPlacementStrategies/EdgeAlignedWarpPointPlacementStrategy.cs b/FrEee/Setup/WarpPointPlacementStrategies/EdgeAlignedWarpPointPlacementStrategy.cs similarity index 87% rename from FrEee/Game/Setup/WarpPointPlacementStrategies/EdgeAlignedWarpPointPlacementStrategy.cs rename to FrEee/Setup/WarpPointPlacementStrategies/EdgeAlignedWarpPointPlacementStrategy.cs index dd9364f85..4ed8885aa 100644 --- a/FrEee/Game/Setup/WarpPointPlacementStrategies/EdgeAlignedWarpPointPlacementStrategy.cs +++ b/FrEee/Setup/WarpPointPlacementStrategies/EdgeAlignedWarpPointPlacementStrategy.cs @@ -1,35 +1,35 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Setup.WarpPointPlacementStrategies -{ - /// - /// Places warp points along the edge of the system, aligned with the star systems they lead to. - /// - public class EdgeAlignedWarpPointPlacementStrategy : WarpPointPlacementStrategy - { - static EdgeAlignedWarpPointPlacementStrategy() - { - Instance = new EdgeAlignedWarpPointPlacementStrategy(); - } - - private EdgeAlignedWarpPointPlacementStrategy() - : base("Edge Aligned", "Places warp points along the edge of the system, aligned with the star systems they lead to.") - { - } - - public static EdgeAlignedWarpPointPlacementStrategy Instance { get; private set; } - - public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) - { - var angle = here.Location.AngleTo(there.Location); - var y = Math.Sin(angle / 180d * Math.PI) * here.Item.Radius; - var x = Math.Cos(angle / 180d * Math.PI) * here.Item.Radius; - var multiplier = here.Item.Radius / Math.Max(Math.Abs(x), Math.Abs(y)); - x *= multiplier; - y *= multiplier; - return here.Item.GetSector((int)Math.Round(x), (int)Math.Round(y)); - } - } +using FrEee.Objects.Space; +using FrEee.Extensions; +using System; + +namespace FrEee.Setup.WarpPointPlacementStrategies +{ + /// + /// Places warp points along the edge of the system, aligned with the star systems they lead to. + /// + public class EdgeAlignedWarpPointPlacementStrategy : WarpPointPlacementStrategy + { + static EdgeAlignedWarpPointPlacementStrategy() + { + Instance = new EdgeAlignedWarpPointPlacementStrategy(); + } + + private EdgeAlignedWarpPointPlacementStrategy() + : base("Edge Aligned", "Places warp points along the edge of the system, aligned with the star systems they lead to.") + { + } + + public static EdgeAlignedWarpPointPlacementStrategy Instance { get; private set; } + + public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) + { + var angle = here.Location.AngleTo(there.Location); + var y = Math.Sin(angle / 180d * Math.PI) * here.Item.Radius; + var x = Math.Cos(angle / 180d * Math.PI) * here.Item.Radius; + var multiplier = here.Item.Radius / Math.Max(Math.Abs(x), Math.Abs(y)); + x *= multiplier; + y *= multiplier; + return here.Item.GetSector((int)Math.Round(x), (int)Math.Round(y)); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/WarpPointPlacementStrategies/PlanetWarpPointPlacementStrategy.cs b/FrEee/Setup/WarpPointPlacementStrategies/PlanetWarpPointPlacementStrategy.cs similarity index 87% rename from FrEee/Game/Setup/WarpPointPlacementStrategies/PlanetWarpPointPlacementStrategy.cs rename to FrEee/Setup/WarpPointPlacementStrategies/PlanetWarpPointPlacementStrategy.cs index 0ffdab513..6b76a35a7 100644 --- a/FrEee/Game/Setup/WarpPointPlacementStrategies/PlanetWarpPointPlacementStrategy.cs +++ b/FrEee/Setup/WarpPointPlacementStrategies/PlanetWarpPointPlacementStrategy.cs @@ -1,36 +1,36 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; -using System.Linq; - -namespace FrEee.Game.Setup.WarpPointPlacementStrategies -{ - /// - /// Places warp points at the location of planets. If there are no planets, warp points will be placed randomly. Planets on warp points will be particularly vulnerable to attack. - /// - public class PlanetWarpPointPlacementStrategy : WarpPointPlacementStrategy - { - static PlanetWarpPointPlacementStrategy() - { - Instance = new PlanetWarpPointPlacementStrategy(); - } - - private PlanetWarpPointPlacementStrategy() - : base("Planet", "Places warp points at the location of planets. If there are no planets, warp points will be placed randomly. Planets on warp points will be particularly vulnerable to attack.") - { - } - - public static PlanetWarpPointPlacementStrategy Instance { get; private set; } - - public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) - { - var planets = here.Item.FindSpaceObjects(); - if (planets.Any()) - { - var planet = planets.PickRandom(); - return planet.Sector; - } - else - return RandomWarpPointPlacementStrategy.Instance.GetWarpPointSector(here, there); - } - } +using FrEee.Objects.Space; +using FrEee.Extensions; +using System.Linq; + +namespace FrEee.Setup.WarpPointPlacementStrategies +{ + /// + /// Places warp points at the location of planets. If there are no planets, warp points will be placed randomly. Planets on warp points will be particularly vulnerable to attack. + /// + public class PlanetWarpPointPlacementStrategy : WarpPointPlacementStrategy + { + static PlanetWarpPointPlacementStrategy() + { + Instance = new PlanetWarpPointPlacementStrategy(); + } + + private PlanetWarpPointPlacementStrategy() + : base("Planet", "Places warp points at the location of planets. If there are no planets, warp points will be placed randomly. Planets on warp points will be particularly vulnerable to attack.") + { + } + + public static PlanetWarpPointPlacementStrategy Instance { get; private set; } + + public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) + { + var planets = here.Item.FindSpaceObjects(); + if (planets.Any()) + { + var planet = planets.PickRandom(); + return planet.Sector; + } + else + return RandomWarpPointPlacementStrategy.Instance.GetWarpPointSector(here, there); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/WarpPointPlacementStrategies/RandomAlignedWarpPointPlacementStrategy.cs b/FrEee/Setup/WarpPointPlacementStrategies/RandomAlignedWarpPointPlacementStrategy.cs similarity index 87% rename from FrEee/Game/Setup/WarpPointPlacementStrategies/RandomAlignedWarpPointPlacementStrategy.cs rename to FrEee/Setup/WarpPointPlacementStrategies/RandomAlignedWarpPointPlacementStrategy.cs index 2510caa0b..7f2f6b125 100644 --- a/FrEee/Game/Setup/WarpPointPlacementStrategies/RandomAlignedWarpPointPlacementStrategy.cs +++ b/FrEee/Setup/WarpPointPlacementStrategies/RandomAlignedWarpPointPlacementStrategy.cs @@ -1,36 +1,36 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility; -using FrEee.Utility.Extensions; -using System; - -namespace FrEee.Game.Setup.WarpPointPlacementStrategies -{ - /// - /// Places warp points randomly within a system, but aligned with the star system they lead to. Exploration is difficult due to needing to traverse entire systems. - /// - public class RandomAlignedWarpPointPlacementStrategy : WarpPointPlacementStrategy - { - static RandomAlignedWarpPointPlacementStrategy() - { - Instance = new RandomAlignedWarpPointPlacementStrategy(); - } - - private RandomAlignedWarpPointPlacementStrategy() - : base("Random Aligned", "Places warp points randomly within a system, but aligned with the star system they lead to. Exploration is difficult due to needing to traverse entire systems.") - { - } - - public static RandomAlignedWarpPointPlacementStrategy Instance { get; private set; } - - public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) - { - var angle = here.Location.AngleTo(there.Location); - var y = Math.Sin(angle / 180d * Math.PI) * here.Item.Radius; - var x = Math.Cos(angle / 180d * Math.PI) * here.Item.Radius; - var multiplier = RandomHelper.Next(here.Item.Radius / Math.Max(Math.Abs(x), Math.Abs(y))); - x *= multiplier; - y *= multiplier; - return here.Item.GetSector((int)Math.Round(x), (int)Math.Round(y)); - } - } +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; +using FrEee.Extensions; +using System; + +namespace FrEee.Setup.WarpPointPlacementStrategies +{ + /// + /// Places warp points randomly within a system, but aligned with the star system they lead to. Exploration is difficult due to needing to traverse entire systems. + /// + public class RandomAlignedWarpPointPlacementStrategy : WarpPointPlacementStrategy + { + static RandomAlignedWarpPointPlacementStrategy() + { + Instance = new RandomAlignedWarpPointPlacementStrategy(); + } + + private RandomAlignedWarpPointPlacementStrategy() + : base("Random Aligned", "Places warp points randomly within a system, but aligned with the star system they lead to. Exploration is difficult due to needing to traverse entire systems.") + { + } + + public static RandomAlignedWarpPointPlacementStrategy Instance { get; private set; } + + public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) + { + var angle = here.Location.AngleTo(there.Location); + var y = Math.Sin(angle / 180d * Math.PI) * here.Item.Radius; + var x = Math.Cos(angle / 180d * Math.PI) * here.Item.Radius; + var multiplier = RandomHelper.Next(here.Item.Radius / Math.Max(Math.Abs(x), Math.Abs(y))); + x *= multiplier; + y *= multiplier; + return here.Item.GetSector((int)Math.Round(x), (int)Math.Round(y)); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/WarpPointPlacementStrategies/RandomWarpPointPlacementStrategy.cs b/FrEee/Setup/WarpPointPlacementStrategies/RandomWarpPointPlacementStrategy.cs similarity index 84% rename from FrEee/Game/Setup/WarpPointPlacementStrategies/RandomWarpPointPlacementStrategy.cs rename to FrEee/Setup/WarpPointPlacementStrategies/RandomWarpPointPlacementStrategy.cs index 12f6b2fe4..46db2b39e 100644 --- a/FrEee/Game/Setup/WarpPointPlacementStrategies/RandomWarpPointPlacementStrategy.cs +++ b/FrEee/Setup/WarpPointPlacementStrategies/RandomWarpPointPlacementStrategy.cs @@ -1,30 +1,30 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility; - -namespace FrEee.Game.Setup.WarpPointPlacementStrategies -{ - /// - /// Places warp points randomly within a system. - /// - public class RandomWarpPointPlacementStrategy : WarpPointPlacementStrategy - { - static RandomWarpPointPlacementStrategy() - { - Instance = new RandomWarpPointPlacementStrategy(); - } - - private RandomWarpPointPlacementStrategy() - : base("Random", "Places warp points randomly within a system.") - { - } - - public static RandomWarpPointPlacementStrategy Instance { get; private set; } - - public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) - { - var x = RandomHelper.Range(-here.Item.Radius, here.Item.Radius); - var y = RandomHelper.Range(-here.Item.Radius, here.Item.Radius); - return here.Item.GetSector(x, y); - } - } +using FrEee.Objects.Space; +using FrEee.Utility; using FrEee.Serialization; + +namespace FrEee.Setup.WarpPointPlacementStrategies +{ + /// + /// Places warp points randomly within a system. + /// + public class RandomWarpPointPlacementStrategy : WarpPointPlacementStrategy + { + static RandomWarpPointPlacementStrategy() + { + Instance = new RandomWarpPointPlacementStrategy(); + } + + private RandomWarpPointPlacementStrategy() + : base("Random", "Places warp points randomly within a system.") + { + } + + public static RandomWarpPointPlacementStrategy Instance { get; private set; } + + public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) + { + var x = RandomHelper.Range(-here.Item.Radius, here.Item.Radius); + var y = RandomHelper.Range(-here.Item.Radius, here.Item.Radius); + return here.Item.GetSector(x, y); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/WarpPointPlacementStrategies/StarWarpPointPlacementStrategy.cs b/FrEee/Setup/WarpPointPlacementStrategies/StarWarpPointPlacementStrategy.cs similarity index 87% rename from FrEee/Game/Setup/WarpPointPlacementStrategies/StarWarpPointPlacementStrategy.cs rename to FrEee/Setup/WarpPointPlacementStrategies/StarWarpPointPlacementStrategy.cs index 49a69e9c4..21ba86a2f 100644 --- a/FrEee/Game/Setup/WarpPointPlacementStrategies/StarWarpPointPlacementStrategy.cs +++ b/FrEee/Setup/WarpPointPlacementStrategies/StarWarpPointPlacementStrategy.cs @@ -1,36 +1,36 @@ -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; -using System.Linq; - -namespace FrEee.Game.Setup.WarpPointPlacementStrategies -{ - /// - /// Places warp points at the location of stars. If there are no stars, warp points will be placed randomly. Exploration is easy, but so is setting up chokepoints. - /// - public class StarWarpPointPlacementStrategy : WarpPointPlacementStrategy - { - static StarWarpPointPlacementStrategy() - { - Instance = new StarWarpPointPlacementStrategy(); - } - - private StarWarpPointPlacementStrategy() - : base("Star", "Places warp points at the location of stars. If there are no stars, warp points will be placed randomly. Exploration is easy, but so is setting up chokepoints.") - { - } - - public static StarWarpPointPlacementStrategy Instance { get; private set; } - - public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) - { - var stars = here.Item.FindSpaceObjects(); - if (stars.Any()) - { - var star = stars.PickRandom(); - return star.Sector; - } - else - return RandomWarpPointPlacementStrategy.Instance.GetWarpPointSector(here, there); - } - } +using FrEee.Objects.Space; +using FrEee.Extensions; +using System.Linq; + +namespace FrEee.Setup.WarpPointPlacementStrategies +{ + /// + /// Places warp points at the location of stars. If there are no stars, warp points will be placed randomly. Exploration is easy, but so is setting up chokepoints. + /// + public class StarWarpPointPlacementStrategy : WarpPointPlacementStrategy + { + static StarWarpPointPlacementStrategy() + { + Instance = new StarWarpPointPlacementStrategy(); + } + + private StarWarpPointPlacementStrategy() + : base("Star", "Places warp points at the location of stars. If there are no stars, warp points will be placed randomly. Exploration is easy, but so is setting up chokepoints.") + { + } + + public static StarWarpPointPlacementStrategy Instance { get; private set; } + + public override Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there) + { + var stars = here.Item.FindSpaceObjects(); + if (stars.Any()) + { + var star = stars.PickRandom(); + return star.Sector; + } + else + return RandomWarpPointPlacementStrategy.Instance.GetWarpPointSector(here, there); + } + } } \ No newline at end of file diff --git a/FrEee/Game/Setup/WarpPointPlacementStrategies/WarpPointPlacementStrategy.cs b/FrEee/Setup/WarpPointPlacementStrategies/WarpPointPlacementStrategy.cs similarity index 91% rename from FrEee/Game/Setup/WarpPointPlacementStrategies/WarpPointPlacementStrategy.cs rename to FrEee/Setup/WarpPointPlacementStrategies/WarpPointPlacementStrategy.cs index d005dd45a..6457d8f59 100644 --- a/FrEee/Game/Setup/WarpPointPlacementStrategies/WarpPointPlacementStrategy.cs +++ b/FrEee/Setup/WarpPointPlacementStrategies/WarpPointPlacementStrategy.cs @@ -1,102 +1,102 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Abilities; -using FrEee.Game.Objects.Space; -using FrEee.Modding; -using FrEee.Utility.Extensions; -using System.Collections.Generic; -using System.Linq; - -namespace FrEee.Game.Setup.WarpPointPlacementStrategies -{ - /// - /// Strategy for placing warp points in a star system. - /// - public abstract class WarpPointPlacementStrategy - { - static WarpPointPlacementStrategy() - { - all.Add(EdgeAlignedWarpPointPlacementStrategy.Instance); - all.Add(RandomAlignedWarpPointPlacementStrategy.Instance); - all.Add(RandomWarpPointPlacementStrategy.Instance); - all.Add(CenterWarpPointPlacementStrategy.Instance); - all.Add(StarWarpPointPlacementStrategy.Instance); - all.Add(PlanetWarpPointPlacementStrategy.Instance); - } - - protected WarpPointPlacementStrategy(string name, string description) - { - Name = name; - Description = description; - } - - public static IEnumerable All { get { return all; } } - public string Description { get; set; } - public string Name { get; set; } - private static ICollection all = new List(); - - /// - /// Gets the sector that a warp point should be placed in. - /// - /// - /// - /// - public abstract Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there); - - public void PlaceWarpPoints(ObjectLocation here, ObjectLocation there) - { - var abil1 = here.Item.WarpPointAbilities.Instantiate(); - var abil2 = there.Item.WarpPointAbilities.Instantiate(); - ITemplate wpTemplate; - if (abil1 != null || abil2 != null) - { - // use unusual warp point templates - wpTemplate = Mod.Current.StellarObjectTemplates.OfType().Where(wp => wp.IsUnusual).PickRandom(); - } - else - { - // use normal warp point templates - wpTemplate = Mod.Current.StellarObjectTemplates.OfType().Where(wp => !wp.IsUnusual).PickRandom(); - } - - Sector sector1, sector2; - // HACK - for sectors with null systems - int retries = 0; - do - { - sector1 = GetWarpPointSector(here, there); - retries++; - } while (sector1.StarSystem == null && retries < 10); - do - { - sector2 = GetWarpPointSector(there, here); - retries++; - } while (sector2.StarSystem == null && retries < 10); - - var wp1 = wpTemplate.Instantiate(); - wp1.IsOneWay = false; - wp1.Name = "Warp Point to " + there.Item; - wp1.Target = sector2; - sector1.Place(wp1); - var wp2 = wpTemplate.Instantiate(); - wp2.IsOneWay = false; - wp2.Name = "Warp Point to " + here.Item; - wp2.Target = sector1; - sector2.Place(wp2); - Ability abil = null; - if (abil1 != null && abil2 != null) - { - var abils = new Ability[] { abil1, abil2 }; - abil = abils.PickRandom(); - } - else if (abil1 != null) - abil = abil1; - else if (abil2 != null) - abil = abil2; - if (abil != null) - { - wp1.IntrinsicAbilities.Add(abil); - wp2.IntrinsicAbilities.Add(abil); - } - } - } +using FrEee.Interfaces; +using FrEee.Objects.Abilities; +using FrEee.Objects.Space; +using FrEee.Modding; +using FrEee.Extensions; +using System.Collections.Generic; +using System.Linq; + +namespace FrEee.Setup.WarpPointPlacementStrategies +{ + /// + /// Strategy for placing warp points in a star system. + /// + public abstract class WarpPointPlacementStrategy + { + static WarpPointPlacementStrategy() + { + all.Add(EdgeAlignedWarpPointPlacementStrategy.Instance); + all.Add(RandomAlignedWarpPointPlacementStrategy.Instance); + all.Add(RandomWarpPointPlacementStrategy.Instance); + all.Add(CenterWarpPointPlacementStrategy.Instance); + all.Add(StarWarpPointPlacementStrategy.Instance); + all.Add(PlanetWarpPointPlacementStrategy.Instance); + } + + protected WarpPointPlacementStrategy(string name, string description) + { + Name = name; + Description = description; + } + + public static IEnumerable All { get { return all; } } + public string Description { get; set; } + public string Name { get; set; } + private static ICollection all = new List(); + + /// + /// Gets the sector that a warp point should be placed in. + /// + /// + /// + /// + public abstract Sector GetWarpPointSector(ObjectLocation here, ObjectLocation there); + + public void PlaceWarpPoints(ObjectLocation here, ObjectLocation there) + { + var abil1 = here.Item.WarpPointAbilities.Instantiate(); + var abil2 = there.Item.WarpPointAbilities.Instantiate(); + ITemplate wpTemplate; + if (abil1 != null || abil2 != null) + { + // use unusual warp point templates + wpTemplate = Mod.Current.StellarObjectTemplates.OfType().Where(wp => wp.IsUnusual).PickRandom(); + } + else + { + // use normal warp point templates + wpTemplate = Mod.Current.StellarObjectTemplates.OfType().Where(wp => !wp.IsUnusual).PickRandom(); + } + + Sector sector1, sector2; + // HACK - for sectors with null systems + int retries = 0; + do + { + sector1 = GetWarpPointSector(here, there); + retries++; + } while (sector1.StarSystem == null && retries < 10); + do + { + sector2 = GetWarpPointSector(there, here); + retries++; + } while (sector2.StarSystem == null && retries < 10); + + var wp1 = wpTemplate.Instantiate(); + wp1.IsOneWay = false; + wp1.Name = "Warp Point to " + there.Item; + wp1.Target = sector2; + sector1.Place(wp1); + var wp2 = wpTemplate.Instantiate(); + wp2.IsOneWay = false; + wp2.Name = "Warp Point to " + here.Item; + wp2.Target = sector1; + sector2.Place(wp2); + Ability abil = null; + if (abil1 != null && abil2 != null) + { + var abils = new Ability[] { abil1, abil2 }; + abil = abils.PickRandom(); + } + else if (abil1 != null) + abil = abil1; + else if (abil2 != null) + abil = abil2; + if (abil != null) + { + wp1.IntrinsicAbilities.Add(abil); + wp2.IntrinsicAbilities.Add(abil); + } + } + } } \ No newline at end of file diff --git a/FrEee/Utility/ClientSideCache.cs b/FrEee/Utility/ClientSideCache.cs index 9007a61fc..215df75af 100644 --- a/FrEee/Utility/ClientSideCache.cs +++ b/FrEee/Utility/ClientSideCache.cs @@ -1,4 +1,4 @@ -using FrEee.Game.Objects.Civilization; +using FrEee.Objects.Civilization; using System; namespace FrEee.Utility diff --git a/FrEee/Utility/ConnectivityGraph.cs b/FrEee/Utility/ConnectivityGraph.cs index 18a1be9e6..1a106b33e 100644 --- a/FrEee/Utility/ConnectivityGraph.cs +++ b/FrEee/Utility/ConnectivityGraph.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Utility/HashCodeMasher.cs b/FrEee/Utility/HashCodeMasher.cs index 4669d871c..27870ded1 100644 --- a/FrEee/Utility/HashCodeMasher.cs +++ b/FrEee/Utility/HashCodeMasher.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System.Collections; namespace FrEee.Utility diff --git a/FrEee/Utility/IntVector2.cs b/FrEee/Utility/IntVector2.cs index ddca1e955..3851f20b8 100644 --- a/FrEee/Utility/IntVector2.cs +++ b/FrEee/Utility/IntVector2.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Collections; using System.Collections.Generic; diff --git a/FrEee/Utility/Library.cs b/FrEee/Utility/Library.cs index fe5deac2e..b88fac1dd 100644 --- a/FrEee/Utility/Library.cs +++ b/FrEee/Utility/Library.cs @@ -1,4 +1,5 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; +using FrEee.Serialization; using System; using System.Collections.Generic; using System.IO; @@ -128,4 +129,4 @@ public static void Save() fs.Close(); fs.Dispose(); } } -} \ No newline at end of file +} diff --git a/FrEee/Utility/PRNG.cs b/FrEee/Utility/PRNG.cs index f761e1e15..2a341e7ca 100644 --- a/FrEee/Utility/PRNG.cs +++ b/FrEee/Utility/PRNG.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; namespace FrEee.Utility diff --git a/FrEee/Utility/Pathfinder.cs b/FrEee/Utility/Pathfinder.cs index b0fd60622..d0303b3d8 100644 --- a/FrEee/Utility/Pathfinder.cs +++ b/FrEee/Utility/Pathfinder.cs @@ -1,8 +1,8 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Space; -using FrEee.Utility.Extensions; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Space; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Drawing; diff --git a/FrEee/Utility/Pictures.cs b/FrEee/Utility/Pictures.cs index 2772d9610..6e5b0c876 100644 --- a/FrEee/Utility/Pictures.cs +++ b/FrEee/Utility/Pictures.cs @@ -1,14 +1,14 @@ -using FrEee.Game.Enumerations; -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Game.Objects.Combat; -using FrEee.Game.Objects.Space; -using FrEee.Game.Objects.Technology; -using FrEee.Game.Objects.Vehicles; -using FrEee.Game.Setup; +using FrEee.Enumerations; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Objects.Combat; +using FrEee.Objects.Space; +using FrEee.Objects.Technology; +using FrEee.Objects.Vehicles; +using FrEee.Setup; using FrEee.Modding; using FrEee.Modding.Templates; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using Svg; using System; using System.Collections.Generic; diff --git a/FrEee/Utility/Progress.cs b/FrEee/Utility/Progress.cs index 99489838b..5f20805f5 100644 --- a/FrEee/Utility/Progress.cs +++ b/FrEee/Utility/Progress.cs @@ -1,8 +1,9 @@ -using FrEee.Game.Interfaces; +using FrEee.Interfaces; using FrEee.Modding; using FrEee.Modding.Interfaces; -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; +using FrEee.Serialization; namespace FrEee.Utility { @@ -121,4 +122,4 @@ public override string ToString() return string.Format("{0}: {1}", Item, base.ToString()); } } -} \ No newline at end of file +} diff --git a/FrEee/Utility/Resource.cs b/FrEee/Utility/Resource.cs index 5ec0433e9..cd196b13b 100644 --- a/FrEee/Utility/Resource.cs +++ b/FrEee/Utility/Resource.cs @@ -1,11 +1,12 @@ -using FrEee.Game.Interfaces; -using FrEee.Game.Objects.Civilization; -using FrEee.Utility.Extensions; +using FrEee.Interfaces; +using FrEee.Objects.Civilization; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Linq; +using FrEee.Serialization; namespace FrEee.Utility { diff --git a/FrEee/Utility/ResourceQuantity.cs b/FrEee/Utility/ResourceQuantity.cs index 1046608e6..568e4ce52 100644 --- a/FrEee/Utility/ResourceQuantity.cs +++ b/FrEee/Utility/ResourceQuantity.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Collections.Generic; using System.Linq; diff --git a/FrEee/Utility/SafeDictionary.cs b/FrEee/Utility/SafeDictionary.cs index 247b8e878..d0ce3cd57 100644 --- a/FrEee/Utility/SafeDictionary.cs +++ b/FrEee/Utility/SafeDictionary.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; using System.Collections.Concurrent; using System.Collections.Generic; diff --git a/FrEee/Utility/SafeType.cs b/FrEee/Utility/SafeType.cs index ac15a5a1c..41bae6d2f 100644 --- a/FrEee/Utility/SafeType.cs +++ b/FrEee/Utility/SafeType.cs @@ -1,4 +1,5 @@ -using Newtonsoft.Json; +using FrEee.Serialization; +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; @@ -308,4 +309,4 @@ private static IEnumerable LoadReferencedAssemblies(Assembly rootAssem return alreadyLoaded; }*/ } -} \ No newline at end of file +} diff --git a/FrEee/Utility/Serializer.cs b/FrEee/Utility/Serializer.cs deleted file mode 100644 index beb2b114c..000000000 --- a/FrEee/Utility/Serializer.cs +++ /dev/null @@ -1,162 +0,0 @@ -using Newtonsoft.Json; -using System; -using System.IO; -using System.Runtime.Serialization; -using System.Text; - -namespace FrEee.Utility -{ - /// - /// Serializes and deserializes objects. - /// - public static class Serializer - { - private const bool EnableJsonSerializer = false; - - public static bool IsDeserializing { get; private set; } - - public static T Deserialize(string s) - { - IsDeserializing = true; - T t; - using (MemoryStream stream = new MemoryStream()) - { - var sw = new StreamWriter(stream); - sw.Write(s); - sw.Flush(); - stream.Seek(0, SeekOrigin.Begin); - t = Deserialize(stream); - } - IsDeserializing = false; - return t; - } - - public static T Deserialize(Stream str) - { - return (T)Deserialize(str); - } - - public static object Deserialize(Stream str) - { - try - { - // TODO - enable JSON serializer - IsDeserializing = true; - var result = LegacySerializer.Deserialize(str); - IsDeserializing = false; - return result; - } - catch (JsonException ex) - { - Console.Error.WriteLine("Could not deserialize using JSON serializer. Attempting to use legacy serializer. Error dump follows:"); - Console.Error.WriteLine(ex); - try - { - return LegacySerializer.Deserialize(str); - } - catch (SerializationException ex2) - { - Console.Error.WriteLine("Could not deserialize using legacy serializer. Error dump follows:"); - Console.Error.WriteLine(ex2); - } - throw new Exception("Unable to deserialize. Please check stderr.txt for details."); - - } - } - - public static T DeserializeFromString(string s) - { - return (T)DeserializeFromString(s); - } - - public static object DeserializeFromString(string s) - { - if (EnableJsonSerializer) - { - // warning disabled because code waits for the TODO - enable JSON serializer -#pragma warning disable CS0162 // Unreachable code detected - var js = new JsonSerializer(); - return js.DeserializeFromString(s); -#pragma warning restore CS0162 // Unreachable code detected - } - else - { - IsDeserializing = true; - var sr = new StringReader(s); - var result = LegacySerializer.Deserialize(sr); - IsDeserializing = false; - return result; - } - } - - public static void Serialize(object o, TextWriter w) - { - if (EnableJsonSerializer) - { - // TODO - enable JSON serializer - throw new Exception("JSON serializer isn't configured"); - } - else - LegacySerializer.Serialize(o, w, typeof(object)); - } - - public static void Serialize(object o, Stream s) - { - var sw = new StreamWriter(s); - Serialize(o, sw); - sw.Flush(); - } - - public static string SerializeToString(object o) - { - if (EnableJsonSerializer) - { - // warning disabled because code waits for the TODO - enable JSON serializer -#pragma warning disable CS0162 // Unreachable code detected - var js = new JsonSerializer(); - return js.SerializeToString(o); -#pragma warning restore CS0162 // Unreachable code detected - } - else - { - var sw = new StringWriter(); - LegacySerializer.Serialize(o, sw, typeof(object)); - return sw.ToString(); - } - } - } - - /// - /// Prevents a property from being serialized, or copied when the containing object is copied. - /// - [AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = false)] - public sealed class DoNotSerializeAttribute : DoNotCopyAttribute - { - public DoNotSerializeAttribute(bool allowSafeCopy = true) - : base(allowSafeCopy) - { - } - } - - [AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = false)] - public sealed class SerializationPriorityAttribute : Attribute - { - public SerializationPriorityAttribute(int priority) - { - Priority = priority; - } - - public int Priority { get; private set; } - } - - /// - /// Forces serialization of a property even when it has a default value, e.g. null or zero. - /// - [AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = false)] - public sealed class ForceSerializationWhenDefaultValueAttribute : Attribute - { - public ForceSerializationWhenDefaultValueAttribute() - { - } - } -} diff --git a/FrEee/Utility/Vector2.cs b/FrEee/Utility/Vector2.cs index 65878cbe6..748dd2b79 100644 --- a/FrEee/Utility/Vector2.cs +++ b/FrEee/Utility/Vector2.cs @@ -1,4 +1,4 @@ -using FrEee.Utility.Extensions; +using FrEee.Extensions; using System; namespace FrEee.Utility